thepeg-1.8.0.orig/0000755000175000017500000000000011756460367012146 5ustar sunsunthepeg-1.8.0.orig/NEWS0000644000175000017500000005544111756457634012661 0ustar sunsunThePEG News -*- outline -*- =============================== Numbered bugs can be found at http://projects.hepforge.org/herwig/trac/ticket/NN where NN is the bug number. The latest version of ThePEG can be found at http://www.thep.lu.se/ThePEG or at http:///projects.hepforge.org/herwig/versions * ThePEG-1.8.0 release: 2012-05-21 ** NLO support *** ThePEG now includes structures to ease implementing next-to-leading order (NLO) calculations as well as for interfacing external matrix element codes through runtime interfaces. Particularly, the newly introduced MEGroup and accompanying StdXCombGroup, StdDependentXComb and SubProcessGroup classes provide the functionality required by subtraction approaches to higher orders. A general interface for cutting on reconstructed jets as required by higher-order calculations is included, along with an implementation of kt, Cambridge-Aachen and anti-kt jet finding as relevant for NLO calculations. Hard process implementations deriving from MEBase are no longer limited to the evaluation of PDFs by PartonExtractor objects, thus allowing for a more flexible and more stable implementation of finite collinear contributioins appearing in the context of higher order corrections. *** The generation of phasespace points for the hard subprocess has been made more flexible, particularly to allow generation of incoming parton momenta by the hard matrix element as is typically done by phasespace generators provided with fixed-order codes. Along with this change, generation of the phasespace point does not need to take place in the centre-of-mass system of the incoming partons. *** Various helpers have been added to MEBase and dependent code along with the improvements described above, including simple functionality required for caching intermediate results. *** Tree2toNDiagram supports merging of two external legs, yielding another Tree2toNDiagram object to assist in determining subtraction terms required for a particular process ** Support for SU(3)-sextet colour lines ** Named weights support, also in HepMC Named, optional weights on top of the usual event weight are now fully supported; this includes their communication to HepMC events as well as their parsing from the extented Les Houches file format drafted at the Les Houches workshop 2009. ** Complex masses supported in Helicity code ** Several minor fixes and enhancements * ThePEG-1.7.3 release: 2012-03-05 The only changes are in LesHouches.so, now at version 14. ** Spin information Spin correlation information will now be set up correctly for tau leptons. To go back to the old behaviour, set LesHouchesReader:IncludeSpin No ** Consistency checks Catch broken input where mother-daughter relations are circular. * ThePEG-1.7.2 release: 2011-11-01 ** HepMC configuration Clarified at configure time that HepMC versions before 2.05 are not officially supported. ** Rivet configuration Rivet builds with external header dependencies are now correctly recognized. ** Helicity vertex consistency To help debugging, the addToList() function for registering particle lines connected to a vertex now checks for electric charge conservation at the vertex. Additionally, the specified QED/QCD order of the interaction is checked. ** Ticket #355: Global library list for resume functionality The list of global libraries is now correctly included in the dump file, to fix the functionality of resuming a run from regular checkpoints. * ThePEG-1.7.1 release: 2011-06-20 ** Ticket #238: Self-consistent electroweak schemes The default behaviour of Herwig++ is to use the best values for all the electroweak parameters, which can be inconsistent. Optionally now, a self-consistent electroweak scheme can be chosen in the parameter Model:EW/Scheme. Note that values of 'EW/Scheme' away from the default have not received the same amount of testing. ** Ticket #338: Fixed reporting of floating point exceptions This was an issue whenever LHAPDF libraries were linked in. ** Fixed cTau() behaviour The new behavior is that if both width and lifetime are zero, cTau() returns zero for unstable particles and MaxLength for stable ones. ** MaxErrors The cutoff can be disabled by setting MaxErrors to -1. ** StdOut redirect CurrentGenerator::Redirect now does not redirect to to the internal stream in EventGenerator if the useStdout flag has been set. ** Run name tags Aded possibility to add a tag to the run name when running with the '-t' option. One run file can thus be run with different seeds and result in different output files. ** Exception names EventGenerator tries to convert exception type names into human-readable form. Currently this only works for gcc-compatible compilers. ** Repository API changes Instead of printing an error message to cerr, the Repository::load() and Repository::read(filename,os) commands now behave like the other repo commands and return an error string. This allows --exitonerror to work correctly for load() and read(). Users of these functions need to send the string to cerr themselves if the old output behaviour is required. Repository::read(is, os, prompt) is unchanged. ** HepMC precision The precision() option for HepMC GenEvent is now available as an interface in the HepMCFile analysis handler. ** gcc-4.6 The build has now also been tested with gcc 4.6.0. * ThePEG-1.7.0 release: 2011-02-08 ** Behaviour *** Cross-section information The .out file contains a better estimate of the cross-section directly from the phase space sampler. It should be reliable if not too many events were vetoed during the later phases of the production. *** Simpler decay mode selection Instead of having to turn off every mode individually, the new 'SelectDecayModes' interface allows commands such as tbar:SelectDecayModes none tbar:SelectDecayModes tbar->nu_ebar,e-,bbar; tbar->nu_mubar,mu-,bbar; Use 'PrintDecayModes' to list the available choices. *** Rivet interface The interface will check before the run if all chosen analyses are actually available in Rivet, and will only call finalize() if any events have been generated. Event weights are now passed correctly into Rivet. *** Les Houches QNUMBER support QNUMBER particle creation support has been added to the Les Houches reader. *** Debug level If a debug level is set on the command line, it will always be used. *** Abort preserves events A hard abort exception during event generation will try to finalize as best as it can, thus preserving information about the run until this point. *** Progress log There is a new ThePEG::ProgressLog analysis handler, which prints timing information about the run to screen. *** Graphviz The event graph can show missing momentum information. *** CRLF line endings (Windows-style) File readers can now cope with files that have CRLF (Windows) and CR (Mac) line endings. ** Structure *** Diffraction support To provide support for the simulation of diffractive events, the LeptonLeptonRemnant class was renamed to UnresolvedRemnant, the WeizsackerWilliams PDF extended, BudnevPDF added, and PartonExtractor modified to allow separate override PDFs for each beam. *** Polarized beams The PolarizedBeamParticleData class permits a spin polarization choice on the incoming particles. *** Mixing particles The MixedParticleData class supports mixed particle states. *** SpinBase The SpinBase class has been removed, SpinInfo is now the base class. *** Vertex classes Several new vertices were added for BSM physics, and some minor bugs fixed with existing classes. *** PID type Particle IDs now have their own type, 'PID'. It can only be converted to 'long' to avoid unsigned int overflow errors on 64bit machines. *** ClassDescription There is a simpler way to register ClassDescription information with the Repository: the DescribeClass<> template. No information is needed in the class headers anymore, reducing build dependencies. New code will use this method now, older classes will be migrated in future. *** LWH histogramming The built-in implementation of AIDA histogramming has been restructured slightly to decouple the implementation from the interface. ** Build system *** Silent build rules 'make' now builds silently, to improve readability. To get the old behaviour, run 'make V=1' *** zlib Integrated zlib to read compressed files, such as Les Houches events. *** Libtool 2.4 Will fix some issues on OS X. *** gsl check This check now also works with Rivet ** Bug fixes *** Ticket #286: Implementation of Cuts in LesHouchesReader Les Houches events are given in the lab frame, but QCDCuts expects to be given momenta in the parton-parton cmf. Boost added. *** Ticket #303: AlphaS thresholds AlphaS thresholds were fixed for exactly massless quarks. *** Ticket #304: Length units in HepMC *** Ticket #309: Particle initialization order *** Ticket #310: LeptonLeptonPDF fix * ThePEG-1.6.1 release: 2009-12-11 ** Ticket #292: Spin correlation fix to stabilize tau decay numerics We have restructured the spin correlation code to stabilize the numerical problems seen in tau decays. ** Speed increase Improved decay chain handling speeds up a typical run by a few percent. ** Exception logging The log file lists different exception types individually again instead of grouping them all by severity only. This was broken in the last few releases. * ThePEG-1.6.0 release: 2009-11-19 ** Helicity amplitudes The main change in this release is a streamlining of the helicity amplitude code. If you have self-written vertex classes, you will need to adapt them slightly: *** Spinor representation All spinors are now in HELAS representation, the optional representation switching has been removed. *** Adding particles to the vertex Instead of calling setList(v1, v2, v3) with three vectors of particles that need to be filled in sync, call addToList(p1, p2, p3) repeatedly. *** Name changes To make them consistent with the rest of ThePEG, the names of functions starting with get...() have changed: getFoo() becomes foo(); setFoo(...) becomes foo(...). ** Vector code changes *** Vector3 has been renamed ThreeVector This makes it consistent with the other vector classes. *** LorentzVector::mag()/mag2() removed, to reduce confusion Use the equivalent ::m()/m2() instead to get E^2-p^2. LorentzVector::rho2() == ThreeVector::mag2() == p^2 *** Calculating with a zero-length vector Previously, mathematically undefined values were arbitrarily set to 0 in this situation. Now an assertion failure is triggered in debug mode. Only the azimuthal angle phi() still returns 0. ** Environment variable interpretation removed The programs setupThePEG and runThePEG are not wrapped in shell scripts anymore. All usage of environment variables at runtime has been removed. To influence the behaviour of ThePEG, you will need to use explicit command line flags, or calls to Repository:: functions. ** StandardModelBase now provides G_Fermi InvEnergy2 StandardModelBase::fermiConstant() const; provides the PDG 2006 value of G_Fermi. ** Allow particle width cuts to be unset Setting a negative value for the lower or upper width cut removes that bound on the width. ** Ticket #271: Decay mode names are normalized Previously, the ordering of decay products in a decay mode specifier needed to match ThePEG's internal ordering exactly. This is now done automatically. ** Ticket #273: NoPDF and LesHouches reader The LesHouches reader has been fixed for the case where no PDFs are used in the LHE file. ** Ticket #275: doinitrun() ordering The ACDC sampler now ensures that initrun() of all ME objects is run first. ** Ticket #277: Repository command help texts ThePEG's repository command language now includes a 'help' functionality. ** Redirection of various files The log file stream now goes to stdout instead of stderr when EventGenerator:UseStdout is set. ** Readline support can be disabled Using the configure switch '--disable-readline', the linking of libreadline can be suppressed. This can be useful for batch code that will never be used interactively, if the number of linked-in libraries is a problem. ** --with-LHAPDF configure flag Previously, the full LHAPDF path including lib/ needed to be specified. This now also works with the more common usage of just LHAPDF's prefix path. ** Rivet analysis plugin The Rivet analysis output files are now named consistently like the other output from a run, with the run name as prefix. ** Graphviz event visualization This is now independent of HepMC. The call to void ThePEG::printGraphviz(ostream & os, tcEventPtr event); on any event will output a Graphviz file to the stream, suitable for interpretation with the 'dot' tool. It shows a visualization of the generator's internal event structure, useful for debugging. This is an initial version, feedback is welcome! ** Fixed compatibility with older HepMC versions A problem with rejecting a missing HepMC unit implementation was fixed. * ThePEG-1.5.0 release: 2009-09-01 ** New ZERO object The ZERO object can be used to set any dimensionful quantity to zero. This avoids explicit constructs like 0.0*GeV. ** Readline interface The interactive repository access now uses the readline library, providing a command history and easier command line editing. ** Syntax highlighting We now have a syntax highlighting mode for emacs. To enable it, use 'M-x ThePEG-repository-mode' on any .in file. ** Configure information Important configuration information is listed at the end of the 'configure' run and in the file 'config.thepeg'. Please provide this file in any bug reports. ** Rivet interface ThePEG now supports Rivet internally as an AnalysisHandler if it's available. ** HepMC tools; CLHEP support removed The HepMC file output and graphviz event view have migrated from Herwig++ to ThePEG. The deprecated CLHEP support has been removed. ** Exception specifiers removed Client code changes are needed in doinit() etc. Simply remove the exception specifier after the function name. ** Support for HepMC 2.05 *** New features ThePEG now supports cross-section output, PDF information and unit specifications if they are available in HepMC. *** IO_ASCII Support for the deprecated IO_ASCII format has been removed. *** Status codes ThePEG uses codes 1, 2 and 11 according to the HepMC agreement. ** Redirection of .out, .log and .tex to stdout Set 'EventGenerator:UseStdout' to 'Yes' and (almost) all output will be streamed to stdout instead of files. ** Ticket #248: Les Houches reader The cross-section information is now reported correctly when reading several files. ** Cuts output If the debug level is set > 0, the current set of cuts is prepended to the logfile. ** Preweighting of matrix elements A segfault when using preweights was fixed. Preweights are now correctly included in handler statistics. ** Other technical changes *** Colour line improvements *** PDFsets.index search improved *** Ticket #232: Java check on OS X now works headless *** Running couplings restructured *** LeptonLeptonRemnant iprovements to support GammaGamma *** WaveFunction constructors streamlined *** VertexBase now provides sin2ThetaW etc. * ThePEG-1.4.2 release: 2009-05-08 ** Ticket #242 Fixed a compiler problem that showed up on openSUSE 10.2, g++ 4.1.2. A source line was omitted if the optimization level was higher than -O1. ** User interaction Dump file generation can now be disabled completely by setting EventGenerator:DumpPeriod to -1. * ThePEG-1.4.1 release: 2009-03-31 ** User interaction Error messages have been clarified in BaseRepository and StandardEventHandler ** Les Houches files File readers are more robust, with clearer messages when things go wrong. ** Floating point issues fixed in ThreeVector and VertexBase. ** HepMC converter Fixed PDF choice for asymmetric beams. ** Libtool Updated to version 2.2.6 * ThePEG-1.4.0 release: 2008-12-02 ** Efficiency improvements The LorentzVector class, the helicity amplitude code and PDF lookups have been profiled and restructured to eliminate speed bottlenecks. ** Deep inelastic scattering Support for DIS is now implemented in ThePEG. ** New rapidity cut Added alternative pT cut that cuts on rapidity rather than pseudorapidty as the existing one fails for zero-pt massive particles. ** HepMC units support Users of HepMC versions > 2.04 get full units support. The HepMC GenEvent object has the correct units set. ** Support for HepMC PdfInfo data Users of the HepMC converter can now fill the PdfInfo data, which has been available since HepMC 1.28.00. Older versions are no longer supported. ** Ticket #199: Particle lifetime cutoff Users can set a maximum lifetime. Particles that live longer than this are not decayed. ** Ticket #215: Madgraph Fixed a problem in reading certain Madgraph event files. ** Les Houches files Optional rescaling of energy or mass of particles which were read in. Check the file to trap 'nan' and 'inf' values early during the read-in. ** File cleanup Most inline functions are now defined in the headers rather than a separate .icc file. * ThePEG-1.3.0 release: 2008-06-20 ** Statistical errors Error estimates on the cross-sections are now reported in the .out files. ** Decaymode setup The decaymode setup has been reworked, keeping backwards compatibility. The 'defaultparticle' command has been removed. ** Madgraph reader Updated to latest Madevent version. ** LHAPDF improvements lhapdf-config is not used anymore to determine the location of the PDF sets. Instead, they are fixed at configure-time. ** HepMC The beam particles are now set correctly. ** Arbitrary search paths for .in files Input files don't have to be in '.', use '-I' to specify additional directories. ** Ticket #172 Fix for cuts in mirrored processes. ** Simpler emacs macros The emacs macros have been significantly cleaned up. ** Helicity vertex classes Potential prolems with uninitialized variables were fixed. No actual bugs had occurred from here. ** Memory leak fixes and performance Several loops of shared pointers were fixed involving DecayModes and ParticleData. FixedSizeAllocator was removed, the regular 'new' and 'delete' is now used for all allocations, giving a 5% speedup. * ThePEG-1.2.0 release: 2008-04-18 ** ThePEG uses GSL The GNU Scientific Library and its headers are now required for building ThePEG. RandomGenerator partially uses GSL now. ** Ticket #160: HepMC converter Optionally, the HepMC converter can fill an external GenEvent object, instead of newing one internally. ** 'globallibrary' command The 'globallibrary' command can be used to register libraries which are useful for the whole run. They do not need to be listed in each class's library() function. ** Resume from dump files (also solves #149) The --resume command line flag instructs runThePEG to resume the run from a previous dump file. 'set Generator:DumpPeriod 1000' writes such a checkpoint every 1000 events. ** New Repository interface (also solves #141) The repository now provides a Repository::cleanup() method, to be called at the end of a run. Alternatively, a Repository object can be created and its member functions called. ** Les Houches interface improvements. LesHouchesReader had had a major overhaul. ** XSecCheck analysis Issues a warning if a target cross section is not met in the run. ** Weighted events Handling of weighted events was improved. ** Ticket #124: 'Deleted' interface option Interfaces can be declared obsolete, a warning will be issued when they're used. ** LHAPDF interface The interface now allows photons as partons inside a hadron. ** gcc 4.3.0 ThePEG compiles cleanly with the new gcc 4.3 series. ** Bug #138 Lepton NoPDF now works. * ThePEG-1.1.2 release: 2008-02-25 ** Bug #136: dSigHatDR Efficiency improvement for zero PDF. ** Bug #137: HepMC conversion The HepMC converter now takes a unit argument to specify which energy and length units should be used in the HepMC event. ** Bug #140 / #141: Crash on shutdown This fixes a bug introduced in 1.1.1. External code interfaces should now work again. ** Bug #151: Loop in Remnant record The loop between remnants in the event record has been removed. ** PDF improvements Fix to handling of maximum flavour from LHAPDF. Fix for xmin calculation. * ThePEG-1.1.1 release: 2007-12-07 ** Bug #46: Reproducibility Fixed a problem where runs were not identical for a given random number seed. You now _must_ reset the seed if you need independent event generator runs. ** Detection of gcc abs bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130 configure now checks for and works around the gcc abs() bug. ** Separate LWHFactory library Fixed problem in Rivet interaction by factoring out LWHFactory into its own dynamic library. * ThePEG-1.1.0 release: 2007-11-20 ** New vector classes ThePEG now uses its own internal Vector classes, making it independent of CLHEP. ** New dimension checking mechanism Optionally, any physical expression is checked for dimensional correctness at compile time. ** Extended Helicity classes A full set of helicity amplitude classes has been transferred from Herwig++. ** unlisted Many other improvements and small bug fixes, see ChangeLog. * ThePEG-1.0.1 release: 2006-11-22 ** unlisted: Fixed memory leak in LesHouchesReader. ** Bug #58 maximumCMEnergy() member of the EventGenerator returns zero. See ChangeLog entry 2006-10-06 ** Bug #62 fixed 'const' behaviour in Lorentz spinor classes ** Bug #68 Improved error message for switch options ** unlisted Improved compile-time LHAPDF library and include file handling. ** unlisted Bug in IteratorRange::rrange(const Container &). ** unlisted fixed Selector::swap() ** unlisted Bug in ClusterCollapser where no colour-singlet particles were considered for momentum compensation if no coloured particles were present. ** unlisted Bug in LeptonLeptonRemnant: minX variable not persistent ** unlisted scale of the produced coloured particles was not set in Onium3GDecayer and ColourPairDecayer ** unlisted unused default path removed from DynamicLoader * ThePEG-1.0 release: 2006-09-27 thepeg-1.8.0.orig/Cuts/0000755000175000017500000000000011756460367013064 5ustar sunsunthepeg-1.8.0.orig/Cuts/DeltaMeasureCuts.cc0000644000175000017500000000736511747772425016621 0ustar sunsun// -*- C++ -*- // // DeltaMeasureCuts.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DeltaMeasureCuts class. // #include "DeltaMeasureCuts.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/PDT/MatcherBase.h" using namespace ThePEG; void DeltaMeasureCuts::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "MinDeltaR = " << theMinDeltaR << " \n" << "MinDeltaEta = " << theMinDeltaEta << " \n\n"; } IBPtr DeltaMeasureCuts::clone() const { return new_ptr(*this); } IBPtr DeltaMeasureCuts::fullclone() const { return new_ptr(*this); } Energy DeltaMeasureCuts::minDeltaMeasureCuts(tcPDPtr, tcPDPtr) const { return ZERO; } Energy2 DeltaMeasureCuts::minSij(tcPDPtr, tcPDPtr) const { return ZERO; } Energy2 DeltaMeasureCuts::minTij(tcPDPtr, tcPDPtr) const { return ZERO; } Energy DeltaMeasureCuts::minKTClus(tcPDPtr, tcPDPtr) const { return ZERO; } double DeltaMeasureCuts::minDeltaR(tcPDPtr, tcPDPtr) const { return theMinDeltaR; } double DeltaMeasureCuts::minDurham(tcPDPtr, tcPDPtr) const { return 0.0; } bool DeltaMeasureCuts::passCuts(tcCutsPtr, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci, bool incj) const { if ( theMatcher && !theMatcher->matches(*pitype) ) return true; if ( theMatcher && !theMatcher->matches(*pjtype) ) return true; if ( inci || incj ) return true; else { double deta2 = sqr(pi.eta() - pj.eta()); if (abs(pi.eta() - pj.eta()) <= theMinDeltaEta) return false; double dphi = abs(pi.phi() - pj.phi()); if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi; double dr = sqrt(deta2 + sqr(dphi)); if ( dr <= theMinDeltaR ) return false; } return true; } void DeltaMeasureCuts::persistentOutput(PersistentOStream & os) const { os << theMinDeltaEta << theMinDeltaR << theMatcher; } void DeltaMeasureCuts::persistentInput(PersistentIStream & is, int) { is >> theMinDeltaEta >> theMinDeltaR >> theMatcher; } ClassDescription DeltaMeasureCuts::initDeltaMeasureCuts; // Definition of the static class description member. void DeltaMeasureCuts::Init() { static ClassDocumentation documentation ("This clas implements the cuts relevant for the " "\\f$\\Delta R\\f$-measure in the longitudinally invariant " "kt-algorithm. By default the cut is only applied to coloured " "particles, but optionally it may be applied to all particle types."); static Parameter interfaceMinDeltaR ("MinDeltaR", "The minimum allowed legoplot distance ", &DeltaMeasureCuts::theMinDeltaR, 0.7, 0.0, 10.0, false, false, Interface::limited); static Parameter interfaceMinDeltaEta ("MinDeltaEta", "The minimum allowed rapidity separation ", &DeltaMeasureCuts::theMinDeltaEta, 0.0, 0.0, 10.0, false, false, Interface::limited); static Reference interfaceMatcher ("Matcher", "If non-null only particles matching this object will be affected " "by the cut.", &DeltaMeasureCuts::theMatcher, true, false, true, true, false); } thepeg-1.8.0.orig/Cuts/SimpleKTCut.cc0000644000175000017500000001300211747772425015534 0ustar sunsun// -*- C++ -*- // // SimpleKTCut.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleKTCut class. // #include "SimpleKTCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/MatcherBase.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; SimpleKTCut::~SimpleKTCut() {} void SimpleKTCut::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "KT = " << theMinKT/GeV << " .. " << theMaxKT/GeV << " GeV\n" << "Eta = " << theMinEta << " .. " << theMaxEta << "\n\n"; } IBPtr SimpleKTCut::clone() const { return new_ptr(*this); } IBPtr SimpleKTCut::fullclone() const { return new_ptr(*this); } Energy SimpleKTCut::minKT(tcPDPtr p) const { if ( theMatcher && !theMatcher->matches(*p) ) return ZERO; return theMinKT; } double SimpleKTCut::minEta(tcPDPtr p) const { if ( theMatcher && !theMatcher->matches(*p) ) return -Constants::MaxRapidity; return theMinEta; } double SimpleKTCut::maxEta(tcPDPtr p) const { if ( theMatcher && !theMatcher->matches(*p) ) return Constants::MaxRapidity; return theMaxEta; } bool SimpleKTCut::passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const { if ( theMatcher && !theMatcher->matches(*ptype) ) return true; if ( p.perp() < theMinKT ) return false; if ( p.perp() > theMaxKT ) return false; double y = abs(p.t()) <= abs(p.z()) ? (p .z() > ZERO ? 1e10 : -1e10) : p.rapidity(); y += parent->Y() + parent->currentYHat(); if ( p.mt()*sinh(y) <= p.perp()*sinh(theMinEta) ) return false; if ( p.mt()*sinh(y) >= p.perp()*sinh(theMaxEta) ) return false; return true; } void SimpleKTCut::persistentOutput(PersistentOStream & os) const { os << ounit(theMinKT, GeV) << ounit(theMaxKT, GeV) << theMinEta << theMaxEta << theMatcher; } void SimpleKTCut::persistentInput(PersistentIStream & is, int) { is >> iunit(theMinKT, GeV) >> iunit(theMaxKT, GeV) >> theMinEta >> theMaxEta >> theMatcher; } ClassDescription SimpleKTCut::initSimpleKTCut; // Definition of the static class description member. Energy SimpleKTCut::maxKTMin() const { return theMaxKT; } Energy SimpleKTCut::minKTMax() const { return theMinKT; } double SimpleKTCut::maxEtaMin() const { return theMaxEta; } double SimpleKTCut::minEtaMax() const { return theMinEta; } void SimpleKTCut::Init() { typedef double (ThePEG::SimpleKTCut::*IGFN)() const; typedef void (ThePEG::SimpleKTCut::*ISFN)(double); typedef Energy (ThePEG::SimpleKTCut::*IGFNK)() const; typedef void (ThePEG::SimpleKTCut::*ISFNK)(Energy); static ClassDocumentation documentation ("This is a very simple concrete sub-class of OneCutbase simply " "requiring a minimum transverse momentum of any outgoing particle. " "It is also possible to require a minimum and maximum pseudorapidity. " "Optionally the restrictions only apply to particles matching a " "specific matcher object."); static Parameter interfaceMinKT ("MinKT", "The minimum allowed value of the transverse momentum of an outgoing " "parton.", &SimpleKTCut::theMinKT, GeV, 10.0*GeV, ZERO, Constants::MaxEnergy, true, false, Interface::limited, (ISFNK)0, (IGFNK)0, (IGFNK)0, &SimpleKTCut::maxKTMin, (IGFNK)0); static Parameter interfaceMaxKT ("MaxKT", "The maximum allowed value of the transverse momentum of an outgoing " "parton. Note that this cut does not increase the efficiency of the phase " "space generation, but is only applied as a post-cut.", &SimpleKTCut::theMaxKT, GeV, Constants::MaxEnergy, ZERO, ZERO, true, false, Interface::lowerlim, (ISFNK)0, (IGFNK)0, &SimpleKTCut::minKTMax, (IGFNK)0, (IGFNK)0); static Parameter interfaceMinEta ("MinEta", "The minimum allowed pseudo-rapidity of an outgoing parton. " "The pseudo-rapidity is measured in the lab system.", &SimpleKTCut::theMinEta, -Constants::MaxRapidity, 0, Constants::MaxRapidity, true, false, Interface::upperlim, (ISFN)0, (IGFN)0, (IGFN)0, &SimpleKTCut::maxEtaMin, (IGFN)0); static Parameter interfaceMaxEta ("MaxEta", "The maximum allowed pseudo-rapidity of an outgoing parton. " "The pseudo-rapidity is measured in the lab system.", &SimpleKTCut::theMaxEta, Constants::MaxRapidity, -Constants::MaxRapidity, 0, true, false, Interface::lowerlim, (ISFN)0, (IGFN)0, &SimpleKTCut::minEtaMax, (IGFN)0, (IGFN)0); static Reference interfaceMatcher ("Matcher", "If non-null only particles matching this object will be affected " "by the cut.", &SimpleKTCut::theMatcher, true, false, true, true, false); interfaceMinKT.rank(10); interfaceMaxKT.rank(6); interfaceMinEta.rank(9); interfaceMaxEta.rank(8); interfaceMatcher.rank(7); interfaceMinKT.setHasDefault(false); interfaceMaxKT.setHasDefault(false); interfaceMinEta.setHasDefault(false); interfaceMaxEta.setHasDefault(false); } thepeg-1.8.0.orig/Cuts/KTClus.cc0000644000175000017500000000773511747772425014555 0ustar sunsun// -*- C++ -*- // // KTClus.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the KTClus class. // #include "KTClus.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; void KTClus::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "Cut = " << theCut/GeV << " GeV\n\n"; } IBPtr KTClus::clone() const { return new_ptr(*this); } IBPtr KTClus::fullclone() const { return new_ptr(*this); } Energy KTClus::minKTClus(tcPDPtr pi, tcPDPtr pj) const { if ( onlyJets && ( ( pi && !pi->coloured() ) || ( pj && !pj->coloured() ) ) ) return ZERO; if ( !pi && !pj ) return ZERO; return theCut; } Energy2 KTClus::minSij(tcPDPtr, tcPDPtr) const { return ZERO; } Energy2 KTClus::minTij(tcPDPtr, tcPDPtr) const { return ZERO; } double KTClus::minDeltaR(tcPDPtr, tcPDPtr) const { return 0.0; } double KTClus::minDurham(tcPDPtr, tcPDPtr) const { return 0.0; } bool KTClus::passCuts(tcCutsPtr, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci, bool incj) const { if ( onlyJets && ( ( !inci && pitype && !pitype->coloured() ) || ( !incj && pjtype && !pjtype->coloured() ) ) ) return true; if ( inci && incj ) return true; else if ( inci ) { if ( pj.perp() <= theCut ) return false; } else if ( incj ) { if ( pi.perp() <= theCut ) return false; } else { double deta2 = sqr(pi.eta() - pj.eta()); double dphi = abs(pi.phi() - pj.phi()); if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi; double dr = sqrt(deta2 + sqr(dphi)); if ( min(pi.perp(), pj.perp())*dr <= theCut ) return false; } return true; } void KTClus::persistentOutput(PersistentOStream & os) const { os << ounit(theCut, GeV) << onlyJets; } void KTClus::persistentInput(PersistentIStream & is, int) { is >> iunit(theCut, GeV) >> onlyJets; } ClassDescription KTClus::initKTClus; // Definition of the static class description member. void KTClus::Init() { static ClassDocumentation documentation ("This clas implements the cuts relevant for the " "\\f$\\Delta R\\f$-measure in the longitudinally invariant " "kt-algorithm. By default the cut is only applied to coloured " "particles, but optionally it may be applied to all particle types."); static Parameter interfaceCut ("Cut", "The minimum allowed value of the longitudinally invariant " "\\f$k_\\perp\\f$-algorithms distance measure. This is defined as " "\\f$\\min(p_{\\perp i}, p_{\\perp j})" "\\sqrt{\\Delta\\eta_{ij}^2+\\Delta\\phi_{ij}^2}\\f$ for two outgoing " "partons, or simply \\f$p_{\\perp i}\\f$ or \\f$p_{\\perp j}\\f$ for a " "single outgoing parton.", &KTClus::theCut, GeV, 10.0*GeV, ZERO, ZERO, true, false, Interface::lowerlim); interfaceCut.setHasDefault(false); static Switch interfaceOnlyJets ("OnlyJets", "If true, only apply the cut to pairs of coloured particles.", &KTClus::onlyJets, true, true, false); static SwitchOption interfaceOnlyJetsOnlyJets (interfaceOnlyJets, "OnlyJets", "The cut is only applied to pairs of coloured particles.", true); static SwitchOption interfaceOnlyJetsAll (interfaceOnlyJets, "All", "The cut is applied to all particle types.", false); interfaceOnlyJets.setHasDefault(false); interfaceCut.rank(10); interfaceOnlyJets.rank(9); } thepeg-1.8.0.orig/Cuts/TwoCutBase.h0000644000175000017500000001171711747772425015265 0ustar sunsun// -*- C++ -*- // // TwoCutBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_TwoCutBase_H #define THEPEG_TwoCutBase_H // // This is the declaration of the TwoCutBase class. // #include "ThePEG/Interface/Interfaced.h" #include "TwoCutBase.fh" #include "Cuts.fh" namespace ThePEG { /** * This class corresponds to a kinematical cut to be made on a pair of * particles in a hard sub-process. * * There are six main virtual functions to be overridden by concrete * sub-classes. minsSij(), minTij(), minDeltaR(), minKTClus() and * minDurham() returns the minimum allowed values of pre defined * kinematical variable. In addition the passCut() function should * return true if a pair of particle with a given types and given * momenta will pass the cuts. * * @see \ref TwoCutBaseInterfaces "The interfaces" defined for * TwoCutBase. */ class TwoCutBase: public Interfaced { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ TwoCutBase() {} /** * The destructor. */ virtual ~TwoCutBase(); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. */ virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const = 0; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. */ virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const = 0; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. */ virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const = 0; /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. */ virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const = 0; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. */ virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const = 0; /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci = false, bool incj = false) const; /** * Return true if the given pair of particles passes the cuts. \a * inci and \a inj indicates if the corresponding particles are * incoming. */ bool passCuts(tcCutsPtr parent, tcPPtr pi, tcPPtr pj, bool inci = false, bool incj = false) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class with persistent data. */ static AbstractNoPIOClassDescription initTwoCutBase; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ TwoCutBase & operator=(const TwoCutBase &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of TwoCutBase. */ template <> struct BaseClassTrait { /** Typedef of the first base class of TwoCutBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of * the TwoCutBase class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::TwoCutBase"; } }; /** @endcond */ } #endif /* THEPEG_TwoCutBase_H */ thepeg-1.8.0.orig/Cuts/SimpleDISCut.cc0000644000175000017500000001355211747772425015647 0ustar sunsun// -*- C++ -*- // // SimpleDISCut.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleDISCut class. // #include "SimpleDISCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; void SimpleDISCut::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "Q2 = " << theMinQ2/GeV2 << " .. " << theMaxQ2/GeV2 << " GeV2\n" << "W2 = " << theMinW2/GeV2 << " .. " << theMaxW2/GeV2 << " GeV2\n\n"; } IBPtr SimpleDISCut::clone() const { return new_ptr(*this); } IBPtr SimpleDISCut::fullclone() const { return new_ptr(*this); } bool SimpleDISCut::check(long idi, long ido) const { if ( abs(idi) <= 10 || abs(idi) > 16 ) return false; if ( idi*ido <= 0 ) return false; if ( chargedCurrent ) { if ( abs(idi)%2 ) return abs(idi) == abs(ido) - 1; else return abs(idi) == abs(ido) + 1; } else { return ( idi == ido ); } } Energy2 SimpleDISCut::minTij(tcPDPtr pi, tcPDPtr po) const { if ( !check(pi->id(), po->id()) ) return ZERO; return theMinQ2; } bool SimpleDISCut::passCuts(tcCutsPtr cuts, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci, bool incj) const { if ( inci ) { if ( incj ) return true; if ( !check(pitype->id(), pjtype->id()) ) return true; Energy2 Q2 = -(pi - pj).m2(); double x = min(1.0, sqrt(cuts->currentSHat()/cuts->SMax())* exp(-cuts->currentYHat())); Energy2 W2 = (1.0 - x)*Q2/x; return Q2 > theMinQ2 && Q2 < theMaxQ2 && W2 > theMinW2 && W2 < theMaxW2; } else if ( incj ) { if ( !check(pjtype->id(), pitype->id()) ) return true; Energy2 Q2 = -(pj - pi).m2(); double x = min(1.0, sqrt(cuts->currentSHat()/cuts->SMax())* exp(cuts->currentYHat())); Energy2 W2 = (1.0 - x)*Q2/x; return Q2 > theMinQ2 && Q2 < theMaxQ2 && W2 > theMinW2 && W2 < theMaxW2; } return true; } Energy2 SimpleDISCut::minSij(tcPDPtr, tcPDPtr) const { return ZERO; } double SimpleDISCut::minDeltaR(tcPDPtr, tcPDPtr) const { return 0.0; } Energy SimpleDISCut::minKTClus(tcPDPtr, tcPDPtr) const { return ZERO; } double SimpleDISCut::minDurham(tcPDPtr, tcPDPtr) const { return 0.0; } void SimpleDISCut::persistentOutput(PersistentOStream & os) const { os << ounit(theMinQ2, GeV2) << ounit(theMaxQ2, GeV2) << ounit(theMinW2, GeV2) << ounit(theMaxW2, GeV2) << chargedCurrent; } void SimpleDISCut::persistentInput(PersistentIStream & is, int) { is >> iunit(theMinQ2, GeV2) >> iunit(theMaxQ2, GeV2) >> iunit(theMinW2, GeV2) >> iunit(theMaxW2, GeV2) >> chargedCurrent; } ClassDescription SimpleDISCut::initSimpleDISCut; // Definition of the static class description member. Energy2 SimpleDISCut::maxMinQ2() const { return theMaxQ2; } Energy2 SimpleDISCut::minMaxQ2() const { return theMinQ2; } Energy2 SimpleDISCut::maxMinW2() const { return theMaxW2; } Energy2 SimpleDISCut::minMaxW2() const { return theMinW2; } void SimpleDISCut::Init() { static ClassDocumentation documentation ("SimpleDISCut inherits from TwoCutBase and omplements a simple " "\\f$Q^2\\f$ cut on the a scattered lepton, either neutral or charged " "current."); static Parameter interfaceMinQ2 ("MinQ2", "The minimum \\f$Q^2\\f$.", &SimpleDISCut::theMinQ2, GeV2, 1.0*GeV2, ZERO, Constants::MaxEnergy2, true, false, Interface::limited, 0, 0, 0, &SimpleDISCut::maxMinQ2, 0); static Parameter interfaceMaxQ2 ("MaxQ2", "The maximum \\f$Q^2\\f$. Note that this is only applied as a post-cut " "and will not affect the initial phase space cuts in the generation.", &SimpleDISCut::theMaxQ2, GeV2, 100.0*GeV2, ZERO, ZERO, true, false, Interface::lowerlim, 0, 0, &SimpleDISCut::minMaxQ2, 0, 0); static Parameter interfaceMinW2 ("MinW2", "The minimum \\f$W^2\\f$. Note that this is only applied as a post-cut " "and will not affect the initial phase space cuts in the generation.", &SimpleDISCut::theMinW2, GeV2, 100.0*GeV2, ZERO, Constants::MaxEnergy2, true, false, Interface::limited, 0, 0, 0, &SimpleDISCut::maxMinW2, 0); static Parameter interfaceMaxW2 ("MaxW2", "The maximum \\f$W^2\\f$. Note that this is only applied as a post-cut " "and will not affect the initial phase space cuts in the generation.", &SimpleDISCut::theMaxW2, GeV2, 1000000.0*GeV2, ZERO, ZERO, true, false, Interface::lowerlim, 0, 0, &SimpleDISCut::minMaxW2, 0, 0); static Switch interfaceCurrent ("Current", "Determines whether this cut should be applied to charged or neutral " "current events.", &SimpleDISCut::chargedCurrent, false, true, false); static SwitchOption interfaceCurrentCharged (interfaceCurrent, "Charged", "The cut is only applied to charged current events.", true); static SwitchOption interfaceCurrentNeutral (interfaceCurrent, "Neutral", "The cut is only applied to neutral current events.", false); interfaceMinQ2.rank(10); interfaceMaxQ2.rank(9); interfaceCurrent.rank(8); interfaceMinQ2.setHasDefault(false); interfaceMaxQ2.setHasDefault(false); interfaceMinW2.setHasDefault(false); interfaceMaxW2.setHasDefault(false); interfaceCurrent.setHasDefault(false); } thepeg-1.8.0.orig/Cuts/Cuts.fh0000644000175000017500000000036111747772425014322 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the Cuts class. // #ifndef ThePEG_Cuts_FH #define ThePEG_Cuts_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class Cuts; ThePEG_DECLARE_POINTERS(Cuts,CutsPtr); } #endif thepeg-1.8.0.orig/Cuts/Cuts.h0000644000175000017500000005226011747772425014161 0ustar sunsun// -*- C++ -*- // // Cuts.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_Cuts_H #define THEPEG_Cuts_H // // This is the declaration of the Cuts class. // #include "ThePEG/Interface/Interfaced.h" #include "Cuts.fh" #include "OneCutBase.h" #include "TwoCutBase.h" #include "MultiCutBase.h" #include "JetFinder.h" namespace ThePEG { /** * Cuts is a class for implementing kinematical cuts in ThePEG. The * class itself only implements cuts on the total momentum of the hard * sub-process, implemented as minimum and maximum values of \f$x_1\f$ * and \f$x_2\f$ (or \f$\hat{s}=x_1x_2S_{tot}\f$ and * \f$\hat{y}=\log(x_1/x_2)/2\f$. Further cuts can be implemented * either by inheriting from this base class, in which the virtual * cut() function should be overridden, or by assigning objects of * class OneCutBase, TwoCutBase and MultiCutBase defining cuts on * single particles, pairs of particles and groups of particles in the * hard sub-process respectively. * * The Cuts object must be initialized specifying the overall * laboratory frame, giving the total squared invariant mass, \f$S\f$, * and the rapidity, \f$Y\f$, of the colliding particles in this * frame. The colliding particles are thus assumed to be directed * along the \f$z\f$-axis. * * For each event, the Cuts object must also be initialized giving the * squared invarint mass, \f$\hat{s}\f$, and the total rapidity, * \f$\hat{y}\f$, of the hard sub-process in the center-of-mass frame * of the colliding particles. Note that this means that the * transformation between the lab frame and the rest frame of the hard * sub-process is assumed to be a simple boost along the z-axis. * * @see \ref CutsInterfaces "The interfaces" * defined for Cuts. */ class Cuts: public Interfaced { public: /** * A vector of OneCutBase pointers. */ typedef vector OneCutVector; /** * A vector of TwoCutBase pointers. */ typedef vector TwoCutVector; /** * A vector of MultiCutBase pointers. */ typedef vector MultiCutVector; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ Cuts(Energy MhatMin=2*GeV); /** * The destructor. */ virtual ~Cuts(); //@} public: /** @name Initialization functions. */ //@{ /** * Initialize this object specifying the maximum total invariant * mass squared, \a smax, and the total rapidity, \a Y, of the * colliding particles (for the maximum invariant mass). A sub-class * overriding this function must make sure the base-class function * is called. This function should be called once in the beginning * of a run. */ virtual void initialize(Energy2 smax, double Y); /** * Initialize this object for a new event. A sub-class overriding * this function must make sure the base-class function is called. * This function is called before the generation of a new * sub-process, before the incoming partons have been generated. */ virtual void initEvent(); /** * Set information about the invariant mass squared, \a shat, and * rapidity, \a yhat, of the hard sub-process. The rapidity should * be given wrt. the center of mass of the colliding particles. A * sub-class overriding this function must make sure the base-class * function is called. This function is called before the generation * of a new sub-process, after the incoming partons have been * generated. If \a mirror is true any questions regarding cuts on * the sub-process in the functions minYStar(tcPDPtr), * maxYStar(tcPDPtr p), passCuts(const tcPDVector &, const * vector &, tcPDPtr, tcPDPtr) and passCuts(const * tcPVector &, tcPDPtr t1, tcPDPtr) will assume that the z-axis is * reversed in the sub-process rest frame. Returns false if the * given values were outside of the cuts. */ virtual bool initSubProcess(Energy2 shat, double yhat, bool mirror = false) const; //@} /** @name Check functions to see if a state has passed the cuts or not. */ //@{ /** * Check if the outgoing particles, with the given types and * momenta, from a sub-process passes the cuts. The particles must * be given in the rest frame of tha hard sub-process, and the * initSubProcess must have been called before. Also the types of * the incoming partons, \a t1 and \a t2, may be given if availible. */ virtual bool passCuts(const tcPDVector & ptype, const vector & p, tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const; /** * Check if the outgoing particles from a sub-process passes the * cuts. The particles must be given in the rest frame of tha hard * sub-process, and the initSubProcess must have been called * before. Also the types of the incoming partons, \a t1 and \a t2, * may be given if availible. */ bool passCuts(const tcPVector & p, tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const; /** * Check if the incoming and outgoing particles in the given * sub-process passes the cuts. The sub-process must be given in its * rest frame, and the initSubProcess must have been called before. */ bool passCuts(const SubProcess & sub) const; /** * Check if the given collision passes the cuts. The collision must * be given in its rest frame. */ bool passCuts(const Collision & coll) const; //@} /** @name Access to cuts of the underlying cut objects. */ //@{ /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. This function first determines * the minimum from the corresponding function from in TwoCutBase * objects. If no minimum was found, one is derived from * minKTClus(), minDurham(), minKT() and minDeltaR(), if possible. */ Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. This function first determines the * minimum from the corresponding function from in TwoCutBase * objects. If no minimum was found, one is derived from minKT(), if * possible. */ Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. Simply returns the * maximum of the results from calling the corresponding function in * the TwoCutBase objects. */ double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. Simply returns the maximum of the * results from calling the corresponding function in the TwoCutBase * objects. */ Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. Simply returns the maximum of the results from * calling the corresponding function in the TwoCutBase objects. */ double minDurham(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the transverse momentum of an * outgoing parton. This function first determines the minimum from * the corresponding function from in OneCutBase objects. If no * minimum was found, one is derived from minKTClus(), if possible. */ Energy minKT(tcPDPtr p) const; /** * Return the minimum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. Simply returns the maximum of the results from calling * the corresponding function in the OneCutBase objects. */ double minEta(tcPDPtr p) const; /** * Return the maximum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. Simply returns the minimum of the results from calling * the corresponding function in the OneCutBase objects. */ double maxEta(tcPDPtr p) const; /** * Return the minimum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. Simply returns the maximum of the results from calling * the corresponding function in the OneCutBase objects. */ double minRapidityMax(tcPDPtr p) const; /** * Return the maximum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. Simply returns the minimum of the results from calling * the corresponding function in the OneCutBase objects. */ double maxRapidityMin(tcPDPtr p) const; /** * Return the minimum allowed rapidity of an outgoing parton of the * given type in the center-of-mass system of the hard sub-process. * Only available after initSubProcess() has been called. */ double minYStar(tcPDPtr p) const; /** * Return the minimum allowed rapidity of an outgoing parton of the * given type in the center-of-mass system of the hard sub-process. * Only available after initSubProcess() has been called. */ double maxYStar(tcPDPtr p) const; /** * Return the minimum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for * efficiency. Simply returns the maximum of the results from * calling the corresponding function in the MultiCutBase objects. */ Energy2 minS(const tcPDVector & pv) const; /** * Return the maximum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for * efficiency. Simply returns the minimum of the results from * calling the corresponding function in the MultiCutBase objects. */ Energy2 maxS(const tcPDVector & pv) const; //@} /** @name Direct access to underlying cut objects. */ //@{ /** * Return a vector of pointers to objects of the given class (with * base class OneCutBase). */ template vector::transient_const_pointer> oneCutObjects() const; /** * Return a vector of pointers to objects of the given class (with * base class TwoCutBase). */ template vector::transient_const_pointer> twoCutObjects() const; /** * Return a vector of pointers to objects of the given class (with * base class MultiCutBase). */ template vector::transient_const_pointer> multiCutObjects() const; /** * Return the objects defining cuts on single outgoing partons from the * hard sub-process. */ const OneCutVector& oneCuts() const { return theOneCuts; } /** * Return the objects defining cuts on pairs of particles in the hard * sub-process. */ const TwoCutVector& twoCuts() const { return theTwoCuts; } /** * Return the objects defining cuts on sets of outgoing particles from the * hard sub-process. */ const MultiCutVector& multiCuts() const { return theMultiCuts; } /** * Return the jet finder */ Ptr::tptr jetFinder() const { return theJetFinder; } /** * Add a OneCutBase object. */ void add(tOneCutPtr c) { theOneCuts.push_back(c); } /** * Add a TwoCutBase object. */ void add(tTwoCutPtr c) { theTwoCuts.push_back(c); } /** * Add a MultiCutBase object. */ void add(tMultiCutPtr c) { theMultiCuts.push_back(c); } //@} public: /** @name Simple access functions. */ //@{ /** * The maximum allowed total invariant mass squared allowed for * events to be considered. */ Energy2 SMax() const { return theSMax; } /** * The total rapidity of the colliding particles corresponding to * the maximum invariant mass squared, SMax(). */ double Y() const { return theY; } /** * The invariant mass squared of the hard sub-process of the event * being considered. */ Energy2 currentSHat() const { return theCurrentSHat; } /** * The total rapidity of hard sub-process (wrt. the rest system of * the colliding particles so that currentYHat() + Y() gives the * true rapidity) of the event being considered. */ double currentYHat() const { return theCurrentYHat; } //@} /** @name Functions to inquire about specific cuts. */ //@{ /** * The minimum allowed value of \f$\hat{s}\f$. */ Energy2 sHatMin() const { return max(sqr(theMHatMin), theX1Min*theX2Min*SMax()); } /** * The maximum allowed value of \f$\hat{s}\f$. */ Energy2 sHatMax() const { return min(sqr(theMHatMax), theX1Max*theX2Max*SMax()); } /** * Check if the given \f$\hat{s}\f$ is within the cuts. */ bool sHat(Energy2 sh) const { return sh > sHatMin() && sh <= sHatMax()*(1.0 + 1000.0*Constants::epsilon); } /** * The minimum allowed value of \f$\sqrt{\hat{s}}\f$. */ Energy mHatMin() const { return max(theMHatMin, sqrt(theX1Min*theX2Min*SMax())); } /** * The maximum allowed value of \f$\sqrt{\hat{s}}\f$. */ Energy mHatMax() const { return min(theMHatMax, sqrt(theX1Max*theX2Max*SMax())); } /** * The minimum value of the rapidity of the hard sub-process * (wrt. the rest system of the colliding particles). */ double yHatMin() const; /** * The maximum value of the rapidity of the hard sub-process * (wrt. the rest system of the colliding particles). */ double yHatMax() const; /** * Check if the given \f$\hat{y}\f$ is within the cuts. */ bool yHat(double y) const; /** * The minimum value of the positive light-cone fraction of the hard * sub-process. */ double x1Min() const; /** * The maximum value of the positive light-cone fraction of the hard * sub-process. */ double x1Max() const; /** * Check if the given \f$x_1\f$ is within the cuts. */ bool x1(double x) const; /** * The minimum value of the negative light-cone fraction of the hard * sub-process. */ double x2Min() const; /** * The maximum value of the negative light-cone fraction of the hard * sub-process. */ double x2Max() const; /** * Check if the given \f$x_2\f$ is within the cuts. */ bool x2(double x) const; /** * The minimum allowed value of the scale to be used in PDF's and * coupling constants. */ Energy2 scaleMin() const { return theScaleMin; } /** * The maximum allowed value of the scale to be used in PDF's and * coupling constants. */ Energy2 scaleMax() const { return theScaleMax; } /** * Check if the given scale is within the cuts. */ bool scale(Energy2 Q2) const { return Q2 > scaleMin() && Q2 < scaleMax(); } /** * Set true if a matrix element is should be using this cut and is * mirrored along the z-axis . */ bool subMirror() const { return theSubMirror; } //@} public: /** * Describe the currently active cuts in the log file. */ virtual void describe() const; protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Helper function used by the interface. */ Energy maxMHatMin() const; /** * Helper function used by the interface. */ Energy minMHatMax() const; /** * Helper function used by the interface. */ double maxYHatMin() const; /** * Helper function used by the interface. */ double minYHatMax() const; /** * Helper function used by the interface. */ double maxX1Min() const; /** * Helper function used by the interface. */ double minX1Max() const; /** * Helper function used by the interface. */ double maxX2Min() const; /** * Helper function used by the interface. */ double minX2Max() const; /** * Helper function used by the interface. */ Energy2 maxScaleMin() const; /** * Helper function used by the interface. */ Energy2 minScaleMax() const; private: /** * The maximum allowed total invariant mass squared allowed for * events to be considered. */ Energy2 theSMax; /** * The total rapidity of the colliding particles corresponding to * the maximum invariant mass squared, SMax(). */ double theY; /** * The invariant mass squared of the hard sub-process of the event * being considered. */ mutable Energy2 theCurrentSHat; /** * The total rapidity of hard sub-process (wrt. the rest system of * the colliding particles so that currentYHat() + Y() gives the * true rapidity) of the event being considered. */ mutable double theCurrentYHat; /** * The minimum allowed value of \f$\sqrt{\hat{s}}\f$. */ Energy theMHatMin; /** * The maximum allowed value of \f$\sqrt{\hat{s}}\f$. */ Energy theMHatMax; /** * The minimum value of the rapidity of the hard sub-process * (wrt. the rest system of the colliding particles). */ double theYHatMin; /** * The maximum value of the rapidity of the hard sub-process * (wrt. the rest system of the colliding particles). */ double theYHatMax; /** * The minimum value of the positive light-cone fraction of the hard * sub-process. */ double theX1Min; /** * The maximum value of the positive light-cone fraction of the hard * sub-process. */ double theX1Max; /** * The minimum value of the negative light-cone fraction of the hard * sub-process. */ double theX2Min; /** * The maximum value of the negative light-cone fraction of the hard * sub-process. */ double theX2Max; /** * The minimum allowed value of the scale to be used in PDF's and * coupling constants. */ Energy2 theScaleMin; /** * The maximum allowed value of the scale to be used in PDF's and * coupling constants. */ Energy2 theScaleMax; /** * The objects defining cuts on single outgoing partons from the * hard sub-process. */ OneCutVector theOneCuts; /** * The objects defining cuts on pairs of particles in the hard * sub-process. */ TwoCutVector theTwoCuts; /** * The objects defining cuts on sets of outgoing particles from the * hard sub-process. */ MultiCutVector theMultiCuts; /** * An optional jet finder used to define cuts on the level of * reconstructed jets. */ Ptr::ptr theJetFinder; /** * Set to true if a matrix element is should be using this cut and is * mirrored along the z-axis . */ mutable bool theSubMirror; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initCuts; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ Cuts & operator=(const Cuts &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of Cuts. */ template <> struct BaseClassTrait { /** Typedef of the first base class of Cuts. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of * the Cuts class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Cuts"; } }; /** @endcond */ } #endif /* THEPEG_Cuts_H */ thepeg-1.8.0.orig/Cuts/V2LeptonsCut.h0000644000175000017500000001330611747772425015551 0ustar sunsun// -*- C++ -*- // // V2LeptonsCut.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_V2LeptonsCut_H #define THEPEG_V2LeptonsCut_H // // This is the declaration of the V2LeptonsCut class. // #include "ThePEG/Cuts/MultiCutBase.h" namespace ThePEG { /** * This class inherits from MultiCutBase and describes cuts on the * invariant mass of two final state leptons corresponding to the * decay of a vector boson. It can be used when generating matrix * elements to avoid the long tails of the resonance. * * @see \ref V2LeptonsCutInterfaces "The interfaces" * defined for V2LeptonsCut. */ class V2LeptonsCut: public MultiCutBase { /** * Enumeration of the different families. */ enum Family { electron = 1, /**< Lepton Family. */ muon = 2, /**< Muon Family. */ tau = 4 /**< Tau Family. */ }; /** * Enumeration of charge combinations. */ enum CComb { posneg, /**< charged lepton anti-lepton pair. */ negneu, /**< negative lepton anti-neutrino pair. */ posneu, /**< positive lepton anti-neutrino pair. */ neuneu /**< neutrino anti-neutrino pair. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ V2LeptonsCut() : theMinM(70.0*GeV), theMaxM(90.0*GeV), theFamilies(electron|muon), theCComb(negneu|posneu) {} /** * The destructor. */ virtual ~V2LeptonsCut(); //@} public: /** @name Overridden virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for efficiency. */ virtual Energy2 minS(const tcPDVector & pv) const; /** * Return the maximum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for efficiency. */ virtual Energy2 maxS(const tcPDVector & pv) const; /** * Return true if a set of outgoing particles with typea \a ptype * and corresponding momenta \a p passes the cuts. */ virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype, const vector & p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; protected: /** * Check if the PDG id numbers matches this cut. */ bool checkTypes(long id1, long id2) const; /** * Check the family of the given PDG id number. */ int family(long id) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Helper function used by the interface. */ Energy maxMinM() const; /** * Helper function used by the interface. */ Energy minMaxM() const; private: /** * The minimum invariant mass. */ Energy theMinM; /** * The maximum invariant mass. */ Energy theMaxM; /** * Integer corresponding to the lepton families to match. */ int theFamilies; /** * Integer corresponding to the charge combination to match. */ int theCComb; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initV2LeptonsCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ V2LeptonsCut & operator=(const V2LeptonsCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of V2LeptonsCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of V2LeptonsCut. */ typedef MultiCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the V2LeptonsCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::V2LeptonsCut"; } /** Return the name of the shared library be loaded to get * access to the V2LeptonsCut class and every other class it uses * (except the base class). */ static string library() { return "V2LeptonsCut.so"; } }; /** @endcond */ } #endif /* THEPEG_V2LeptonsCut_H */ thepeg-1.8.0.orig/Cuts/JetFinder.h0000644000175000017500000000632611747772425015117 0ustar sunsun// -*- C++ -*- // // JetFinder.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_JetFinder_H #define THEPEG_JetFinder_H // // This is the declaration of the JetFinder class. // #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/PDT/MatcherBase.h" #include "Cuts.fh" namespace ThePEG { /** * JetFinder defines an interface to jet finders to be used when cuts * should actually be defined on the level of reconstructed jets such * as typically encountered in higher order corrections. * * @see \ref JetFinderInterfaces "The interfaces" * defined for JetFinder. */ class JetFinder: public Interfaced { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ JetFinder(); /** * The destructor. */ virtual ~JetFinder(); //@} public: /** * Perform jet clustering on the given outgoing particles. * Optionally, information on the incoming particles is provided. * Return true, if a clustering has been performed. */ virtual bool cluster(tcPDVector & ptype, vector & p, tcCutsPtr parent, tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const = 0; /** * Return the matcher for unresolved partons. */ Ptr::tptr unresolvedMatcher() const { return theUnresolvedMatcher; } /** * Set the minimum number of outgoing partons on which clustering * should be performed. */ void minOutgoing(unsigned int n) { theMinOutgoing = n; } /** * Return the minimum number of outgoing partons on which clustering * should be performed. */ unsigned int minOutgoing() const { return theMinOutgoing; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * A matcher for unresolved partons. */ Ptr::ptr theUnresolvedMatcher; /** * The minimum number of outgoing partons on which clustering * should be performed. */ unsigned int theMinOutgoing; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ JetFinder & operator=(const JetFinder &); }; } #endif /* THEPEG_JetFinder_H */ thepeg-1.8.0.orig/Cuts/KTRapidityCut.cc0000644000175000017500000001276611747772425016110 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the KTRapidityCut class. // #include "KTRapidityCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/MatcherBase.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; KTRapidityCut::~KTRapidityCut() {} void KTRapidityCut::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "KT = " << theMinKT/GeV << " .. " << theMaxKT/GeV << " GeV\n" << "Rapidity = " << theMinRapidity << " .. " << theMaxRapidity << "\n\n"; } IBPtr KTRapidityCut::clone() const { return new_ptr(*this); } IBPtr KTRapidityCut::fullclone() const { return new_ptr(*this); } void KTRapidityCut::persistentOutput(PersistentOStream & os) const { os << ounit(theMinKT, GeV) << ounit(theMaxKT, GeV) << theMinRapidity << theMaxRapidity << theMatcher; } void KTRapidityCut::persistentInput(PersistentIStream & is, int) { is >> iunit(theMinKT, GeV) >> iunit(theMaxKT, GeV) >> theMinRapidity >> theMaxRapidity >> theMatcher; } ClassDescription KTRapidityCut::initKTRapidityCut; // Definition of the static class description member. void KTRapidityCut::Init() { static ClassDocumentation documentation ("This is a very simple concrete sub-class of OneCutbase simply " "requiring a minimum transverse momentum of any outgoing particle. " "It is also possible to require a minimum and maximum rapidity. " "Optionally the restrictions only apply to particles matching a " "specific matcher object."); typedef double (ThePEG::KTRapidityCut::*IGFN)() const; typedef void (ThePEG::KTRapidityCut::*ISFN)(double); typedef Energy (ThePEG::KTRapidityCut::*IGFNK)() const; typedef void (ThePEG::KTRapidityCut::*ISFNK)(Energy); static Parameter interfaceMinKT ("MinKT", "The minimum allowed value of the transverse momentum of an outgoing " "parton.", &KTRapidityCut::theMinKT, GeV, 10.0*GeV, ZERO, Constants::MaxEnergy, true, false, Interface::limited, (ISFNK)0, (IGFNK)0, (IGFNK)0, &KTRapidityCut::maxKTMin, (IGFNK)0); interfaceMinKT.setHasDefault(false); static Parameter interfaceMaxKT ("MaxKT", "The maximum allowed value of the transverse momentum of an outgoing " "parton. Note that this cut does not increase the efficiency of the phase " "space generation, but is only applied as a post-cut.", &KTRapidityCut::theMaxKT, GeV, Constants::MaxEnergy, ZERO, ZERO, true, false, Interface::lowerlim, (ISFNK)0, (IGFNK)0, &KTRapidityCut::minKTMax, (IGFNK)0, (IGFNK)0); interfaceMaxKT.setHasDefault(false); static Parameter interfaceMinRapidity ("MinRapidity", "The minimum allowed rapidity of an outgoing parton. " "The rapidity is measured in the lab system.", &KTRapidityCut::theMinRapidity, -Constants::MaxRapidity, 0, Constants::MaxRapidity, true, false, Interface::upperlim, (ISFN)0, (IGFN)0, (IGFN)0, &KTRapidityCut::maxRapidityMin, (IGFN)0); interfaceMinRapidity.setHasDefault(false); static Parameter interfaceMaxRapidity ("MaxRapidity", "The maximum allowed rapidity of an outgoing parton. " "The rapidity is measured in the lab system.", &KTRapidityCut::theMaxRapidity, Constants::MaxRapidity, -Constants::MaxRapidity, 0, true, false, Interface::lowerlim, (ISFN)0, (IGFN)0, &KTRapidityCut::minRapidityMax, (IGFN)0, (IGFN)0); interfaceMaxRapidity.setHasDefault(false); static Reference interfaceMatcher ("Matcher", "If non-null only particles matching this object will be affected " "by the cut.", &KTRapidityCut::theMatcher, true, false, true, true, false); interfaceMinKT.rank(10); interfaceMaxKT.rank(6); interfaceMinRapidity.rank(9); interfaceMaxRapidity.rank(8); interfaceMatcher.rank(7); } Energy KTRapidityCut::maxKTMin() const { return theMaxKT; } Energy KTRapidityCut::minKTMax() const { return theMinKT; } double KTRapidityCut::maxRapidityMin() const { return theMaxRapidity; } double KTRapidityCut::minRapidityMax() const { return theMinRapidity; } double KTRapidityCut::maxRapidityMin(tcPDPtr p) const { if ( theMatcher ) if ( !theMatcher->matches(*p) ) return Constants::MaxRapidity; return theMaxRapidity; } double KTRapidityCut::minRapidityMax(tcPDPtr p) const { if ( theMatcher ) if ( !theMatcher->matches(*p) ) return -Constants::MaxRapidity; return theMinRapidity; } Energy KTRapidityCut::minKT(tcPDPtr p) const { if ( theMatcher && !theMatcher->matches(*p) ) return ZERO; return theMinKT; } double KTRapidityCut::minEta(tcPDPtr) const { return -Constants::MaxRapidity; } double KTRapidityCut::maxEta(tcPDPtr) const { return Constants::MaxRapidity; } bool KTRapidityCut::passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const { if ( theMatcher && !theMatcher->matches(*ptype) ) return true; if ( p.perp() < theMinKT ) return false; if ( p.perp() > theMaxKT ) return false; double y = p.rapidity() + parent->Y() + parent->currentYHat(); if ( y > theMaxRapidity ) return false; if ( y < theMinRapidity ) return false; return true; } thepeg-1.8.0.orig/Cuts/OneCutBase.cc0000644000175000017500000000442311747772425015367 0ustar sunsun// -*- C++ -*- // // OneCutBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the OneCutBase class. // #include "OneCutBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; OneCutBase::~OneCutBase() {} void OneCutBase::describe() const { CurrentGenerator::log() << fullName() << " has no description.\n\n"; } Energy OneCutBase::minMaxKT(tcPDPtr p) const { return minKT(p); } double OneCutBase::minMaxEta(tcPDPtr p) const { return minEta(p); } double OneCutBase::maxMinEta(tcPDPtr p) const { return maxEta(p); } bool OneCutBase::passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const { if ( p.perp() <= minKT(ptype) ) return false; double y = p.rapidity() + parent->Y() + parent->currentYHat(); if ( p.mt()*sinh(y) <= p.perp()*sinh(minEta(ptype)) ) return false; if ( p.mt()*sinh(y) >= p.perp()*sinh(maxEta(ptype)) ) return false; return true; } bool OneCutBase::passCuts(tcCutsPtr parent, tcPPtr p) const { return passCuts(parent, p->dataPtr(), p->momentum()); } Energy OneCutBase::minKT(tcPDPtr) const { return ZERO; } double OneCutBase::minEta(tcPDPtr) const { return -Constants::MaxRapidity; } double OneCutBase::maxEta(tcPDPtr) const { return Constants::MaxRapidity; } double OneCutBase::minRapidityMax(tcPDPtr) const { return -Constants::MaxRapidity; } double OneCutBase::maxRapidityMin(tcPDPtr) const { return Constants::MaxRapidity; } AbstractNoPIOClassDescription OneCutBase::initOneCutBase; // Definition of the static class description member. void OneCutBase::Init() { static ClassDocumentation documentation ("This class corresponds to a kinematical cut to be made on a single " "outgoing parton from a hard sub-process."); } thepeg-1.8.0.orig/Cuts/JetFinder.cc0000644000175000017500000000477011747772425015256 0ustar sunsun// -*- C++ -*- // // JetFinder.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the JetFinder class. // #include "JetFinder.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; JetFinder::JetFinder() : theMinOutgoing(3) {} JetFinder::~JetFinder() {} // If needed, insert default implementations of virtual function defined // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs). void JetFinder::persistentOutput(PersistentOStream & os) const { os << theUnresolvedMatcher << theMinOutgoing; } void JetFinder::persistentInput(PersistentIStream & is, int) { is >> theUnresolvedMatcher >> theMinOutgoing; } // *** Attention *** The following static variable is needed for the type // description system in ThePEG. Please check that the template arguments // are correct (the class and its base class), and that the constructor // arguments are correct (the class name and the name of the dynamically // loadable library where the class implementation can be found). DescribeAbstractClass describeJetFinder("ThePEG::JetFinder", ""); void JetFinder::Init() { static ClassDocumentation documentation ("JetFinder defines an interface to jet finders to be used when cuts " "should actually be defined on the level of reconstructed jets such " "as typically encountered in higher order corrections."); static Reference interfaceUnresolvedMatcher ("UnresolvedMatcher", "A matcher identifying unresolved partons", &JetFinder::theUnresolvedMatcher, false, false, true, false, false); static Parameter interfaceMinOutgoing ("MinOutgoing", "The minimum number of outgoing partons to be clustered.", &JetFinder::theMinOutgoing, 3, 1, 0, false, false, Interface::lowerlim); } thepeg-1.8.0.orig/Cuts/V2LeptonsCut.cc0000644000175000017500000001517311747772425015713 0ustar sunsun// -*- C++ -*- // // V2LeptonsCut.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the V2LeptonsCut class. // #include "V2LeptonsCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; V2LeptonsCut::~V2LeptonsCut() {} void V2LeptonsCut::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "M = " << theMinM/GeV << " .. " << theMaxM/GeV << " GeV\n\n"; } IBPtr V2LeptonsCut::clone() const { return new_ptr(*this); } IBPtr V2LeptonsCut::fullclone() const { return new_ptr(*this); } Energy2 V2LeptonsCut::minS(const tcPDVector & pv) const { if ( pv.size() != 2 ) return ZERO; if ( !checkTypes(pv[0]->id(), pv[1]->id()) ) return ZERO; return sqr(theMinM); } Energy2 V2LeptonsCut::maxS(const tcPDVector & pv) const { if ( pv.size() != 2 ) return Constants::MaxEnergy2; if ( !checkTypes(pv[0]->id(), pv[1]->id()) ) return Constants::MaxEnergy2; return sqr(theMaxM); } bool V2LeptonsCut::passCuts(tcCutsPtr, const tcPDVector & ptype, const vector & p) const { for ( int i = 0, N = ptype.size() - 1; i < N; ++i ) for ( int j = i + 1, M = ptype.size(); j < M; ++j ) { if ( !checkTypes(ptype[i]->id(), ptype[j]->id()) ) continue; Energy2 s = (p[i] + p[j]).m2(); if ( s <= sqr(theMinM) || s >= sqr(theMaxM) ) return false; } return true; } int V2LeptonsCut::family(long id) const { switch ( abs(id) ) { case ParticleID::eminus: case ParticleID::nu_e: return electron; case ParticleID::muminus: case ParticleID::nu_mu: return muon; case ParticleID::tauminus: case ParticleID::nu_tau: return tau; } return 0; } bool V2LeptonsCut::checkTypes(long id1, long id2) const { // Must be particle anti-particle pair; if ( id1*id2 >= 0 ) return false; // Check that we have leptons, the families are the same and matches // the chosen ones. int fam1 = family(id1); if ( !fam1 ) return false; int fam2 = family(id2); if ( fam2 != fam1 || !(theFamilies&fam1) ) return false; // Check charge combination. int ccomb; if ( (id1%2) && (id2%2) ) ccomb = posneg; else if ( id1%2 ) { if ( id1 > 0 ) ccomb = negneu; else ccomb = posneu; } else if ( id2%2 ) { if ( id2 > 0 ) ccomb = negneu; else ccomb = posneu; } else ccomb = neuneu; return (theCComb|ccomb); } void V2LeptonsCut::persistentOutput(PersistentOStream & os) const { os << ounit(theMinM, GeV) << ounit(theMaxM, GeV) << theFamilies << theCComb; } void V2LeptonsCut::persistentInput(PersistentIStream & is, int) { is >> iunit(theMinM, GeV) >> iunit(theMaxM, GeV) >> theFamilies >> theCComb; } Energy V2LeptonsCut::maxMinM() const { return theMaxM; } Energy V2LeptonsCut::minMaxM() const { return theMinM; } ClassDescription V2LeptonsCut::initV2LeptonsCut; // Definition of the static class description member. void V2LeptonsCut::Init() { static ClassDocumentation documentation ("This class inherits from MultiCutBase and describes cuts on the " "invariant mass of two final state leptons corresponding to the decay " "of a vector boson. It can be used when generating matrix elements to " "avoid the long tails of the resonance."); static Parameter interfaceMinM ("MinM", "The minimum allowed invariant mass of the matched lepton pair.", &V2LeptonsCut::theMinM, GeV, 70.0*GeV, ZERO, Constants::MaxEnergy, true, false, Interface::limited, 0, 0, 0, &V2LeptonsCut::maxMinM, 0); static Parameter interfaceMaxM ("MaxM", "The maximum allowed invariant mass of the matched lepton pair.", &V2LeptonsCut::theMaxM, GeV, 90.0*GeV, ZERO, ZERO, true, false, Interface::lowerlim, 0, 0, &V2LeptonsCut::minMaxM, 0, 0); static Switch interfaceFamilies ("Families", "The different lepton families for which this cut should apply.", &V2LeptonsCut::theFamilies, electron|muon, true, false); static SwitchOption interfaceFamiliesElectron (interfaceFamilies, "Electron", "Only apply cut to electrons and electron neutrinos.", electron); static SwitchOption interfaceFamiliesMuon (interfaceFamilies, "Muon", "Only apply cut to muons and muon neutrinos.", muon); static SwitchOption interfaceFamiliesTau (interfaceFamilies, "Tau", "Only apply cut to taus and tau neutrinos.", tau); static SwitchOption interfaceFamiliesElectronMuon (interfaceFamilies, "ElectronMuon", "Only apply cut to electron and muon leptons.", electron|muon); static SwitchOption interfaceFamiliesAll (interfaceFamilies, "All", "Apply cut to all lepton families.", electron|muon|tau); static Switch interfaceCComb ("CComb", "The charge combination of the lepton pair on which to cut.", &V2LeptonsCut::theCComb, posneu|negneu, true, false); static SwitchOption interfaceCCombAll (interfaceCComb, "All", "Cut on all relevant charge combinations.", posneg|negneu|posneu|neuneu); static SwitchOption interfaceCCombWplus (interfaceCComb, "Wplus", "Cut on positive lepton neutrin pairs.", posneu); static SwitchOption interfaceCCombWminus (interfaceCComb, "Wminus", "Cut on negative lepton anti-neutrin pairs.", negneu); static SwitchOption interfaceCCombW (interfaceCComb, "W", "Cut on charged lepton neutrino pairs.", posneu|negneu); static SwitchOption interfaceCCombGamma (interfaceCComb, "Gamma", "Cut on charged lepton anti-lepton pairs.", posneg); static SwitchOption interfaceCCombZ (interfaceCComb, "Z", "Cut on lepton anti-lepton pairs.", neuneu|posneg); static SwitchOption interfaceCCombZneutrinos (interfaceCComb, "Zneutrinos", "Cut on neutrino anti-neutrino pairs.", neuneu); interfaceMinM.rank(10); interfaceMaxM.rank(9); interfaceMinM.setHasDefault(false); interfaceMaxM.setHasDefault(false); interfaceCComb.setHasDefault(false); interfaceFamilies.setHasDefault(false); } thepeg-1.8.0.orig/Cuts/KTRapidityCut.h0000644000175000017500000001403011747772425015734 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_KTRapidityCut_H #define THEPEG_KTRapidityCut_H // // This is the declaration of the KTRapidityCut class. // #include "ThePEG/Cuts/OneCutBase.h" namespace ThePEG { /** * The KTRapidityCut class is a simple concrete sub-class of OneCutbase simply * requiring a minimum transverse momentum of any outgoing * particle. It is also possible to require a minimum and maximum * rapidity. Optionally the restrictions only apply to particles * matching a specific matcher object. * * @see \ref KTRapidityCutInterfaces "The interfaces" * defined for KTRapidityCut. * @see SimpleKtCut */ class KTRapidityCut: public OneCutBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ KTRapidityCut(Energy minKT=10*GeV) : theMinKT(minKT), theMaxKT(Constants::MaxEnergy), theMinRapidity(-Constants::MaxRapidity), theMaxRapidity(Constants::MaxRapidity) {} /** * The destructor. */ virtual ~KTRapidityCut(); //@} public: /** @name Overwritten virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed value of the transverse momentum of an * outgoing parton. */ virtual Energy minKT(tcPDPtr p) const; /** * Return the minimum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double minEta(tcPDPtr p) const; /** * Return the maximum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double maxEta(tcPDPtr p) const; /** * Return true if a particle with type \a ptype and momentum \a p * passes the cuts. The \a parent contains information about the * kinematics of the hard sub-process. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Helper function used by the interface. */ Energy maxKTMin() const; /** * Helper function used by the interface. */ Energy minKTMax() const; /** * Helper function used by the interface. */ double maxRapidityMin() const; /** * Helper function used by the interface. */ double minRapidityMax() const; /** * Return the minimum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. */ virtual double minRapidityMax(tcPDPtr p) const; /** * Return the maximum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. */ virtual double maxRapidityMin(tcPDPtr p) const; private: /** * The minimum allowed value of the transverse momentum of an * outgoing parton. */ Energy theMinKT; /** * The maximum allowed value of the transverse momentum of an * outgoing parton. */ Energy theMaxKT; /** * The minimum allowed rapidity of an outgoing parton. The * rapidity is measured in the lab system. */ double theMinRapidity; /** * The maximum allowed rapidity of an outgoing parton. The * rapidity is measured in the lab system. */ double theMaxRapidity; /** * If non-null only particles matching this object will be affected * by this cut. */ PMPtr theMatcher; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initKTRapidityCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ KTRapidityCut & operator=(const KTRapidityCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of KTRapidityCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of KTRapidityCut. */ typedef OneCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the KTRapidityCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::KTRapidityCut"; } /** * The name of a file containing the dynamic library where the class * KTRapidityCut is implemented. It may also include several, space-separated, * libraries if the class KTRapidityCut depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "KTRapidityCut.so"; } }; /** @endcond */ } #endif /* THEPEG_KTRapidityCut_H */ thepeg-1.8.0.orig/Cuts/MultiCutBase.h0000644000175000017500000000711111747772425015577 0ustar sunsun// -*- C++ -*- // // MultiCutBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MultiCutBase_H #define THEPEG_MultiCutBase_H // // This is the declaration of the MultiCutBase class. // #include "ThePEG/Interface/Interfaced.h" #include "MultiCutBase.fh" #include "Cuts.fh" namespace ThePEG { /** * This class corresponds to a kinematical cut to be made on a set of * outgoing particles from a hard sub-process. * * There are three virtual functions to be overridden by concrete * sub-classes. minS() and maxS() should return the minimum and * maximum invariant mass of of a set of particle types. In addition * the passCut() function should return true if a set of particle * with a given types and given momenta will pass the cuts. * * @see \ref MultiCutBaseInterfaces "The interfaces" * defined for MultiCutBase. */ class MultiCutBase: public Interfaced { public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return the minimum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for efficiency. */ virtual Energy2 minS(const tcPDVector & pv) const = 0; /** * Return the maximum allowed value of the squared invariant mass of * a set of outgoing partons of the given types. Typically used to * cut off the tails of the mass of a resonance for efficiency. */ virtual Energy2 maxS(const tcPDVector & pv) const = 0; /** * Return true if a set of outgoing particles with typea \a ptype * and corresponding momenta \a p passes the cuts. */ virtual bool passCuts(tcCutsPtr parent, const tcPDVector & ptype, const vector & p) const; /** * Return true if the given vector of particles passes the cuts. */ bool passCuts(tcCutsPtr parent, const tcPVector & p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initMultiCutBase; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MultiCutBase & operator=(const MultiCutBase &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MultiCutBase. */ template <> struct BaseClassTrait { /** Typedef of the first base class of MultiCutBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of * the MultiCutBase class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MultiCutBase"; } }; /** @endcond */ } #endif /* THEPEG_MultiCutBase_H */ thepeg-1.8.0.orig/Cuts/SimpleKTCut.h0000644000175000017500000001322111747772425015401 0ustar sunsun// -*- C++ -*- // // SimpleKTCut.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SimpleKTCut_H #define THEPEG_SimpleKTCut_H // // This is the declaration of the SimpleKTCut class. // #include "ThePEG/Cuts/OneCutBase.h" namespace ThePEG { /** * This is a very simple concrete sub-class of OneCutbase simply * requiring a minimum transverse momentum of any outgoing * particle. It is also possible to require a minimum and maximum * pseudorapidity. Optionally the restrictions only apply to particles * matching a specific matcher object. * * @see \ref SimpleKTCutInterfaces "The interfaces" * defined for SimpleKTCut. */ class SimpleKTCut: public OneCutBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ SimpleKTCut(Energy minKT=10*GeV) : theMinKT(minKT), theMaxKT(Constants::MaxEnergy), theMinEta(-Constants::MaxRapidity), theMaxEta(Constants::MaxRapidity) {} /** * The destructor. */ virtual ~SimpleKTCut(); //@} public: /** @name Overwritten virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed value of the transverse momentum of an * outgoing parton. */ virtual Energy minKT(tcPDPtr p) const; /** * Return the minimum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double minEta(tcPDPtr p) const; /** * Return the maximum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double maxEta(tcPDPtr p) const; /** * Return true if a particle with type \a ptype and momentum \a p * passes the cuts. The \a parent contains information about the * kinematics of the hard sub-process. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Helper function used by the interface. */ Energy maxKTMin() const; /** * Helper function used by the interface. */ Energy minKTMax() const; /** * Helper function used by the interface. */ double maxEtaMin() const; /** * Helper function used by the interface. */ double minEtaMax() const; private: /** * The minimum allowed value of the transverse momentum of an * outgoing parton. */ Energy theMinKT; /** * The maximum allowed value of the transverse momentum of an * outgoing parton. */ Energy theMaxKT; /** * The minimum allowed pseudo-rapidity of an outgoing parton. The * pseudo-rapidity is measured in the lab system. */ double theMinEta; /** * The maximum allowed pseudo-rapidity of an outgoing parton. The * pseudo-rapidity is measured in the lab system. */ double theMaxEta; /** * If non-null only particles matching this object will be affected * by this cut. */ PMPtr theMatcher; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initSimpleKTCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SimpleKTCut & operator=(const SimpleKTCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of SimpleKTCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of SimpleKTCut. */ typedef OneCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the SimpleKTCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SimpleKTCut"; } /** Return the name of the shared library be loaded to get * access to the SimpleKTCut class and every other class it uses * (except the base class). */ static string library() { return "SimpleKTCut.so"; } }; /** @endcond */ } #endif /* THEPEG_SimpleKTCut_H */ thepeg-1.8.0.orig/Cuts/TwoCutBase.cc0000644000175000017500000000447611747772425015427 0ustar sunsun// -*- C++ -*- // // TwoCutBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the TwoCutBase class. // #include "TwoCutBase.h" #include "Cuts.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; TwoCutBase::~TwoCutBase() {} void TwoCutBase::describe() const { CurrentGenerator::log() << fullName() << " has no description.\n\n"; } bool TwoCutBase::passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci, bool incj) const { if ( inci && incj ) return true; else if ( inci ) { if ( -(pj - pi).m2() <= minTij(pitype, pjtype) ) return false; if ( pj.perp() <= minKTClus(tcPDPtr(), pjtype) ) return false; } else if ( incj ) { if ( -(pi - pj).m2() <= minTij(pjtype, pitype) ) return false; if ( pi.perp() <= minKTClus(tcPDPtr(), pitype) ) return false; } else { if ( (pi + pj).m2() <= minSij(pitype, pjtype) ) return false; double deta2 = sqr(pi.eta() - pj.eta()); double dphi = abs(pi.phi() - pj.phi()); if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi; double dr = sqrt(deta2 + sqr(dphi)); if ( dr < minDeltaR(pitype, pjtype) ) return false; if ( min(pi.perp(), pj.perp())*dr <= minKTClus(pitype, pjtype) ) return false; if ( 2.0*sqr(min(pi.e(), pj.e()))*(1.0 - cos(pi.angle(pj))) < parent->currentSHat()*minDurham(pitype, pjtype) ) return false; } return true; } bool TwoCutBase::passCuts(tcCutsPtr parent, tcPPtr pi, tcPPtr pj, bool inci, bool incj) const { return passCuts(parent, pi->dataPtr(), pj->dataPtr(), pi->momentum(), pj->momentum(), inci, incj); } AbstractNoPIOClassDescription TwoCutBase::initTwoCutBase; // Definition of the static class description member. void TwoCutBase::Init() { static ClassDocumentation documentation ("This class corresponds to a kinematical cut to be made on a pair of " "particles in a hard sub-process."); } thepeg-1.8.0.orig/Cuts/MultiCutBase.cc0000644000175000017500000000416411747772425015742 0ustar sunsun// -*- C++ -*- // // MultiCutBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MultiCutBase class. // #include "MultiCutBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; void MultiCutBase::describe() const { CurrentGenerator::log() << fullName() << " has no description.\n\n"; } Energy2 MultiCutBase::minS(const tcPDVector &) const { return ZERO; } Energy2 MultiCutBase::maxS(const tcPDVector &) const { return Constants::MaxEnergy2; } bool MultiCutBase::passCuts(tcCutsPtr, const tcPDVector & ptype, const vector & p) const { long NN = (1 << ptype.size()); // NN is the number of different combinations that can be made. for ( long ii = 1; ii < NN; ++ii ) { long mask = ii; tcPDVector pt; LorentzMomentum sum; int i = -1; while ( mask ) { ++i; int sel = mask%2; mask /= 2; if ( !sel ) continue; pt.push_back(ptype[i]); sum += p[i]; } if ( pt.size() < 2 ) continue; if ( sum.m2() < minS(pt) ) return false; if ( sum.m2() >= maxS(pt) ) return false; } return true; } bool MultiCutBase::passCuts(tcCutsPtr parent, const tcPVector & p) const { tcPDVector ptype(p.size()); vector mom(p.size()); for ( int i = 0, N = p.size(); i < N; ++i ) { ptype[i] = p[i]->dataPtr(); mom[i] = p[i]->momentum(); } return passCuts(parent, ptype, mom); } AbstractNoPIOClassDescription MultiCutBase::initMultiCutBase; // Definition of the static class description member. void MultiCutBase::Init() { static ClassDocumentation documentation ("This class corresponds to a kinematical cut to be made on a set of " "outgoing particles from a hard sub-process."); } thepeg-1.8.0.orig/Cuts/TwoCutBase.fh0000644000175000017500000000042111747772425015421 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the TwoCutBase class. // #ifndef ThePEG_TwoCutBase_FH #define ThePEG_TwoCutBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class TwoCutBase; ThePEG_DECLARE_POINTERS(TwoCutBase,TwoCutPtr); } #endif thepeg-1.8.0.orig/Cuts/DeltaMeasureCuts.h0000644000175000017500000001374211747772425016457 0ustar sunsun// -*- C++ -*- // // DeltaMeasureCuts.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_DeltaMeasureCuts_H #define THEPEG_DeltaMeasureCuts_H // // This is the declaration of the DeltaMeasureCuts class. // #include "ThePEG/Cuts/TwoCutBase.h" #include "ThePEG/PDT/MatcherBase.h" namespace ThePEG { /** * This class implements a cuts on legoplot and rapidity separation * * @see \ref DeltaMeasureCutsInterfaces "The interfaces" * defined for DeltaMeasureCuts. */ class DeltaMeasureCuts: public TwoCutBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ DeltaMeasureCuts() : theMinDeltaR(0.0), theMinDeltaEta(0.0) {} //@} public: /** @name Overridden virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. */ virtual Energy minDeltaMeasureCuts(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. Returns ZERO. */ virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. Returns zero. */ virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. Returns zero. */ virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. Returns zero. */ virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. Returns zero. */ virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const; /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci = false, bool incj = false) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The minimum allowed legoplot separation */ double theMinDeltaR; /** * The minimum allowed rapidity separation */ double theMinDeltaEta; /** * If non-null only particles matching this object will be affected * by this cut. */ PMPtr theMatcher; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initDeltaMeasureCuts; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DeltaMeasureCuts & operator=(const DeltaMeasureCuts &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DeltaMeasureCuts. */ template <> struct BaseClassTrait { /** Typedef of the first base class of DeltaMeasureCuts. */ typedef TwoCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the DeltaMeasureCuts class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::DeltaMeasureCuts"; } /** Return the name of the shared library be loaded to get * access to the DeltaMeasureCuts class and every other class it uses * (except the base class). */ static string library() { return "DeltaMeasureCuts.so"; } }; /** @endcond */ } #endif /* THEPEG_DeltaMeasureCuts_H */ thepeg-1.8.0.orig/Cuts/OneCutBase.h0000644000175000017500000001245511747772425015235 0ustar sunsun// -*- C++ -*- // // OneCutBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_OneCutBase_H #define THEPEG_OneCutBase_H // // This is the declaration of the OneCutBase class. // #include "ThePEG/Interface/Interfaced.h" #include "OneCutBase.fh" #include "Cuts.fh" namespace ThePEG { /** * This class corresponds to a kinematical cut to be made on a single * outgoing parton from a hard sub-process. * * There are four main virtual functions which must be overridden by * concrete sub-classes. minKT() should return the minimum allowed * transverse momentum of a given type, while minEta() and maxEta() * should return the minimum and maximum allowed pseudo-rapidity for a * particle of a given type as measured in the lab-system. Note that * when applied in the rest frame of a hard sub-process, the * transformation from the lab frame is assumed to be a simple boost * along the z-axis. In addition the passCut() function should return * true if a particle with a given type and given momentum will pass * the cuts. * * @see \ref OneCutBaseInterfaces "The interfaces" * defined for OneCutBase. */ class OneCutBase: public Interfaced { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ OneCutBase() {} /** * The destructor. */ virtual ~OneCutBase(); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return the minimum allowed value of the transverse momentum of an * outgoing parton. */ virtual Energy minKT(tcPDPtr p) const = 0; /** * Return the minimum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double minEta(tcPDPtr p) const = 0; /** * Return the maximum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double maxEta(tcPDPtr p) const = 0; /** * Return the minimum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. */ virtual double minRapidityMax(tcPDPtr p) const; /** * Return the maximum allowed rapidity of an outgoing parton * of the given type. The rapidity is measured in the lab * system. */ virtual double maxRapidityMin(tcPDPtr p) const; /** * Return the minimum allowed value of the transverse momentum of * the outgoing parton with the lagrest transverse momentum. This * version simply returns minKt(). */ virtual Energy minMaxKT(tcPDPtr p) const; /** * Return the minimum allowed pseudo-rapidity of the outgoing parton * of the given type with the maximum pseudo-rapidity. The * pseudo-rapidity is measured in the lab system. This version * simply returns minEta(). */ virtual double minMaxEta(tcPDPtr p) const; /** * Return the maximum allowed pseudo-rapidity of the outgoing parton * of the given type with the minimum pseudo-rapidity.. The * pseudo-rapidity is measured in the lab system. This version * simply returns maxEta(). */ virtual double maxMinEta(tcPDPtr p) const; /** * Return true if a particle with type \a ptype and momentum \a p * passes the cuts. The \a parent contains information about the * kinematics of the hard sub-process. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const; /** * Return true if the given particle passes the cuts. The \a parent * contains information about the kinematics of the hard * sub-process. */ bool passCuts(tcCutsPtr parent, tcPPtr p) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static AbstractNoPIOClassDescription initOneCutBase; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ OneCutBase & operator=(const OneCutBase &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of OneCutBase. */ template <> struct BaseClassTrait { /** Typedef of the first base class of OneCutBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of * the OneCutBase class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::OneCutBase"; } }; /** @endcond */ } #endif /* THEPEG_OneCutBase_H */ thepeg-1.8.0.orig/Cuts/MultiCutBase.fh0000644000175000017500000000043511747772425015747 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the MultiCutBase class. // #ifndef ThePEG_MultiCutBase_FH #define ThePEG_MultiCutBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class MultiCutBase; ThePEG_DECLARE_POINTERS(MultiCutBase,MultiCutPtr); } #endif thepeg-1.8.0.orig/Cuts/Makefile.in0000644000175000017500000006602511756366733015144 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Cuts ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) DeltaMeasureCuts_la_LIBADD = am_DeltaMeasureCuts_la_OBJECTS = DeltaMeasureCuts.lo DeltaMeasureCuts_la_OBJECTS = $(am_DeltaMeasureCuts_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DeltaMeasureCuts_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(DeltaMeasureCuts_la_LDFLAGS) \ $(LDFLAGS) -o $@ KTClus_la_LIBADD = am_KTClus_la_OBJECTS = KTClus.lo KTClus_la_OBJECTS = $(am_KTClus_la_OBJECTS) KTClus_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(KTClus_la_LDFLAGS) $(LDFLAGS) -o $@ KTRapidityCut_la_LIBADD = am_KTRapidityCut_la_OBJECTS = KTRapidityCut.lo KTRapidityCut_la_OBJECTS = $(am_KTRapidityCut_la_OBJECTS) KTRapidityCut_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(KTRapidityCut_la_LDFLAGS) \ $(LDFLAGS) -o $@ NLOKTJetFinder_la_LIBADD = am_NLOKTJetFinder_la_OBJECTS = NLOKTJetFinder.lo NLOKTJetFinder_la_OBJECTS = $(am_NLOKTJetFinder_la_OBJECTS) NLOKTJetFinder_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(NLOKTJetFinder_la_LDFLAGS) \ $(LDFLAGS) -o $@ SimpleDISCut_la_LIBADD = am_SimpleDISCut_la_OBJECTS = SimpleDISCut.lo SimpleDISCut_la_OBJECTS = $(am_SimpleDISCut_la_OBJECTS) SimpleDISCut_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(SimpleDISCut_la_LDFLAGS) \ $(LDFLAGS) -o $@ SimpleKTCut_la_LIBADD = am_SimpleKTCut_la_OBJECTS = SimpleKTCut.lo SimpleKTCut_la_OBJECTS = $(am_SimpleKTCut_la_OBJECTS) SimpleKTCut_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(SimpleKTCut_la_LDFLAGS) \ $(LDFLAGS) -o $@ V2LeptonsCut_la_LIBADD = am_V2LeptonsCut_la_OBJECTS = V2LeptonsCut.lo V2LeptonsCut_la_OBJECTS = $(am_V2LeptonsCut_la_OBJECTS) V2LeptonsCut_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(V2LeptonsCut_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGCuts_la_LIBADD = am__objects_1 = Cuts.lo OneCutBase.lo TwoCutBase.lo MultiCutBase.lo \ JetFinder.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGCuts_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGCuts_la_OBJECTS = $(am_libThePEGCuts_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(DeltaMeasureCuts_la_SOURCES) $(KTClus_la_SOURCES) \ $(KTRapidityCut_la_SOURCES) $(NLOKTJetFinder_la_SOURCES) \ $(SimpleDISCut_la_SOURCES) $(SimpleKTCut_la_SOURCES) \ $(V2LeptonsCut_la_SOURCES) $(libThePEGCuts_la_SOURCES) DIST_SOURCES = $(DeltaMeasureCuts_la_SOURCES) $(KTClus_la_SOURCES) \ $(KTRapidityCut_la_SOURCES) $(NLOKTJetFinder_la_SOURCES) \ $(SimpleDISCut_la_SOURCES) $(SimpleKTCut_la_SOURCES) \ $(V2LeptonsCut_la_SOURCES) $(libThePEGCuts_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = Cuts.cc OneCutBase.cc TwoCutBase.cc MultiCutBase.cc JetFinder.cc DOCFILES = Cuts.h OneCutBase.h TwoCutBase.h MultiCutBase.h JetFinder.h INCLUDEFILES = $(DOCFILES) Cuts.fh OneCutBase.fh \ TwoCutBase.fh MultiCutBase.fh noinst_LTLIBRARIES = libThePEGCuts.la # pkglib_LTLIBRARIES = JetKTClusCuts.la libThePEGCuts_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) pkglib_LTLIBRARIES = SimpleKTCut.la KTClus.la V2LeptonsCut.la SimpleDISCut.la \ KTRapidityCut.la NLOKTJetFinder.la \ DeltaMeasureCuts.la SimpleKTCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleKTCut_la_SOURCES = SimpleKTCut.cc SimpleKTCut.h KTRapidityCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) KTRapidityCut_la_SOURCES = KTRapidityCut.cc KTRapidityCut.h KTClus_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) KTClus_la_SOURCES = KTClus.cc KTClus.h V2LeptonsCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) V2LeptonsCut_la_SOURCES = V2LeptonsCut.cc V2LeptonsCut.h SimpleDISCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleDISCut_la_SOURCES = SimpleDISCut.cc SimpleDISCut.h NLOKTJetFinder_la_LDFLAGS = -module $(LIBTOOLVERSIONINFO) NLOKTJetFinder_la_SOURCES = NLOKTJetFinder.cc NLOKTJetFinder.h DeltaMeasureCuts_la_LDFLAGS = -module $(LIBTOOLVERSIONINFO) DeltaMeasureCuts_la_SOURCES = DeltaMeasureCuts.cc DeltaMeasureCuts.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Cuts/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Cuts/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } DeltaMeasureCuts.la: $(DeltaMeasureCuts_la_OBJECTS) $(DeltaMeasureCuts_la_DEPENDENCIES) $(EXTRA_DeltaMeasureCuts_la_DEPENDENCIES) $(AM_V_CXXLD)$(DeltaMeasureCuts_la_LINK) -rpath $(pkglibdir) $(DeltaMeasureCuts_la_OBJECTS) $(DeltaMeasureCuts_la_LIBADD) $(LIBS) KTClus.la: $(KTClus_la_OBJECTS) $(KTClus_la_DEPENDENCIES) $(EXTRA_KTClus_la_DEPENDENCIES) $(AM_V_CXXLD)$(KTClus_la_LINK) -rpath $(pkglibdir) $(KTClus_la_OBJECTS) $(KTClus_la_LIBADD) $(LIBS) KTRapidityCut.la: $(KTRapidityCut_la_OBJECTS) $(KTRapidityCut_la_DEPENDENCIES) $(EXTRA_KTRapidityCut_la_DEPENDENCIES) $(AM_V_CXXLD)$(KTRapidityCut_la_LINK) -rpath $(pkglibdir) $(KTRapidityCut_la_OBJECTS) $(KTRapidityCut_la_LIBADD) $(LIBS) NLOKTJetFinder.la: $(NLOKTJetFinder_la_OBJECTS) $(NLOKTJetFinder_la_DEPENDENCIES) $(EXTRA_NLOKTJetFinder_la_DEPENDENCIES) $(AM_V_CXXLD)$(NLOKTJetFinder_la_LINK) -rpath $(pkglibdir) $(NLOKTJetFinder_la_OBJECTS) $(NLOKTJetFinder_la_LIBADD) $(LIBS) SimpleDISCut.la: $(SimpleDISCut_la_OBJECTS) $(SimpleDISCut_la_DEPENDENCIES) $(EXTRA_SimpleDISCut_la_DEPENDENCIES) $(AM_V_CXXLD)$(SimpleDISCut_la_LINK) -rpath $(pkglibdir) $(SimpleDISCut_la_OBJECTS) $(SimpleDISCut_la_LIBADD) $(LIBS) SimpleKTCut.la: $(SimpleKTCut_la_OBJECTS) $(SimpleKTCut_la_DEPENDENCIES) $(EXTRA_SimpleKTCut_la_DEPENDENCIES) $(AM_V_CXXLD)$(SimpleKTCut_la_LINK) -rpath $(pkglibdir) $(SimpleKTCut_la_OBJECTS) $(SimpleKTCut_la_LIBADD) $(LIBS) V2LeptonsCut.la: $(V2LeptonsCut_la_OBJECTS) $(V2LeptonsCut_la_DEPENDENCIES) $(EXTRA_V2LeptonsCut_la_DEPENDENCIES) $(AM_V_CXXLD)$(V2LeptonsCut_la_LINK) -rpath $(pkglibdir) $(V2LeptonsCut_la_OBJECTS) $(V2LeptonsCut_la_LIBADD) $(LIBS) libThePEGCuts.la: $(libThePEGCuts_la_OBJECTS) $(libThePEGCuts_la_DEPENDENCIES) $(EXTRA_libThePEGCuts_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGCuts_la_OBJECTS) $(libThePEGCuts_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Cuts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DeltaMeasureCuts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/JetFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KTClus.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/KTRapidityCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiCutBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/NLOKTJetFinder.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OneCutBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleDISCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleKTCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TwoCutBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/V2LeptonsCut.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Cuts/OneCutBase.fh0000644000175000017500000000042111747772425015371 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the OneCutBase class. // #ifndef ThePEG_OneCutBase_FH #define ThePEG_OneCutBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class OneCutBase; ThePEG_DECLARE_POINTERS(OneCutBase,OneCutPtr); } #endif thepeg-1.8.0.orig/Cuts/NLOKTJetFinder.cc0000644000175000017500000002310411747772425016056 0ustar sunsun// -*- C++ -*- // // NLOKTJetFinder.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the NLOKTJetFinder class. // #include "NLOKTJetFinder.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; NLOKTJetFinder::NLOKTJetFinder() : theDCut(ZERO), theConeRadius(0.7), theVariant(kt), theMode(inclusive), theMeasure(pt), theRecombination(recoDefault), theRemoveOutOfRange(false) {} NLOKTJetFinder::~NLOKTJetFinder() {} IBPtr NLOKTJetFinder::clone() const { return new_ptr(*this); } IBPtr NLOKTJetFinder::fullclone() const { return new_ptr(*this); } bool NLOKTJetFinder::cluster(tcPDVector & ptype, vector & p, tcCutsPtr parent, tcPDPtr t1, tcPDPtr t2) const { if ( ptype.size() < minOutgoing() ) return true; bool is = unresolvedMatcher()->check(*t1) || unresolvedMatcher()->check(*t2); double dmin = Constants::MaxDouble; tcPDVector::iterator di = ptype.begin(); tcPDVector::iterator dj; tcPDVector::iterator diMin, djMin; vector::iterator pi = p.begin(); vector::iterator pj; vector::iterator piMin, pjMin; double r2 = theMode == inclusive ? sqr(theConeRadius) : 1.0; double dcut = 0.0; if ( theVariant != antikt ) { dcut = theDCut/GeV2; } else { dcut = GeV2/theDCut; } for ( ; di != ptype.end(); ++di, ++pi ) { if ( !unresolvedMatcher()->check(**di) ) continue; dj = di; ++dj; pj = pi; ++pj; for ( ; dj != ptype.end(); ++dj, ++pj ) { if ( !unresolvedMatcher()->check(**dj) ) continue; double d = Constants::MaxDouble; if ( theMeasure == pt ) { double deta2 = sqr(pi->eta() - pj->eta()); double dphi = abs(pi->phi() - pj->phi()); if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi; double dr2 = deta2 + sqr(dphi); if ( theVariant == kt ) { d = min(pi->perp2()/GeV2,pj->perp2()/GeV2)*dr2/r2; } else if ( theVariant == ca ) { d = dr2/r2; } else if ( theVariant == antikt ) { d = min(GeV2/pi->perp2(),GeV2/pj->perp2())*dr2/r2; } } else if ( theMeasure == e ) { double dct = 2.*(1.-pi->vect().cosTheta(pj->vect())); if ( theVariant == kt ) { d = min(sqr(pi->t())/GeV2,sqr(pj->t())/GeV2)*dct/r2; } else if ( theVariant == ca ) { d = dct/r2; } else if ( theVariant == antikt ) { d = min(GeV2/sqr(pi->t()),GeV2/sqr(pj->t()))*dct/r2; } } if ( d < dmin ) { dmin = d; diMin = di; djMin = dj; piMin = pi; pjMin = pj; } } if ( is ) { double d = Constants::MaxDouble; if ( theMeasure == pt ) { if ( theVariant == kt ) { d = pi->perp2()/GeV2; } else if ( theVariant == ca ) { d = 1.0; } else if ( theVariant == antikt ) { d = GeV2/pi->perp2(); } } else if ( theMeasure == e ) { if ( theVariant == kt ) { d = sqr(pi->t())/GeV2; } else if ( theVariant == ca ) { d = 1.0; } else if ( theVariant == antikt ) { d = GeV2/sqr(pi->t()); } } if ( d < dmin ) { dmin = d; diMin = di; djMin = ptype.end(); piMin = pi; pjMin = p.end(); } } } if ( djMin != ptype.end() ) { if ( ( theMode == exclusive && dmin < dcut ) || theMode == inclusive ) { *piMin = recombine(*piMin,*pjMin); ptype.erase(djMin); p.erase(pjMin); return true; } } else { if ( theMode == exclusive && dmin < dcut ) { ptype.erase(diMin); p.erase(piMin); return true; } } if ( theRemoveOutOfRange ) { tcPDVector::iterator dx = ptype.begin(); vector::iterator px = p.begin(); for ( ; dx != ptype.end(); ++dx, ++px ) { if ( !unresolvedMatcher()->check(**dx) ) continue; if ( px->perp() < parent->minKT(*dx) ) { ptype.erase(dx); p.erase(px); return true; } if ( abs(px->rapidity() + parent->Y() + parent->currentYHat()) < parent->minRapidityMax(*dx) ) { ptype.erase(dx); p.erase(px); return true; } if ( abs(px->rapidity() + parent->Y() + parent->currentYHat()) > parent->maxRapidityMin(*dx) ) { ptype.erase(dx); p.erase(px); return true; } } } return false; } LorentzMomentum NLOKTJetFinder::recombine(const LorentzMomentum& pi, const LorentzMomentum& pj) const { if ( ( theRecombination == recoDefault && theMeasure == e ) || theRecombination == recoE ) { return pi + pj; } Energy ptij = pi.perp() + pj.perp(); double phiij = (pi.perp()*pi.phi()+pj.perp()*pj.phi())/ptij; double yij = (pi.perp()*pi.rapidity()+pj.perp()*pj.rapidity())/ptij; return LorentzMomentum(ptij*cos(phiij),ptij*sin(phiij),ptij*sinh(yij),ptij*cosh(yij)); } // If needed, insert default implementations of virtual function defined // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs). void NLOKTJetFinder::persistentOutput(PersistentOStream & os) const { os << ounit(theDCut,GeV2) << theConeRadius << theVariant << theMode << theMeasure << theRemoveOutOfRange << theRecombination; } void NLOKTJetFinder::persistentInput(PersistentIStream & is, int) { is >> iunit(theDCut,GeV2) >> theConeRadius >> theVariant >> theMode >> theMeasure >> theRemoveOutOfRange >> theRecombination; } // *** Attention *** The following static variable is needed for the type // description system in ThePEG. Please check that the template arguments // are correct (the class and its base class), and that the constructor // arguments are correct (the class name and the name of the dynamically // loadable library where the class implementation can be found). DescribeClass describeNLOKTJetFinder("ThePEG::NLOKTJetFinder", "NLOKTJetFinder.so"); void NLOKTJetFinder::Init() { static ClassDocumentation documentation ("NLOKTJetFinder implements the class of longitudinally invariant kt " "jet clustering algorithms, as relevant for cuts on the real " "emission contribution to a NLO calculation. Recombination is " "exclusively performed using the pt scheme."); static Parameter interfaceDCut ("DCut", "The distance cut, when acting exclusively. " "The inverse is taken for the anti-kt algorithm, " "while for the Cambridge/Aachen variant dCut/GeV2 is used.", &NLOKTJetFinder::theDCut, GeV2, 0.0*GeV2, 0.0*GeV2, 0*GeV2, false, false, Interface::lowerlim); static Parameter interfaceConeRadius ("ConeRadius", "The cone radius R used in inclusive mode.", &NLOKTJetFinder::theConeRadius, 0.7, 0.0, 1.0, false, false, Interface::limited); static Switch interfaceVariant ("Variant", "The variant to use.", &NLOKTJetFinder::theVariant, kt, false, false); static SwitchOption interfaceVariantKt (interfaceVariant, "Kt", "Kt algorithm.", kt); static SwitchOption interfaceVariantCA (interfaceVariant, "CA", "Cambridge/Aachen algorithm.", ca); static SwitchOption interfaceVariantAntiKt (interfaceVariant, "AntiKt", "Anti kt algorithm.", antikt); static Switch interfaceMode ("Mode", "The mode to use.", &NLOKTJetFinder::theMode, inclusive, false, false); static SwitchOption interfaceModeInclusive (interfaceMode, "Inclusive", "Find inclusive jets.", inclusive); static SwitchOption interfaceModeExclusive (interfaceMode, "Exclusive", "Find exclusive jets.", exclusive); static Switch interfaceMeasure ("Measure", "The measure and recombination scheme to use.", &NLOKTJetFinder::theMeasure, pt, false, false); static SwitchOption interfaceMeasurePt (interfaceMeasure, "Pt", "Use the pt variant.", pt); static SwitchOption interfaceMeasureE (interfaceMeasure, "E", "Use the Durham variant.", e); static Switch interfaceRecombination ("RecombinationScheme", "The recombination scheme to use.", &NLOKTJetFinder::theRecombination, recoDefault, false, false); static SwitchOption interfaceRecombinationdefault (interfaceRecombination, "Default", "Use the scheme according to the defined measure", recoDefault); static SwitchOption interfaceRecombinationPt (interfaceRecombination, "Pt", "Add transverse momenta", recoPt); static SwitchOption interfaceRecombinationE (interfaceRecombination, "E", "Add the four-momenta", recoE); static Switch interfaceRemoveOutOfRange ("RemoveOutOfRange", "Set to true to remove partons from cuts which are out of" "rapidity or pT range and not consider them as jets", &NLOKTJetFinder::theRemoveOutOfRange, false, false, false); static SwitchOption interfaceRemoveOutOfRangeTrue (interfaceRemoveOutOfRange, "True", "Remove", true); static SwitchOption interfaceRemoveOutOfRangeFalse (interfaceRemoveOutOfRange, "False", "Keep", false); } thepeg-1.8.0.orig/Cuts/NLOKTJetFinder.h0000644000175000017500000001015211747772425015717 0ustar sunsun// -*- C++ -*- // // NLOKTJetFinder.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_NLOKTJetFinder_H #define THEPEG_NLOKTJetFinder_H // // This is the declaration of the NLOKTJetFinder class. // #include "ThePEG/Cuts/JetFinder.h" namespace ThePEG { /** * NLOKTJetFinder implements the class of longitudinally invariant kt * jet clustering algorithms, as relevant for cuts on the real * emission contribution to a NLO calculation. Recombination is * exclusively performed using the pt scheme. * * @see \ref NLOKTJetFinderInterfaces "The interfaces" * defined for NLOKTJetFinder. */ class NLOKTJetFinder: public JetFinder { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ NLOKTJetFinder(); /** * The destructor. */ virtual ~NLOKTJetFinder(); //@} public: /** * Perform jet clustering on the given outgoing particles. * Optionally, information on the incoming particles is provided. * Return true, if a clustering has been performed. */ virtual bool cluster(tcPDVector & ptype, vector & p, tcCutsPtr parent, tcPDPtr t1 = tcPDPtr(), tcPDPtr t2 = tcPDPtr()) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * Perform pt scheme recombination. */ LorentzMomentum recombine(const LorentzMomentum& pi, const LorentzMomentum& pj) const; private: /** * The resolution cut. Ignored, if algorithm is to act inclusively. */ Energy2 theDCut; /** * The `cone radius' R. Ignored (R=1), if algorithm is to act * exclusively. */ double theConeRadius; /** * The possible variants. */ enum variants { kt = 1, ca = 2, antikt = 3 }; /** * The variant. */ int theVariant; /** * The possible modes. */ enum modes { inclusive = 1, exclusive = 2 }; /** * The mode. */ int theMode; /** * The possible measures. Also triggers the choice of recombination * scheme by default. */ enum measures { pt = 1, e = 2 }; /** * The measure */ int theMeasure; /** * The possible recombination schemes. */ enum recombinations { recoDefault = 1, recoPt = 2, recoE = 3 }; /** * The recombination scheme */ int theRecombination; /** * Choose to not consider partons as jets which are out of in terms * or rapidity or transverse momentum */ bool theRemoveOutOfRange; private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ NLOKTJetFinder & operator=(const NLOKTJetFinder &); }; } #endif /* THEPEG_NLOKTJetFinder_H */ thepeg-1.8.0.orig/Cuts/Makefile.am0000644000175000017500000000267311747772425015131 0ustar sunsunmySOURCES = Cuts.cc OneCutBase.cc TwoCutBase.cc MultiCutBase.cc JetFinder.cc DOCFILES = Cuts.h OneCutBase.h TwoCutBase.h MultiCutBase.h JetFinder.h INCLUDEFILES = $(DOCFILES) Cuts.fh OneCutBase.fh \ TwoCutBase.fh MultiCutBase.fh noinst_LTLIBRARIES = libThePEGCuts.la # pkglib_LTLIBRARIES = JetKTClusCuts.la libThePEGCuts_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) pkglib_LTLIBRARIES = SimpleKTCut.la KTClus.la V2LeptonsCut.la SimpleDISCut.la \ KTRapidityCut.la NLOKTJetFinder.la \ DeltaMeasureCuts.la SimpleKTCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleKTCut_la_SOURCES = SimpleKTCut.cc SimpleKTCut.h KTRapidityCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) KTRapidityCut_la_SOURCES = KTRapidityCut.cc KTRapidityCut.h KTClus_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) KTClus_la_SOURCES = KTClus.cc KTClus.h V2LeptonsCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) V2LeptonsCut_la_SOURCES = V2LeptonsCut.cc V2LeptonsCut.h SimpleDISCut_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleDISCut_la_SOURCES = SimpleDISCut.cc SimpleDISCut.h NLOKTJetFinder_la_LDFLAGS = -module $(LIBTOOLVERSIONINFO) NLOKTJetFinder_la_SOURCES = NLOKTJetFinder.cc NLOKTJetFinder.h DeltaMeasureCuts_la_LDFLAGS = -module $(LIBTOOLVERSIONINFO) DeltaMeasureCuts_la_SOURCES = DeltaMeasureCuts.cc DeltaMeasureCuts.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Cuts/Cuts.cc0000644000175000017500000004452311747772425014322 0ustar sunsun// -*- C++ -*- // // Cuts.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Cuts class. // #include "Cuts.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/EventRecord/TmpTransform.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Config/algorithm.h" using namespace ThePEG; Cuts::Cuts(Energy MhatMin) : theSMax(ZERO), theY(0), theCurrentSHat(-1.0*GeV2), theCurrentYHat(0), theMHatMin(MhatMin), theMHatMax(Constants::MaxEnergy), theYHatMin(-Constants::MaxRapidity), theYHatMax(Constants::MaxRapidity), theX1Min(0.0), theX1Max(1.0), theX2Min(0.0), theX2Max(1.0), theScaleMin(ZERO), theScaleMax(Constants::MaxEnergy2), theSubMirror(false) {} Cuts::~Cuts() {} IBPtr Cuts::clone() const { return new_ptr(*this); } IBPtr Cuts::fullclone() const { return new_ptr(*this); } void Cuts::doinitrun() { Interfaced::doinitrun(); if ( Debug::level ) { describe(); for_each(theOneCuts, mem_fun(&OneCutBase::describe)); for_each(theTwoCuts, mem_fun(&TwoCutBase::describe)); for_each(theMultiCuts, mem_fun(&MultiCutBase::describe)); } } void Cuts::describe() const { CurrentGenerator::log() << fullName() << ":\n" << "MHat = " << theMHatMin/GeV << " .. " << theMHatMax/GeV << " GeV\n" << "Scale = " << theScaleMin/GeV2 << " .. " << theScaleMax/GeV2 << " GeV2\n" << "YHat = " << theYHatMin << " .. " << theYHatMax << '\n' << "X1 = " << theX1Min << " .. " << theX1Max << '\n' << "X2 = " << theX2Min << " .. " << theX2Max << "\n\n"; } void Cuts::initialize(Energy2 smax, double Y) { theSMax = smax; theMHatMax = min(theMHatMax, sqrt(smax)); theY = Y; theSubMirror = false; } void Cuts::initEvent() { theCurrentSHat = -1.0*GeV2; theCurrentYHat = 0.0; theSubMirror = false; } bool Cuts::initSubProcess(Energy2 shat, double yhat, bool mirror) const { theSubMirror = mirror; theCurrentSHat = shat; theCurrentYHat = yhat; if ( shat <= sHatMin() || shat > sHatMax()*(1.0 + 1000.0*Constants::epsilon) ) return false; if ( yhat <= yHatMin() || yhat >= yHatMax() ) return false; double x1 = min(1.0, sqrt(shat/SMax())*exp(yhat)); if ( x1 <= x1Min() || x1 > x1Max() ) return false; double x2 = min(1.0, sqrt(shat/SMax())*exp(-yhat)); if ( x2 <= x2Min() || x2 > x2Max() ) return false; return true; } bool Cuts::passCuts(const tcPDVector & ptype, const vector & p, tcPDPtr t1, tcPDPtr t2) const { if ( subMirror() ) { vector pmir = p; for ( int i = 0, N = pmir.size(); i < N; ++i ) pmir[i].setZ(-pmir[i].z()); swap(t1,t2); HoldFlag<> nomir(theSubMirror, false); return passCuts(ptype, pmir, t1, t2); } if ( jetFinder() ) if ( ptype.size() >= jetFinder()->minOutgoing() ) { vector jets = p; tcPDVector jettype = ptype; if ( jetFinder()->cluster(jettype,jets,this,t1,t2) ){ return passCuts(jettype,jets,t1,t2); } } for ( int i = 0, N = p.size(); i < N; ++i ) for ( int j = 0, M = theOneCuts.size(); j < M; ++j ) if ( !theOneCuts[j]->passCuts(this, ptype[i], p[i]) ) return false; for ( int i1 = 0, N1 = p.size() - 1; i1 < N1; ++i1 ) for ( int i2 = i1 + 1, N2 = p.size(); i2 < N2; ++i2 ) for ( int j = 0, M = theTwoCuts.size(); j < M; ++j ) if ( !theTwoCuts[j]->passCuts(this, ptype[i1], ptype[i2], p[i1], p[i2]) ) return false; for ( int j = 0, M = theMultiCuts.size(); j < M; ++j ) if ( !theMultiCuts[j]->passCuts(this, ptype, p) ) return false; if ( t1 ) { LorentzMomentum p1(ZERO, ZERO, 0.5*sqrt(currentSHat()), 0.5*sqrt(currentSHat())); for ( int i = 0, N = p.size(); i < N; ++i ) for ( int j = 0, M = theTwoCuts.size(); j < M; ++j ) if ( !theTwoCuts[j]->passCuts(this, t1, ptype[i], p1, p[i], true, false) ) return false; } if ( t2 ) { LorentzMomentum p2(ZERO, ZERO, -0.5*sqrt(currentSHat()), 0.5*sqrt(currentSHat())); for ( int i = 0, N = p.size(); i < N; ++i ) for ( int j = 0, M = theTwoCuts.size(); j < M; ++j ) if ( !theTwoCuts[j]->passCuts(this, ptype[i], t2, p[i], p2, false, true) ) return false; } return true; } bool Cuts::passCuts(const tcPVector & p, tcPDPtr t1, tcPDPtr t2) const { tcPDVector ptype(p.size()); vector mom(p.size()); for ( int i = 0, N = p.size(); i < N; ++i ) { ptype[i] = p[i]->dataPtr(); mom[i] = p[i]->momentum(); } return passCuts(ptype, mom, t1, t2); } bool Cuts::passCuts(const SubProcess & sub) const { if ( !passCuts(tcPVector(sub.outgoing().begin(), sub.outgoing().end()), sub.incoming().first->dataPtr(), sub.incoming().second->dataPtr()) ) return false; return true; } bool Cuts::passCuts(const Collision & coll) const { tSubProPtr sub = coll.primarySubProcess(); LorentzMomentum phat = sub->incoming().first->momentum() + sub->incoming().second->momentum(); if ( !initSubProcess(phat.m2(), phat.rapidity()) ) return false; TmpTransform tmp(sub, Utilities::getBoostToCM(sub->incoming())); if ( !passCuts(*sub) ) return false; return true; } Energy2 Cuts::minS(const tcPDVector & pv) const { Energy2 mins = ZERO; for ( int i = 0, N = theMultiCuts.size(); i < N; ++i ) mins = max(mins, theMultiCuts[i]->minS(pv)); return mins; } Energy2 Cuts::maxS(const tcPDVector & pv) const { Energy2 maxs = SMax(); for ( int i = 0, N = theMultiCuts.size(); i < N; ++i ) maxs = min(maxs, theMultiCuts[i]->maxS(pv)); return maxs; } Energy2 Cuts::minSij(tcPDPtr pi, tcPDPtr pj) const { Energy2 mins = ZERO; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) mins = max(mins, theTwoCuts[i]->minSij(pi, pj)); if ( mins > ZERO ) return mins; mins = sqr(pi->massMin() + pj->massMin()); mins = max(mins, sqr(minKTClus(pi, pj))/4.0); mins = max(mins, minDurham(pi, pj)*currentSHat()/2.0); mins = max(mins, minKT(pi)*minKT(pj)*minDeltaR(pi, pj)/4.0); return mins; } Energy2 Cuts::minTij(tcPDPtr pi, tcPDPtr po) const { Energy2 mint = ZERO; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) mint = max(mint, theTwoCuts[i]->minTij(pi, po)); if ( mint > ZERO ) return mint; mint = max(mint, sqr(minKT(po))); return mint; } double Cuts::minDeltaR(tcPDPtr pi, tcPDPtr pj) const { double mindr = 0.0; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) mindr = max(mindr, theTwoCuts[i]->minDeltaR(pi, pj)); return mindr; } Energy Cuts::minKTClus(tcPDPtr pi, tcPDPtr pj) const { Energy minkt = ZERO; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) minkt = max(minkt, theTwoCuts[i]->minKTClus(pi, pj)); return minkt; } double Cuts::minDurham(tcPDPtr pi, tcPDPtr pj) const { double y = 0.0; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) y = max(y, theTwoCuts[i]->minDurham(pi, pj)); return y; } Energy Cuts::minKT(tcPDPtr p) const { Energy minkt = ZERO; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) minkt = max(minkt, theOneCuts[i]->minKT(p)); if ( minkt > ZERO ) return minkt; minkt = minKTClus(p, tcPDPtr()); return minkt; } double Cuts::minEta(tcPDPtr p) const { double mineta = -Constants::MaxRapidity; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) mineta = max(mineta, theOneCuts[i]->minEta(p)); return mineta; } double Cuts::maxEta(tcPDPtr p) const { double maxeta = Constants::MaxRapidity; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) maxeta = min(maxeta, theOneCuts[i]->maxEta(p)); return maxeta; } double Cuts::minYStar(tcPDPtr p) const { if ( currentSHat() < ZERO ) return -Constants::MaxRapidity; if ( subMirror() ) { HoldFlag<> nomir(theSubMirror, false); return -maxYStar(p); } double etamin = minEta(p); double ytot = Y() + currentYHat(); if ( etamin > 0.0 ) { Energy minkt = minKT(p); Energy maxm = p->massMax(); return asinh(minkt*sinh(etamin)/sqrt(sqr(minkt) + sqr(maxm))) - ytot; } else { return etamin - ytot; } } double Cuts::maxYStar(tcPDPtr p) const { if ( currentSHat() < ZERO ) return Constants::MaxRapidity; if ( subMirror() ) { HoldFlag<> nomir(theSubMirror, false); return -minYStar(p); } double etamax = maxEta(p); double ytot = Y() + currentYHat(); if ( etamax > 0.0 ) { return etamax - ytot; } else { Energy minkt = minKT(p); Energy maxm = p->massMax(); return asinh(minkt*sinh(etamax)/sqrt(sqr(minkt) + sqr(maxm))) - ytot; } } double Cuts::minRapidityMax(tcPDPtr p) const { double minRapidityMax = -Constants::MaxRapidity; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) minRapidityMax = max(minRapidityMax, theOneCuts[i]->minRapidityMax(p)); return minRapidityMax; } double Cuts::maxRapidityMin(tcPDPtr p) const { double maxRapidityMin = Constants::MaxRapidity; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) maxRapidityMin = min(maxRapidityMin, theOneCuts[i]->maxRapidityMin(p)); return maxRapidityMin; } void Cuts::persistentOutput(PersistentOStream & os) const { os << ounit(theSMax, GeV2) << theY << ounit(theCurrentSHat, GeV2) << theCurrentYHat << ounit(theMHatMin, GeV) << ounit(theMHatMax, GeV) << theYHatMin << theYHatMax << theX1Min << theX1Max << theX2Min << theX2Max << ounit(theScaleMin, GeV2) << ounit(theScaleMax, GeV2) << theOneCuts << theTwoCuts << theMultiCuts << theJetFinder << theSubMirror; } void Cuts::persistentInput(PersistentIStream & is, int) { is >> iunit(theSMax, GeV2) >> theY >> iunit(theCurrentSHat, GeV2) >> theCurrentYHat >> iunit(theMHatMin, GeV) >> iunit(theMHatMax, GeV) >> theYHatMin >> theYHatMax >> theX1Min >> theX1Max >> theX2Min >> theX2Max >> iunit(theScaleMin, GeV2) >> iunit(theScaleMax, GeV2) >> theOneCuts >> theTwoCuts >> theMultiCuts >> theJetFinder >> theSubMirror; } ClassDescription Cuts::initCuts; // Definition of the static class description member. Energy Cuts::maxMHatMin() const { return theMHatMax; } Energy Cuts::minMHatMax() const { return theMHatMin; } Energy2 Cuts::maxScaleMin() const { return theScaleMax; } Energy2 Cuts::minScaleMax() const { return theScaleMin; } double Cuts::maxYHatMin() const { return theYHatMax; } double Cuts::minYHatMax() const { return theYHatMin; } double Cuts::maxX1Min() const { return theX1Max; } double Cuts::minX1Max() const { return theX1Min; } double Cuts::maxX2Min() const { return theX2Max; } double Cuts::minX2Max() const { return theX2Min; } void Cuts::Init() { typedef double (ThePEG::Cuts::*IGFN)() const; typedef void (ThePEG::Cuts::*ISFN)(double); static ClassDocumentation documentation ("Cuts is a class for implementing kinematical cuts in ThePEG. The " "class itself only implements cuts on the total momentum of the hard " "sub-process, implemented as minimum and maximum values of \\f$x_1\\f$ " "and \\f$x_2\\f$ (or \\f$\\hat{s}\\f$ and \\f$\\hat{y}\\f$. Further cuts " "can be implemented either by inheriting from this base class, in which " "the virtual cut() function should be overridden, or by assigning " "objects of class OneCutBase, TwoCutBase and MultiCutBase defining " "cuts on single particles, pairs of particles and groups of " "particles respectively."); static Parameter interfaceMHatMin ("MHatMin", "The minimum allowed value of \\f$\\sqrt{\\hat{s}}\\f$.", &Cuts::theMHatMin, GeV, 2.0*GeV, ZERO, Constants::MaxEnergy, true, false, Interface::limited, 0, 0, 0, &Cuts::maxMHatMin, 0); interfaceMHatMin.setHasDefault(false); static Parameter interfaceMHatMax ("MHatMax", "The maximum allowed value of \\f$\\sqrt{\\hat{s}}\\f$.", &Cuts::theMHatMax, GeV, 100.0*GeV, ZERO, ZERO, true, false, Interface::lowerlim, 0, 0, &Cuts::minMHatMax, 0, 0); interfaceMHatMax.setHasDefault(false); static Parameter interfaceScaleMin ("ScaleMin", "The minimum allowed value of the scale to be used in PDFs and " "coupling constants.", &Cuts::theScaleMin, GeV2, ZERO, ZERO, Constants::MaxEnergy2, true, false, Interface::limited, 0, 0, 0, &Cuts::maxScaleMin, 0); interfaceScaleMin.setHasDefault(false); static Parameter interfaceScaleMax ("ScaleMax", "The maximum allowed value of the scale to be used in PDFs and " "coupling constants.", &Cuts::theScaleMax, GeV2, 10000.0*GeV2, ZERO, ZERO, true, false, Interface::lowerlim, 0, 0, &Cuts::minScaleMax, 0, 0); interfaceScaleMax.setHasDefault(false); static Parameter interfaceYHatMin ("YHatMin", "The minimum value of the rapidity of the hard sub-process " "(wrt. the rest system of the colliding particles).", &Cuts::theYHatMin, -10.0, 0.0, Constants::MaxRapidity, true, false, Interface::upperlim, (ISFN)0, (IGFN)0, (IGFN)0, &Cuts::maxYHatMin, (IGFN)0); interfaceYHatMin.setHasDefault(false); static Parameter interfaceYHatMax ("YHatMax", "The maximum value of the rapidity of the hard sub-process " "(wrt. the rest system of the colliding particles).", &Cuts::theYHatMax, 10.0, -Constants::MaxRapidity, 0.0, true, false, Interface::lowerlim, (ISFN)0, (IGFN)0, &Cuts::minYHatMax, (IGFN)0, (IGFN)0); interfaceYHatMax.setHasDefault(false); static Parameter interfaceX1Min ("X1Min", "The minimum value of the positive light-cone fraction of the hard " "sub-process.", &Cuts::theX1Min, 0.0, 0.0, 1.0, true, false, Interface::limited, (ISFN)0, (IGFN)0, (IGFN)0, &Cuts::maxX1Min, (IGFN)0); interfaceX1Min.setHasDefault(false); static Parameter interfaceX1Max ("X1Max", "The maximum value of the positive light-cone fraction of the hard " "sub-process.", &Cuts::theX1Max, 0.0, 0.0, 1.0, true, false, Interface::limited, (ISFN)0, (IGFN)0, &Cuts::minX1Max, (IGFN)0, (IGFN)0); interfaceX1Max.setHasDefault(false); static Parameter interfaceX2Min ("X2Min", "The minimum value of the negative light-cone fraction of the hard " "sub-process.", &Cuts::theX2Min, 0.0, 0.0, 1.0, true, false, Interface::limited, (ISFN)0, (IGFN)0, (IGFN)0, &Cuts::maxX2Min, (IGFN)0); interfaceX2Min.setHasDefault(false); static Parameter interfaceX2Max ("X2Max", "The maximum value of the negative light-cone fraction of the hard " "sub-process.", &Cuts::theX2Max, 0.0, 0.0, 1.0, true, false, Interface::limited, (ISFN)0, (IGFN)0, &Cuts::minX2Max, (IGFN)0, (IGFN)0); interfaceX2Max.setHasDefault(false); static RefVector interfaceOneCuts ("OneCuts", "The objects defining cuts on single outgoing partons from the " "hard sub-process.", &Cuts::theOneCuts, -1, true, false, true, false, false); static RefVector interfaceTwoCuts ("TwoCuts", "The objects defining cuts on pairs of particles in the " "hard sub-process.", &Cuts::theTwoCuts, -1, true, false, true, false, false); static RefVector interfaceMultiCuts ("MultiCuts", "The objects defining cuts on sets of outgoing particles from the " "hard sub-process.", &Cuts::theMultiCuts, -1, true, false, true, false, false); static Reference interfaceJetFinder ("JetFinder", "Set a JetFinder object used to define cuts on the" "level of reconstructed jets as needed for higher order corrections.", &Cuts::theJetFinder, false, false, true, true, false); interfaceX1Min.rank(10); interfaceX1Max.rank(9); interfaceX2Min.rank(8); interfaceX2Max.rank(7); interfaceMHatMin.rank(6); interfaceMHatMax.rank(5); interfaceYHatMin.rank(4); interfaceYHatMax.rank(3); interfaceOneCuts.rank(2); interfaceTwoCuts.rank(1); } double Cuts::yHatMin() const { return theX1Min > 0.0 && theX2Max > 0.0? max(theYHatMin, 0.5*log(theX1Min/theX2Max)): theYHatMin; } double Cuts::yHatMax() const { return theX1Max > 0.0 && theX2Min > 0.0? min(theYHatMax, 0.5*log(theX1Max/theX2Min)): theYHatMax; } bool Cuts::yHat(double y) const { return y > yHatMin() && y < yHatMax(); } double Cuts::x1Min() const { return max(theX1Min, (theMHatMin/sqrt(SMax()))*exp(theYHatMin)); } double Cuts::x1Max() const { return min(theX1Max, (theMHatMax/sqrt(SMax()))*exp(theYHatMax)); } bool Cuts::x1(double x) const { return x > x1Min() && x <= x1Max(); } double Cuts::x2Min() const { return max(theX2Min, (theMHatMin/sqrt(SMax()))/exp(theYHatMax)); } double Cuts::x2Max() const { return min(theX2Max, (theMHatMax/sqrt(SMax()))/exp(theYHatMin)); } bool Cuts::x2(double x) const { return x > x2Min() && x <= x2Max(); } template vector::transient_const_pointer> Cuts::oneCutObjects() const { typedef typename Ptr::transient_const_pointer tcPtr; vector ret; for ( int i = 0, N = theOneCuts.size(); i < N; ++i ) if ( dynamic_ptr_cast(theOneCuts[i]) ) ret.push_back(dynamic_ptr_cast(theOneCuts[i])); return ret; } template vector::transient_const_pointer> Cuts::twoCutObjects() const { typedef typename Ptr::transient_const_pointer tcPtr; vector ret; for ( int i = 0, N = theTwoCuts.size(); i < N; ++i ) if ( dynamic_ptr_cast(theTwoCuts[i]) ) ret.push_back(dynamic_ptr_cast(theTwoCuts[i])); return ret; } template vector::transient_const_pointer> Cuts::multiCutObjects() const { typedef typename Ptr::transient_const_pointer tcPtr; vector ret; for ( int i = 0, N = theMultiCuts.size(); i < N; ++i ) if ( dynamic_ptr_cast(theMultiCuts[i]) ) ret.push_back(dynamic_ptr_cast(theMultiCuts[i])); return ret; } thepeg-1.8.0.orig/Cuts/SimpleDISCut.h0000644000175000017500000001504311747772425015506 0ustar sunsun// -*- C++ -*- // // SimpleDISCut.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SimpleDISCut_H #define THEPEG_SimpleDISCut_H // // This is the declaration of the SimpleDISCut class. // #include "ThePEG/Cuts/TwoCutBase.h" namespace ThePEG { /** * SimpleDISCut inherits from TwoCutBase and omplements a simple * \f$Q^2\f$ cut on the a scattered lepton, either neutral or charged * current. * * @see \ref SimpleDISCutInterfaces "The interfaces" * defined for SimpleDISCut. */ class SimpleDISCut: public TwoCutBase { public: /** * The default constructor. */ SimpleDISCut() : theMinQ2(1.0*GeV2), theMaxQ2(100.0*GeV2), theMinW2(100.0*GeV2), theMaxW2(1000000.0*GeV2), chargedCurrent(false) {} public: /** @name Overridden virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. Returns zero. */ virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. Return the minimum \f$Q^2\f$ if * the incoming and outgoing particles are matching leptons. */ virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. Returns zero. */ virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. Returns zero. */ virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. Returns zero. */ virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const; /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci = false, bool incj = false) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; protected: /** * Check that the types of the incoming and outgoing particle types * matches a DIS event. */ bool check(long idi, long ido) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Helper function used by the interface. */ Energy2 maxMinQ2() const; /** * Helper function used by the interface. */ Energy2 minMaxQ2() const; /** * Helper function used by the interface. */ Energy2 maxMinW2() const; /** * Helper function used by the interface. */ Energy2 minMaxW2() const; private: /** * The minimum \f$Q^2\f$. */ Energy2 theMinQ2; /** * The maximum \f$Q^2\f$. This is only applied as a post-cut. */ Energy2 theMaxQ2; /** * The minimum \f$W^2\f$. This is only applied as a post-cut. */ Energy2 theMinW2; /** * The maximum \f$W^2\f$. This is only applied as a post-cut. */ Energy2 theMaxW2; /** * If true the cut is applied to charged current events, otherwise * it is applied to neutral current events. */ bool chargedCurrent; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initSimpleDISCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SimpleDISCut & operator=(const SimpleDISCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of SimpleDISCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of SimpleDISCut. */ typedef TwoCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the SimpleDISCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SimpleDISCut"; } /** Return the name of the shared library be loaded to get * access to the SimpleDISCut class and every other class it uses * (except the base class). */ static string library() { return "SimpleDISCut.so"; } }; /** @endcond */ } #endif /* THEPEG_SimpleDISCut_H */ thepeg-1.8.0.orig/Cuts/KTClus.h0000644000175000017500000001320011747772425014377 0ustar sunsun// -*- C++ -*- // // KTClus.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_KTClus_H #define THEPEG_KTClus_H // // This is the declaration of the KTClus class. // #include "ThePEG/Cuts/TwoCutBase.h" namespace ThePEG { /** * This clas implements the cuts relevant for the \f$\Delta * R\f$-measure in the longitudinally invariant kt-algorithm. By * default the cut is only applied to coloured particles, but * optionally it may be applied to all particle types. * * @see \ref KTClusInterfaces "The interfaces" * defined for KTClus. */ class KTClus: public TwoCutBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ KTClus() : theCut(10.0*GeV), onlyJets(true) {} //@} public: /** @name Overridden virtual functions defined in the base class. */ //@{ /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. */ virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. Returns zero. */ virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. Returns zero. */ virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. Returns zero. */ virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. Returns zero. */ virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const; /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci = false, bool incj = false) const; //@} /** * Describe the currently active cuts in the log file. */ virtual void describe() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. */ Energy theCut; /** * If true, only apply the cut to pairs of coloured particles. */ bool onlyJets; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initKTClus; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ KTClus & operator=(const KTClus &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of KTClus. */ template <> struct BaseClassTrait { /** Typedef of the first base class of KTClus. */ typedef TwoCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the KTClus class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::KTClus"; } /** Return the name of the shared library be loaded to get * access to the KTClus class and every other class it uses * (except the base class). */ static string library() { return "KTClus.so"; } }; /** @endcond */ } #endif /* THEPEG_KTClus_H */ thepeg-1.8.0.orig/configure.ac0000644000175000017500000000763511755145151014435 0ustar sunsundnl Process this file with autoconf to produce a configure script. AC_PREREQ([2.59]) AC_INIT([ThePEG],[1.8.0],[http://www.thep.lu.se/ThePEG/],[ThePEG]) AC_CONFIG_AUX_DIR([Config]) AC_CONFIG_MACRO_DIR([m4]) THEPEG_LIBTOOL_VERSION_INFO(15,0,0) AC_CONFIG_SRCDIR([EventRecord/SubProcess.h]) AC_CONFIG_HEADERS([Config/config.h Config/LWH.h Config/ThePEG_Qty.h:Config/ThePEG_Qty.h.a:Config/ThePEG_Qty.h.in:Config/ThePEG_Qty.h.b]) AC_CANONICAL_HOST case "${host}" in *-darwin[[0156]].*) AC_MSG_ERROR([ThePEG requires OS X 10.3 or later]) ;; *-darwin7.*) if test "x$MACOSX_DEPLOYMENT_TARGET" != "x10.3"; then AC_MSG_ERROR( [Please export the MACOSX_DEPLOYMENT_TARGET variable, set to 10.3]) fi ;; esac AC_LANG(C++) AM_INIT_AUTOMAKE([1.9 gnu dist-bzip2 -Wall]) dnl also include std-options once --version and --help exist m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) dnl Checks for programs. AC_PROG_CXX AC_PROG_INSTALL AC_PROG_MAKE_SET AC_PROG_LN_S LT_PREREQ([2.2]) LT_INIT([disable-static dlopen pic-only]) VL_LIB_READLINE THEPEG_UNIT_CHECKING THEPEG_CHECK_GSL THEPEG_SEARCH_LHAPDF THEPEG_CHECK_HEPMC THEPEG_CHECK_RIVET AX_CHECK_ZLIB dnl AX_CHECK_BZ2LIB THEPEG_DEFINE_ENVDEFAULT(ThePEG_GZREAD_FILE,GZREAD_FILE,gunzip -c,[The command which, taking the name of a gzipped file as argument, unzips it and prints it to stdout. Default is "gunzip -c"]) THEPEG_DEFINE_ENVDEFAULT(ThePEG_GZWRITE_FILE,GZWRITE_FILE,[gzip -c > ],[The command which, taking the name of a gzipped file as argument, reads stdin, zips it and writes it to the file. Default is "gzip -c > ".]) THEPEG_DEFINE_ENVDEFAULT(ThePEG_BZ2READ_FILE,BZ2READ_FILE,bunzip2 -c,[The command which, taking the name of a bzipped file as argument, unzips it and prints it to stdout. Default is "bunzip2 -c".]) THEPEG_DEFINE_ENVDEFAULT(ThePEG_BZ2WRITE_FILE,BZ2WRITE_FILE,[bzip2 -c > ],[The command which, taking the name of a bzipped file as argument, reads stdin, zips it and writes it to the file. Default is "bzip2 -c > ".]) THEPEG_CHECK_EXPM1 THEPEG_CHECK_LOG1P THEPEG_CHECK_DLOPEN THEPEG_CHECK_FPUCONTROL THEPEG_CHECK_FENV THEPEG_CHECK_AIDA AM_CPPFLAGS="-I\$(top_builddir)/include \$(GSLINCLUDE)" AX_COMPILER_VENDOR case "${ax_cv_cxx_compiler_vendor}" in gnu) AM_CXXFLAGS="-ansi -pedantic -Wall -W" ;; clang) AM_CXXFLAGS="-ansi -pedantic -Wall -Wno-overloaded-virtual -Wno-unused-function" dnl -Wno-unneeded-internal-declaration ;; intel) AM_CXXFLAGS="-strict-ansi -Wall -wd13000,1418,981,444,383,1599,1572,2259,980" ;; esac THEPEG_CHECK_ABS_BUG AC_SUBST(AM_CPPFLAGS) AC_SUBST(AM_CXXFLAGS) dnl do an actual capability check on ld instead of this workaround case "${host}" in *-darwin*) ;; *) AM_LDFLAGS="-Wl,--enable-new-dtags" ;; esac AC_SUBST(AM_LDFLAGS) THEPEG_EMPTY_SUBST AC_PATH_PROG(PERL, perl) AC_ARG_WITH(javagui, [ --with-javagui Compile and install the java-based GUI.]) if test "x$with_javagui" != "xno"; then THEPEG_HAS_JAVA([1.4], [], [with_javagui=no; AC_MSG_NOTICE([Java GUI disabled])]) fi AM_CONDITIONAL([JAVAGUI], [test "x$with_javagui" != "xno"]) AC_CONFIG_FILES([Helicity/Makefile Helicity/WaveFunction/Makefile Helicity/Vertex/Makefile Helicity/Vertex/Scalar/Makefile Helicity/Vertex/Vector/Makefile Helicity/Vertex/Tensor/Makefile Utilities/Makefile include/Makefile Interface/Makefile LesHouches/Makefile Vectors/Makefile PDT/Makefile PDF/Makefile Persistency/Makefile Config/Makefile Handlers/Makefile MatrixElement/Makefile Pointer/Makefile lib/Makefile lib/Makefile.common.install src/Makefile ACDC/Makefile Repository/Makefile EventRecord/Makefile StandardModel/Makefile Cuts/Makefile Analysis/Makefile Doc/Makefile Doc/MakeDocs.in Doc/refman.h Doc/refman.conf java/Makefile Makefile]) AC_CONFIG_FILES([Doc/fixinterfaces.pl],[chmod +x Doc/fixinterfaces.pl]) THEPEG_OVERVIEW AC_CONFIG_COMMANDS([summary],[cat config.thepeg]) AC_OUTPUT thepeg-1.8.0.orig/lib/0000755000175000017500000000000011756460367012714 5ustar sunsunthepeg-1.8.0.orig/lib/ThePEG.el0000644000175000017500000015134611747772425014325 0ustar sunsun(require 'dired) (defun ThePEG-fheader-file (class) "Create a .fh file with a skeleton suitable for a class CLASS." (interactive "sClass Name: ") (setq namespace (thepeg-get-namespace class)) (setq class (thepeg-get-class class)) (thepeg-fheaderfile namespace class)) (defun ThePEG-class-files (class) "Create .h and .cc files with skeletons suitable for a class CLASS. The user will be prompted for the base class and the main include file. The class may or may not be INTERFACED, PERSISTENT and/or CONCRETE." (interactive "sClass Name: ") (setq base (read-from-minibuffer "Base class name: " "HandlerBase")) (setq namespace (thepeg-get-namespace class)) (setq class (thepeg-get-class class)) (setq baseheader (cond ((string-equal base "") "ThePEG/Config/ThePEG.h") ((string-equal base "Base") "ThePEG/Config/ThePEG.h") ((string-equal base "PersistentBase") "ThePEG/Config/ThePEG.h") ((string-equal base "Interfaced") "ThePEG/Interface/Interfaced.h") ((string-equal base "HandlerBase") "ThePEG/Handlers/HandlerBase.h") ((string-equal base "AnalysisHandler") "ThePEG/Handlers/AnalysisHandler.h") ((string-equal base "StepHandler") "ThePEG/Handlers/StepHandler.h") ((string-equal base "CascadeHandler") "ThePEG/Handlers/CascadeHandler.h") ((string-equal base "HadronizationHandler") "ThePEG/Handlers/HadronizationHandler.h") ((string-equal base "DecayHandler") "ThePEG/Handlers/DecayHandler.h") ((string-equal base "MEBase") "ThePEG/MatrixElement/MEBase.h") ((string-equal base "Decayer") "ThePEG/PDT/Decayer.h") ((string-equal base "PDFBase") "ThePEG/PDF/PDFBase.h") (t (concat namespace "/" (car ( cdr (reverse (split-string default-directory "/")))) "/" base ".h")))) (setq baseheader (read-from-minibuffer "#include file for the base class: " baseheader)) (cond ((string-equal base "Interfaced") (setq interfaced t)) ((string-equal base "HandlerBase") (setq interfaced t)) ((string-equal base "StepHandler") (setq interfaced t)) ((string-equal base "CascadeHandler") (setq interfaced t)) ((string-equal base "HadronizationHandler") (setq interfaced t)) ((string-equal base "DecayHandler") (setq interfaced t)) ((string-equal base "MEBase") (setq interfaced t)) ((string-equal base "PDFBase") (setq interfaced t)) ((string-equal base "Decayer") (setq interfaced t)) (t (setq interfaced (y-or-n-p "Will this class be interfaced ")))) (setq declarations (cond ((string-equal base "PDFBase") (thepeg-PDF-declare class base)) ((string-equal base "MEBase") (thepeg-ME-declare class base)) ((string-equal base "StepHandler") (thepeg-StepHandler-declare class base)) ((string-equal base "AnalysisHandler") (thepeg-AnalysisHandler-declare class base)) ((string-equal base "Decayer") (thepeg-Decayer-declare class base)) (t ""))) (setq implementations (cond ((string-equal base "PDFBase") (thepeg-PDF-implement class base)) ((string-equal base "MEBase") (thepeg-ME-implement class base)) ((string-equal base "StepHandler") (thepeg-StepHandler-implement class base)) ((string-equal base "AnalysisHandler") (thepeg-AnalysisHandler-implement class base)) ((string-equal base "Decayer") (thepeg-Decayer-implement class base)) (t ""))) (setq persist (y-or-n-p "Will this class be persistent ")) (setq concrete (y-or-n-p "Will this class be concrete ")) (thepeg-sourcefile namespace class base persist interfaced concrete implementations) ; (thepeg-iheaderfile namespace class base interfaced concrete) ; (thepeg-fheaderfile namespace class) (thepeg-headerfile namespace class base baseheader interfaced persist concrete declarations)) (defun ThePEG-ME-class-files () (interactive) (thepeg-specific-class-files "MEBase" "ThePEG/MatrixElement/MEBase.h" 'thepeg-ME-declare 'thepeg-ME-implement)) (defun ThePEG-PDF-class-files () (interactive) (thepeg-specific-class-files "PDFBase" "ThePEG/PDF/PDFBase.h" 'thepeg-PDF-declare 'thepeg-PDF-implement)) (defun ThePEG-StepHandler-class-files () (interactive) (thepeg-specific-class-files "StepHandler" "ThePEG/Handlers/StepHandler.h" 'thepeg-StepHandler-declare 'thepeg-StepHandler-implement)) (defun ThePEG-AnalysisHandler-class-files () (interactive) (thepeg-specific-class-files "AnalysisHandler" "ThePEG/Handlers/AnalysisHandler.h" 'thepeg-AnalysisHandler-declare 'thepeg-AnalysisHandler-implement)) (defun ThePEG-Decayer-class-files () (interactive) (thepeg-specific-class-files "Decayer" "ThePEG/PDT/Decayer.h" 'thepeg-Decayer-declare 'thepeg-Decayer-implement)) (defun thepeg-specific-class-files (base baseheader declfn implfn) (setq class (read-from-minibuffer "Class name: ")) (setq base (read-from-minibuffer "Base class name: " base)) (setq namespace (thepeg-get-namespace class)) (setq class (thepeg-get-class class)) (setq baseheader (read-from-minibuffer "#include file for the base class: " baseheader)) (setq interfaced t) (setq persist (y-or-n-p "Will this class be persistent ")) (setq concrete (y-or-n-p "Will this class be concrete ")) (setq declare (funcall declfn class base)) (setq implement (funcall implfn class base)) (thepeg-sourcefile namespace class base persist interfaced concrete implement) ; (thepeg-iheaderfile namespace class base interfaced concrete) ; (thepeg-fheaderfile namespace class) (thepeg-headerfile namespace class base baseheader interfaced persist concrete declare)) (defun thepeg-get-namespace (class) "Return the namespace part in an \"namepace::class\" string" (cond ((cdr (split-string class "::")) (car (split-string class "::"))) (t "ThePEG"))) (defun thepeg-get-class (class) "Return the namespace part in an \"namepace::class\" string" (cond ((cdr (split-string class "::")) (car (cdr (split-string class "::")))) (t class))) (defun thepeg-sourcefile (namespace class baseclass persistent interfaced concrete specialfn) "Create a file suitable for the implementation of a class CLASS. The class may or may not be PERSISTENT and/or CONCRETE. SPECIALFN may be used to include special function definitions" (find-file (concat class ".cc")) (c++-mode) (cond ((> (buffer-size) 0)) (t (insert-string (thepeg-source namespace class baseclass persistent interfaced concrete specialfn)) (beginning-of-buffer)))) (defun thepeg-source (namespace class baseclass persistent interfaced concrete specialfn) "Return a skeleton suitable for the implementation file of a class CLASS. The class may or may not be PERSISTENT and/or CONCRETE. SPECIALFN may be used to include special function definitions" (setq interface (cond (interfaced (concat (cond (concrete " IBPtr THECLASS::clone() const { return new_ptr(*this); } IBPtr THECLASS::fullclone() const { return new_ptr(*this); } ") (t "")) " // If needed, insert default implementations of virtual function defined // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs). ")) (t ""))) (setq piostring (cond (persistent " void THECLASS::persistentOutput(PersistentOStream & os) const { // *** ATTENTION *** os << ; // Add all member variable which should be written persistently here. } void THECLASS::persistentInput(PersistentIStream & is, int) { // *** ATTENTION *** is >> ; // Add all member variable which should be read persistently here. } ") (t ""))) (setq pioinclude (cond (persistent " #include \"ThePEG/Persistency/PersistentOStream.h\" #include \"ThePEG/Persistency/PersistentIStream.h\"") (t ""))) (setq description (cond (persistent (cond (concrete " DescribeClass describeTHENAMESPACETHECLASS(\"THENAMESPACE::THECLASS\", \"THECLASS.so\");") (t " DescribeAbstractClass describeTHENAMESPACETHECLASS(\"THENAMESPACE::THECLASS\", \"THECLASS.so\");"))) (t (cond (concrete " DescribeNoPIOClass describeTHENAMESPACETHECLASS(\"THENAMESPACE::THECLASS\", \"THECLASS.so\");") (t " DescribeAbstractNoPIOClass describeTHENAMESPACETHECLASS(\"THENAMESPACE::THECLASS\", \"THECLASS.so\");"))))) (thepeg-replace "THENAMESPACE" namespace (thepeg-replace "THECLASS" class (thepeg-replace "THEBASE" baseclass (concat "// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the THECLASS class. // #include \"THECLASS.h\" #include \"ThePEG/Interface/ClassDocumentation.h\" #include \"ThePEG/EventRecord/Particle.h\" #include \"ThePEG/Repository/UseRandom.h\" #include \"ThePEG/Repository/EventGenerator.h\" #include \"ThePEG/Utilities/DescribeClass.h\" " pioinclude " using namespace " namespace "; THECLASS::THECLASS() {} THECLASS::~THECLASS() {} " specialfn interface piostring " // *** Attention *** The following static variable is needed for the type // description system in ThePEG. Please check that the template arguments // are correct (the class and its base class), and that the constructor // arguments are correct (the class name and the name of the dynamically // loadable library where the class implementation can be found)." description " void THECLASS::Init() { static ClassDocumentation documentation (\"There is no documentation for the THECLASS class\"); } "))))) (defun thepeg-iheaderfile (namespace class base interfaced concrete) "Create a icc-header file suitable for the inline function definitions of a class CLASS which derives from the base class BASE. The class may or may not be INTERFACED and/or CONCRETE." (find-file (concat class ".icc")) (c++-mode) (cond ((> (buffer-size) 0)) (t (insert-string (thepeg-iheader namespace class base interfaced concrete)) (beginning-of-buffer)))) (defconst thepeg-typetraits-decl " #include \"ThePEG/Utilities/ClassTraits.h\" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of THECLASS. */ template <> struct BaseClassTrait { /** Typedef of the first base class of THECLASS. */ typedef THEBASE NthBase; }; /** This template specialization informs ThePEG about the name of * the THECLASS class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return \"THEFULLCLASS\"; } /** * The name of a file containing the dynamic library where the class * THECLASS is implemented. It may also include several, space-separated, * libraries if the class THECLASS depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return \"THECLASS.so\"; } }; /** @endcond */ } ") (defconst thepeg-interfaced-impl " void THECLASS::doupdate() { THEBASE::doupdate(); // First update base class. bool redo = touched(); // redo if touched. // UpdateChecker::check(aDependentMember, redo); // Update referenced objects on which this depends redo is set to true // if the dependent object is touched. // for_each(ContainerOfDependencies, UpdateChecker(redo)); // Update a container of references. // for_each(MapOfDependencies, UpdateMapChecker(redo)); // Update a map of references. if ( !redo ) return; // return if nothing has been touched. Otherwise do the actual update. // touch() // Touch if anything has changed. } void THECLASS::doinit() { THEBASE::doinit(); } void THECLASS::dofinish() { THEBASE::dofinish(); } void THECLASS::doinitrun() { THEBASE::doinitrun(); } void THECLASS::rebind(const TranslationMap & trans) { // dummy = trans.translate(dummy); THEBASE::rebind(trans); } IVector THECLASS::getReferences() { IVector ret = THEBASE::getReferences(); // ret.push_back(dummy); return ret; } ") (defun thepeg-iheader (namespace class base interfaced concrete) "Return a skeleton suitable for the icc-header file for the inline function definitions of a class CLASS which derives from the base class BASE." (setq interface (cond (interfaced (concat (cond (concrete " inline IBPtr THECLASS::clone() const { return new_ptr(*this); } inline IBPtr THECLASS::fullclone() const { return new_ptr(*this); } ") (t "")) " // If needed, insert default implementations of virtual function defined // in the InterfacedBase class here (using ThePEG-interfaced-impl in Emacs). ")) (t ""))) (thepeg-replace "THECLASS" class (thepeg-replace "THEBASE" base (concat "// -*- C++ -*- // // This is the implementation of the inlined member functions of // the THECLASS class. // namespace " namespace " { inline THECLASS::THECLASS() {} inline THECLASS::THECLASS(const THECLASS & x) : THEBASE(x) {} " interface " } ")))) (defun thepeg-fheaderfile (namespace class) "Create a ifh-header file suitable for the forward declarations of a class CLASS." (find-file (concat class ".fh")) (c++-mode) (cond ((> (buffer-size) 0)) (t (insert-string (thepeg-fheader namespace class)) (beginning-of-buffer)))) (defun thepeg-fheader (namespace class) "Return a skeleton suitable for the fh-header file for the forward declarations of a class CLASS." (setq NAMESPACE namespace) (thepeg-replace "THECLASS" class (concat "// -*- C++ -*- // // This is the forward declaration of the THECLASS class. // #ifndef " NAMESPACE "_THECLASS_FH #define " NAMESPACE "_THECLASS_FH #include \"ThePEG/Config/ThePEG.h\" namespace " namespace " { class THECLASS; ThePEG_DECLARE_POINTERS(" namespace "::THECLASS,THECLASSPtr); } #endif "))) (defun thepeg-headerfile (namespace class base baseheader interfaced persistent concrete specialfn) "Create a header file for a class CLASS derived from a base class BASE which may be found in the include file BASEHEADER. The class may or may not be INTERFACED, PERSISTENT and/or CONCRETE. SPECIALFN may be used to include special function definitions" (find-file (concat class ".h")) (c++-mode) (cond ((> (buffer-size) 0)) (t (insert-string (thepeg-header namespace class base baseheader persistent concrete interfaced specialfn)) (beginning-of-buffer)))) (defconst thepeg-persistent-decl " /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} ") (defconst thepeg-clone-decl " protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} ") (defconst thepeg-interfaced-decl " protected: /** @name Standard Interfaced functions. */ //@{ /** * Check sanity of the object during the setup phase. */ virtual void doupdate(); /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans); /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} ") (defun ThePEG-persistent-decl () "Insert declarations of the standard ThePEG persistent I/O functions." (interactive) (insert-string thepeg-persistent-decl)) (defun ThePEG-clone-decl () "Insert declarations of the standard ThePEG clone functions." (interactive) (insert-string thepeg-clone-decl)) (defun ThePEG-interfaced-decl () "Insert declarations of the standard ThePEG interfaced functions." (interactive) (insert-string thepeg-interfaced-decl)) (defun ThePEG-interfaced-impl () "Insert default implementations of the standard ThePEG interfaced functions." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq base (read-from-minibuffer "Base class Name: ")) (insert-string (thepeg-replace "THEBASE" base (thepeg-replace "THECLASS" class thepeg-interfaced-impl)))) (defun ThePEG-typetraits-decl () "Insert default declarations of the standard ThePEG type description system." (interactive) (setq fullclass (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq base (read-from-minibuffer "Base class Name: ")) (setq class (thepeg-get-class fullclass)) (insert-string (thepeg-replace "THEFULLCLASS" fullclass (thepeg-replace "THEBASE" base (thepeg-replace "THECLASS" class thepeg-typetraits-decl))))) (defconst thepeg-type-desc " // Static variable needed for the type description system in ThePEG. #include \"ThePEG/Utilities/DescribeClass.h\" DescribeABSTRACTNOPIOClass describeTHENAMESPACETHECLASS(\"THENAMESPACE::THECLASS\", \"THELIBRARY.so\"); ") (defun ThePEG-type-desc () "Insert default declarations of the standard ThePEG type description system." (interactive) (setq fullclass (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq base (read-from-minibuffer "Base class Name: ")) (setq persist (y-or-n-p "Will this class be persistent ")) (setq concrete (y-or-n-p "Will this class be concrete ")) (setq mainlib (y-or-n-p "Will this class be in a main library file ")) (setq class (thepeg-get-class fullclass)) (setq namespace (thepeg-get-namespace fullclass)) (setq abstract (cond (concrete "") (t "Abstract"))) (setq nopio (cond (persist "") (t "NoPIO"))) (setq library (cond (mainlib (concat "lib" namespace)) (t class))) (insert-string (thepeg-replace "THELIBRARY" library (thepeg-replace "ABSTRACT" abstract (thepeg-replace "NOPIO" nopio (thepeg-replace "THENAMESPACE" namespace (thepeg-replace "THEBASE" base (thepeg-replace "THECLASS" class thepeg-type-desc)))))))) (defun thepeg-header (namespace class base baseheader persistent concrete interfaced specialfn) "Return a skeleton suitable for the header file of a class CLASS derived from a base class BASE which may be found in the include file BASEHEADER. The class may or may not be PERSISTENT, INTERFACED and/or CONCRETE. SPECIALFN may be used to include special function definitions" (setq piostring (cond (persistent thepeg-persistent-decl) (t ""))) (setq cloning (cond ((and concrete interfaced) thepeg-clone-decl) (t ""))) (setq interface (cond (interfaced " // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). ") (t ""))) (setq doxygen-see-interfaces (cond (interfaced (concat " * * @see \\ref " class "Interfaces \"The interfaces\" * defined for " class ".")) (t ""))) (setq include (cond ((string-equal baseheader "") "ThePEG/Config/ThePEG.h") (t baseheader))) (setq special (cond ((string-equal specialfn "") "") (t (concat " public: " specialfn)))) (setq using (cond ((string-match namespace "ThePEG") "") (t " using namespace ThePEG; "))) (setq NAMESPACE namespace) (setq namespacequalifyer (cond ((string-match namespace "ThePEG") "") (t (concat namespace "::")))) (setq basedeclare (cond ((string-equal base "") "") (t (concat ": public " base)))) (thepeg-replace "THECLASS" class (concat "// -*- C++ -*- #ifndef " NAMESPACE "_THECLASS_H #define " NAMESPACE "_THECLASS_H // // This is the declaration of the THECLASS class. // #include \"" include "\" namespace " namespace " { " using " /** * Here is the documentation of the THECLASS class." doxygen-see-interfaces " */ class THECLASS" basedeclare " { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ THECLASS(); /** * The destructor. */ virtual ~THECLASS(); //@} " specialfn " public: " piostring " /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); " cloning interface " private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ THECLASS & operator=(const THECLASS &); }; } #endif /* " NAMESPACE "_THECLASS_H */ "))) (defun thepeg-replace (regexp newtext string) (dired-string-replace-match regexp string newtext t t)) (defun thepeg-PDF-implement (class base) (concat " #include \"ThePEG/PDT/ParticleData.h\" #include \"ThePEG/PDT/EnumParticles.h\" bool " class "::canHandleParticle(tcPDPtr particle) const { // We assume that all protons and neutrons can be handled return ( abs(particle->id()) == abs(long(ParticleID::pplus)) || abs(particle->id()) == abs(long(ParticleID::n0)) ); } cPDVector " class "::partons(tcPDPtr particle) const { // We assume that all standard partons can be extracted. cPDVector ret; if ( canHandleParticle(particle) ) { ret.push_back(getParticleData(ParticleID::g)); for ( int i = 1; i <= 5; ++i ) { ret.push_back(getParticleData(i)); ret.push_back(getParticleData(-i)); } } return ret; } double " class "::xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { // Here we should return the actual density. return 0.0; } double " class "::xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { // Here we should return the actual valence density. return 0.0; } ")) (defun thepeg-ME-implement (class base) (concat " #include \"ThePEG/PDT/EnumParticles.h\" #include \"ThePEG/MatrixElement/Tree2toNDiagram.h\" void " class "::getDiagrams() const { // Here is an example on how to specify diagrams. tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= 5; ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); // For each flavour we add: add(new_ptr((Tree2toNDiagram(3), q, qb, qb, 1, g, 2, g, -1))); // t-channel q + qbar -> g + g add(new_ptr((Tree2toNDiagram(3), q, qb, qb, 2, g, 1, g, -2))); // u-channel q + qbar -> g + g add(new_ptr((Tree2toNDiagram(2), q, qb, 1, g , 3, g, 3, g, -3))); // s-channel q + qbar -> g + g } } Energy2 " class "::scale() const { return sHat(); } int " class "::nDim() const { return 1; } void " class "::setKinematics() { " base "::setKinematics(); // Always call the base class method first. } bool " class "::generateKinematics(const double * r) { // Here you can use nDim() random numbers in the vector provided // to generate the internal kinematics. Note that sHat() has // already been given from the outside. // Save the jacobian dPS/dr for later use. jacobian(1.0); return false; // Return false if matrix element was zero. } double " class "::me2() const { return 0.0; } CrossSection " class "::dSigHatDR() const { return sqr(hbarc)*me2()*jacobian()/sHat(); // Here we can add other prefactors // coming from the phase space // integration. } unsigned int " class "::orderInAlphaS() const { return 0; } unsigned int " class "::orderInAlphaEW() const { return 0; } Selector " class "::diagrams(const DiagramVector & diags) const { // This example corresponds to the diagrams specified in the example // in the getDiagrams() function. Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(1.0, i); else if ( diags[i]->id() == -2 ) sel.insert(1.0, i); else if ( diags[i]->id() == -3 ) sel.insert(1.0, i); // You probably do not want equal weights here... return sel; // If there is only one possible diagram you can override the // MEBase::diagram function instead. } Selector " class "::colourGeometries(tcDiagPtr diag) const { // This example corresponds to the diagrams specified in the example // in the getDiagrams() function. static ColourLines ctST(\"1 4, -4 -2 5, -5 -3\"); static ColourLines ctSU(\"1 5, -5 -2 4, -4 -3\"); Selector sel; if ( diag->id() == -1 || diag->id() == -3 ) sel.insert(1.0, &ctST); else sel.insert(1.0, &ctSU); return sel; // If there is only one possible colour geometry you can override the // MEBase::selectColourGeometry function instead. } ")) (defun thepeg-PDF-declare (class base) (concat " public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this PDF can handle the extraction of partons from * the given \\a particle. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return the partons which this PDF may extract from the given * \\a particle. */ virtual cPDVector partons(tcPDPtr particle) const; /** * The density. Return the pdf for the given \\a parton inside the * given \\a particle for the virtuality \\a partonScale and * logarithmic momentum fraction \\a l \\f$(l=\\log(1/x)\\$f. The \\a * particle is assumed to have a virtuality \\a particleScale. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = 0.0*GeV2) const; /** * The valence density. Return the pdf for the given cvalence \\a * parton inside the given \\a particle for the virtuality \\a * partonScale and logarithmic momentum fraction \\a l * \\f$(l=\\log(1/x)\\$f. The \\a particle is assumed to have a * virtuality \\a particleScale. If not overidden by a sub class this * will return zero. */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = 0.0*GeV2) const; //@} ")) (defun thepeg-ME-declare (class base) (concat " public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \\f$\\alpha_S\\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \\f$\\alpha_{EW}\\f$ in which this matrix * element is given. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * The number of internal degrees of freedom used in the matrix * element. */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform * random numbers in the interval \\f$ ]0,1[ \\f$. To help the phase space * generator, the dSigHatDR should be a smooth function of these * numbers, although this is not strictly necessary. * @param r a pointer to the first of nDim() consecutive random numbers. * @return true if the generation succeeded, otherwise false. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; //@} ")) (defun thepeg-StepHandler-declare (class base) (concat " public: /** @name Virtual functions required by the StepHandler class. */ //@{ /** * The main function called by the EventHandler class to * perform a step. Given the current state of an Event, this function * performs the event generation step and includes the result in a new * Step object int the Event record. * @param eh the EventHandler in charge of the Event generation. * @param tagged if not empty these are the only particles which should * be considered by the StepHandler. * @param hint a Hint object with possible information from previously * performed steps. * @throws Veto if the StepHandler requires the current step to be discarded. * @throws Stop if the generation of the current Event should be stopped * after this call. * @throws Exception if something goes wrong. */ virtual void handle(EventHandler & eh, const tPVector & tagged, const Hint & hint); //@} ")) (defun thepeg-StepHandler-implement (class base) (concat " void " class ":: handle(EventHandler & eh, const tPVector & tagged, const Hint & hint) { // Implement the Handle method here. // Note that if the method actually does anything to the current event // the changes should be inserted in a new step which should be obtained // by 'ch.newStep()'. // Note also that the general advice is to only consider the particles in // the 'tagged' vector. } ")) (defun thepeg-AnalysisHandler-declare (class base) (concat " public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); /** * Return a LorentzTransform which would put the event in the * desired Lorentz frame. * @param event a pointer to the Event to be considered. * @return the LorentzRotation used in the transformation. */ virtual LorentzRotation transform(tcEventPtr event) const; /** * Analyze the given vector of particles. The default version calls * analyze(tPPtr) for each of the particles. * @param particles the vector of pointers to particles to be analyzed * @param weight the weight of the current event. */ virtual void analyze(const tPVector & particles, double weight); /** * Analyze the given particle. * @param particle pointer to the particle to be analyzed. * @param weight the weight of the current event. */ virtual void analyze(tPPtr particle, double weight); //@} ")) (defun thepeg-AnalysisHandler-implement (class base) (concat " void " class "::analyze(tEventPtr event, long ieve, int loop, int state) { " base "::analyze(event, ieve, loop, state); // Rotate to CMS, extract final state particles and call analyze(particles). } LorentzRotation " class "::transform(tcEventPtr event) const { return LorentzRotation(); // Return the Rotation to the frame in which you want to perform the analysis. } void " class "::analyze(const tPVector & particles, double weight) { " base "::analyze(particles); // Calls analyze() for each particle. } void " class "::analyze(tPPtr, double weight) {} ")) (defun thepeg-Decayer-declare (class base) (concat " public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; //@} ")) (defun thepeg-Decayer-implement (class base) (concat " bool " class "::accept(const DecayMode & dm) const { return false; } ParticleVector " class "::decay(const DecayMode & dm, const Particle & parent) const { ParticleVector children = dm.produceProducts(); return children; } ")) (defun ThePEG-see-interfaces () "Create a doxygen comment referring to the interfaces of a class." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (insert-string (concat " * @see \\ref " class "Interfaces \"The interfaces\" * defined for " class ". "))) (defun ThePEG-command () "Create a Command variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member function: " (concat "&" class "::do" name))) (setq safe (y-or-n-p "Is this parameter dependency safe? ")) (insert-string (concat " static Command<" class "> interface" name " (\"" name "\", \"" desc "\", " memb ", " (cond (safe "true")(t "false")) "); "))) (defun ThePEG-parameter () "Create a Parameter variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Type: " "double")) (setq isstring (cond ((string-equal type "string") t) (t nil))) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member variable: " (concat "&" class "::the" name))) (setq hasu (cond (isstring nil) (t (y-or-n-p "Does this parameter have a unit? ")))) (cond (hasu (setq unit (read-from-minibuffer "Unit: " "GeV")) (setq stru (concat "*" unit))) (t (setq stru ""))) (setq defa (read-from-minibuffer "Default value: " (concat "1.0" stru))) (setq limlo (cond (isstring nil) (t (y-or-n-p "Is this parameter limited from below? ")))) (cond (limlo (setq mini (read-from-minibuffer "Minimum value: " (concat "0.0" stru)))) (t (setq mini (concat "0" stru)))) (setq limup (cond (isstring nil) (t (y-or-n-p "Is this parameter limited from above? ")))) (cond (limup (setq maxi (read-from-minibuffer "Maximum value: " (concat "10.0" stru)))) (t (setq maxi (concat "0" stru)))) (setq safe (y-or-n-p "Is this parameter dependency safe? ")) (setq ronl (y-or-n-p "Is this parameter read-only? ")) (insert-string (concat " static Parameter<" class "," type "> interface" name " (\"" name "\", \"" desc "\", " memb ", " (cond (hasu (concat unit ", "))(t "")) defa (cond (isstring "")(t (concat ", " mini ", " maxi))) ", " (cond (safe "true")(t "false")) ", " (cond (ronl "true")(t "false")) (cond (isstring "") ((and limup limlo) ", Interface::limited") (limup ", Interface::upperlim") (limlo ", Interface::lowerlim") (t ", Interface::nolimits")))) (cond ((y-or-n-p "Are there any set/get functions? ") (insert-string (concat ", " (thepeg-ifn "Set-function: " (concat "&" class "::set" name) (concat "(void(" class "::*)(" type "))(0)")) ", " (thepeg-ifn "Get-function: " (concat "&" class "::get" name) (concat "(" type "(" class "::*)()const)(0)")) (cond (isstring "") (t (concat ", " (thepeg-ifn "Min-function: " (concat "&" class "::min" name) (concat "(" type "(" class "::*)()const)(0)")) ", " (thepeg-ifn "Max-function: " (concat "&" class "::max" name) (concat "(" type "(" class "::*)()const)(0)")) ))) ", " (thepeg-ifn "Default-function: " (concat "&" class "::def" name) (concat "(" type "(" class "::*)()const)(0)")))))) (insert-string "); ")) (defun ThePEG-parvector () "Create a ParVector variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Type: " "double")) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member variable: " (concat "&" class "::the" name))) (setq hasu (y-or-n-p "Does the parameters in this vector have a unit? ")) (cond (hasu (setq unit (read-from-minibuffer "Unit: " "GeV")) (setq stru (concat "*" unit))) (t (setq stru ""))) (setq size (read-from-minibuffer "Size of vector (varying if < 0): " "-1")) (setq defa (read-from-minibuffer "Default value: " (concat "1.0" stru))) (setq limlo (y-or-n-p "Is this parameter limited from below? ")) (cond (limlo (setq mini (read-from-minibuffer "Minimum value: " (concat "0.0" stru)))) (t (setq mini (concat "0" stru)))) (setq limup (y-or-n-p "Is this parameter limited from above? ")) (cond (limup (setq maxi (read-from-minibuffer "Maximum value: " (concat "10.0" stru)))) (t (setq maxi (concat "0" stru)))) (setq safe (y-or-n-p "Is this parameter vector dependency safe? ")) (setq ronl (y-or-n-p "Are the parameters read-only? ")) (insert-string (concat " static ParVector<" class "," type "> interface" name " (\"" name "\", \"" desc "\", " memb ", " (cond (hasu (concat unit ", "))(t "")) size ", " defa ", " mini ", " maxi ", " (cond (safe "true")(t "false")) ", " (cond (ronl "true")(t "false")) (cond ((and limup limlo) ", Interface::limited") (limup ", Interface::lowerlim") (limlo ", Interface::upperlim") (t ", Interface::nolimits")))) (cond ((y-or-n-p "Are there any set/get functions? ") (insert-string (concat ", " (thepeg-ifn "Set-function" (concat "&" class "::set" name) (concat "(void(" class "::*)(" type ",int))(0)")) ", " (thepeg-ifn "Insert-function: " (concat "&" class "::ins" name) (concat "(void(" class "::*)(" type ",int))(0)")) ", " (thepeg-ifn "Remove-function: " (concat "&" class "::del" name) (concat "(void(" class "::*)(int))(0)")) ", " (thepeg-ifn "Get-function: " (concat "&" class "::get" name) (concat "(vector<" type ">(" class "::*)()const)(0)")) ", " (thepeg-ifn "Default-function: " (concat "&" class "::def" name) (concat "(" type "(" class "::*)(int)const)(0)")) ", " (thepeg-ifn "Min-function: " (concat "&" class "::min" name) (concat "(" type "(" class "::*)(int)const)(0)")) ", " (thepeg-ifn "Max-function: " (concat "&" class "::max" name) (concat "(" type "(" class "::*)(int)const)(0)")) ", " (thepeg-ifn "Strin-get-function: " (concat "&" class "::max" name) (concat "(vector(" class "::*)()const)(0)")))))) (insert-string "); ")) (defun thepeg-ifn (desc def zero) (cond ((y-or-n-p (concat "Is there a " desc "?")) (read-from-minibuffer (concat desc ": ") def)) (t zero))); (defun ThePEG-reference () "Create a Reference variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Type: " "Interfaced")) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member variable: " (concat "&" class "::the" name))) (setq safe (y-or-n-p "Is this reference dependency safe? ")) (setq ronl (y-or-n-p "Is this reference read-only? ")) (setq rebi (y-or-n-p "Should this reference be automatically rebound? ")) (setq null (y-or-n-p "Can this reference be null? ")) (setq defn (y-or-n-p "Should this reference be given a default if null? ")) (insert-string (concat " static Reference<" class "," type "> interface" name " (\"" name "\", \"" desc "\", " memb ", " (cond (safe "true")(t "false")) ", " (cond (ronl "true")(t "false")) ", " (cond (rebi "true")(t "false")) ", " (cond (null "true")(t "false")) ", " (cond (defn "true")(t "false")))) (cond ((y-or-n-p "Are there any set/get functions? ") (insert-string (concat ", " (thepeg-ifn "Set-function: " (concat "&" class "::set" name) (concat "(void(" class "::*)(Ptr<" type ">::pointer))(0)")) ", " (thepeg-ifn "Get-function: " (concat "&" class "::get" name) (concat "(Ptr<" type ">::pointer(" class "::*)()const)(0)")) ", " (thepeg-ifn "Check-function: " (concat "&" class "::check" name) (concat "(bool(" class "::*)(Ptr<" type ">::const_pointer)const)(0)")))))) (insert-string "); ")) (defun ThePEG-refvector () "Create a RefVector variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Type: " "Interfaced")) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member variable: " (concat "&" class "::the" name))) (setq size (read-from-minibuffer "Size of vector (varying if < 0): " "-1")) (setq safe (y-or-n-p "Is this reference vector dependency safe? ")) (setq ronl (y-or-n-p "Is this reference vector read-only? ")) (setq rebi (y-or-n-p "Should the references in the vector be automatically rebound? ")) (setq null (y-or-n-p "Can the references in the vector be null? ")) (setq defn (y-or-n-p "Should the reference in the vector be given a default if null? ")) (insert-string (concat " static RefVector<" class "," type "> interface" name " (\"" name "\", \"" desc "\", " memb ", " size ", " (cond (safe "true")(t "false")) ", " (cond (ronl "true")(t "false")) ", " (cond (rebi "true")(t "false")) ", " (cond (null "true")(t "false")) ", " (cond (defn "true")(t "false")))) (cond ((y-or-n-p "Are there any set/get functions? ") (insert-string (concat ", " (thepeg-ifn "Set-function: " (concat "&" class "::set" name) (concat "(void(" class "::*)(Ptr<" type ">::pointer,int))(0)")) ", " (thepeg-ifn "Insert-function: " (concat "&" class "::ins" name) (concat "(void(" class "::*)(Ptr<" type ">::pointer,int))(0)")) ", " (thepeg-ifn "Remove-function: " (concat "&" class "::del" name) (concat "(void(" class "::*)(int))(0)")) ", " (thepeg-ifn "Get-function: " (concat "&" class "::get" name) (concat "(vector::pointer>(" class "::*)()const)(0)")) ", " (thepeg-ifn "Check-function: " (concat "&" class "::check" name) (concat "(bool(" class "::*)(Ptr<" type ">::const_pointer,int)const)(0)")))))) (insert-string "); ")) (defun thepeg-switch-option (switchname) "Create a SwitchOption variable suitable for inclusion in an Init() function." (cond ((y-or-n-p "Do you want to add an option? ") (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq valu (read-from-minibuffer "Value: ")) (insert-string (concat " static SwitchOption " switchname name " (" switchname ", \"" name "\", \"" desc "\", " valu ");")) (thepeg-switch-option switchname)) (t (insert-string " ")))) (defun ThePEG-switch () "Create a Switch variable suitable for inclusion in an Init() function." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Integer type: " "int")) (setq name (read-from-minibuffer "Name: ")) (setq desc (read-from-minibuffer "Description: ")) (setq memb (read-from-minibuffer "Member variable: " (concat "&" class "::the" name))) (setq defa (read-from-minibuffer "Default value: " "0")) (setq safe (y-or-n-p "Is this reference dependency safe? ")) (setq ronl (y-or-n-p "Is this reference read-only? ")) (insert-string (concat " static Switch<" class "," type "> interface" name " (\"" name "\", \"" desc "\", " memb ", " defa ", " (cond (safe "true")(t "false")) ", " (cond (ronl "true")(t "false")))) (cond ((y-or-n-p "Are there any set/get functions? ") (insert-string (concat ", " (thepeg-ifn "Set-function: " (concat "&" class "::set" name) (concat "(void(" class "::*)(" type "))(0)")) ", " (thepeg-ifn "Get-function: " (concat "&" class "::get" name) (concat "(" type "(" class "::*)()const)(0)")) ", " (thepeg-ifn "Default-function: " (concat "&" class "::def" name) (concat "(" type "(" class "::*)()const)(0)")))))) (insert-string ");") (thepeg-switch-option (concat "interface" name))) (defun ThePEG-comment-group () "Group a number of functions (or anything within the currently marked region) together to a common Doxygen section." (interactive) (setq desc (read-from-minibuffer "Description: ")) (save-excursion (goto-char (region-beginning)) (beginning-of-line) (cond ((string-equal desc "")) (t (insert-string (concat " /** @name " desc " */ ")))) (insert-string " //@{ ")) (save-excursion (goto-char (region-end)) (beginning-of-line) (insert-string " //@} "))) (defun ThePEG-cond-section () "Make a region of code a conditional section for doxygen." (interactive) (setq sect (read-from-minibuffer "Section: ")) (cond ((string-equal sect "") (setq sect "DEVELOPER"))) (save-excursion (goto-char (region-beginning)) (beginning-of-line) (insert-string (concat " /** @cond " sect " */ "))) (save-excursion (goto-char (region-end)) (insert-string " /** @endcond */ "))) (defun ThePEG-variable-cutnpaste () "Create code fragments for a variable declaration together with corresponding set and get functions, I/O functions and constructors." (interactive) (setq class (read-from-minibuffer "Class Name: " (file-name-sans-extension (file-name-nondirectory (buffer-file-name))))) (setq type (read-from-minibuffer "Type: " "double")) (setq name (read-from-minibuffer "Name (of access function): ")) (setq theName (concat (cond ((string-equal type "bool") "use") (t "the")) (upcase-initials name))) (setq theName (read-from-minibuffer "Name (of variable): " theName)) (setq desc (read-from-minibuffer "Description: ")) (setq unit (read-from-minibuffer "Unit: ")) (setq outname (cond ((string-equal unit "") theName) (t (concat "ounit(" theName ", " unit ")")))) (setq inname (cond ((string-equal unit "") theName) (t (concat "iunit(" theName ", " unit ")")))) (setq def (cond ((string-equal unit "") "0") (t (concat "0*" unit)))) (setq buf (get-buffer "*ThePEG-scratch*")) (setq win (cond (buf (get-buffer-window buf 'visible)) (t nil))) (setq getdesc (replace-regexp-in-string "^The" "Get the" desc t)) (setq setdesc (replace-regexp-in-string "^The" "Set the" desc t)) (cond (win (select-window win)) (t (switch-to-buffer-other-window "*ThePEG-scratch*"))) (c++-mode) (beginning-of-buffer) (insert-string (concat " /** * " desc " */ " type " " theName "; /** * " getdesc " */ inline " type " " name "() const { return " theName "; } /** * " setdesc " */ inline void " name "(" type " x) { " theName " = x; } " class "::" class "() : Base(), " theName "(" def ") {} " class "::" class "(const " class " & x) : Base(x), " theName "(x." theName ") {} void " class "::persistentOutput(PersistentOStream & os) const { os << " outname "; } void " class "::persistentInput(PersistentIStream & is, int) { is >> " inname "; } " )) (beginning-of-buffer)) (defun ThePEG-comment-function () "Insert a Doxygen comment block to preceed a function declaration." (interactive) (insert-string " /** * */ ")) (global-set-key "\C-c\C-f" 'ThePEG-comment-function) (define-generic-mode 'ThePEG-repository-mode ;; Comment characters '("#") ;; Language Keywords ;; codegrep 'verb == \"[[:alnum:]]*\"' -o \ ;; | cut -d: -f3 | cut -d\ -f3 | sort | uniq | column '( "appendpath" "library" "popd" "baseclasses" "load" "prependpath" "cd" "ls" "pushd" "check" "lsclass" "pwd" "cp" "lspaths" "rcp" "create" "lsruns" "read" "decaymode" "makeanti" "removerun" "def" "makerun" "rm" "defaultparticle" "max" "rmdir" "describe" "mdef" "rmgloballibrary" "describeclass" "mdo" "rmrun" "dirs" "merase" "rrmdir" "DISABLEREADONLY" "mget" "run" "do" "min" "save" "doxygendump" "minsert" "saverun" "ENABLEREADONLY" "mkdir" "saverunfile" "erase" "mmax" "send" "EXITONERROR" "mmin" "set" "fulldescribe" "msend" "setdef" "get" "mset" "setup" "globallibrary" "msetdef" "newdef" "insert" "mv" ) ;; Further Regex highlighting '( ;; anchored on "read" highlight the second pattern ("read" "[[:alnum:]]+\\.in" nil nil (0 'font-lock-string-face) ) ;; simplest pattern highlight ;;("[[:alnum:]]+\\.so" . 'font-lock-function-name-face) ("[[:alnum:]]+\\.so" . 'font-lock-type-face) ("\\([[:alnum:]]+::\\)+[[:alnum:]]+" . 'font-lock-type-face) (":\\([]_/[:alnum:]\\[]+\\)" . (1 'font-lock-constant-face) ) ;; highlight everything that isn't painted yet: 'keep' ("create.*" . (0 'font-lock-variable-name-face keep) ) ;;;;;;;;;; Directories in the repo ;; ("/[/[:alnum:]]+/" . 'font-lock-builtin-face ) ;; ("\\(rrm\\|rm\\|mk\\)dir.*\\|cd.*" ;; . (0 'font-lock-builtin-face keep) ) ;;;;;;;;;;;;;;;;;;;;; ) ;; file pattern to apply this mode to nil ;;'(".in\\'") nil "Major mode for editing ThePEG repository input files.") thepeg-1.8.0.orig/lib/Makefile.common.install.in0000644000175000017500000000304111747772425017714 0ustar sunsunTHEPEGLIB = @THEPEGLIB@ ifdef SHOWCOMMAND THEPEGLIBTOOL = $(THEPEGLIB)/libtool else THEPEGLIBTOOL = $(THEPEGLIB)/libtool --quiet endif THEPEGINCLUDE = @THEPEGINCLUDE@ AM_CXXFLAGS = @AM_CXXFLAGS@ CXX = @CXX@ CXXFLAGS = @CXXFLAGS@ LN_S = @LN_S@ CXXCOMPILE = $(THEPEGLIBTOOL) --tag=CXX --mode=compile $(CXX) -c $(CXXFLAGS) $(AM_CXXFLAGS) $(THEPEGINCLUDE) $(CLHEPINCLUDE) $(INCLUDES) CUR = 0 REV = 0 AGE = 0 VERS = $(CUR):$(REV):$(AGE) CXXLINK = $(THEPEGLIBTOOL) --tag=CXX --mode=link $(CXX) -rpath `pwd` all: $(OBJECTS) %.lo: %.cc ifdef SHOWCOMMAND $(CXXCOMPILE) -o $*.lo $< else @echo "compiling $@ ..." @$(CXXCOMPILE) -o $*.lo $< endif %.so: %.lo ifdef SHOWCOMMAND $(CXXLINK) -module -version-info $(VERS) -o $*.la $< for f in $@ $@.$(CUR) $@.$(CUR).$(REV).$(AGE); do \ rm -f $$f; if test -f .libs/$$f; then $(LN_S) .libs/$$f $$f; fi; done else @echo "linking $@ ..." @$(CXXLINK) -module -version-info $(VERS) -o $*.la $< @for f in $@ $@.$(CUR) $@.$(CUR).$(REV).$(AGE); do \ rm -f $$f; if test -f .libs/$$f; then $(LN_S) .libs/$$f $$f; fi; done endif lib%.so: ifdef SHOWCOMMAND $(CXXLINK) -module -version-info $(VERS) -o lib$*.la $^ for f in $@ $@.$(CUR) $@.$(CUR).$(REV).$(AGE); do \ rm -f $$f; if test -f .libs/$$f; then $(LN_S) .libs/$$f $$f; fi; done else @echo "linking $@ ..." @$(CXXLINK) -module -version-info $(VERS) -o lib$*.la $^ @for f in $@ $@.$(CUR) $@.$(CUR).$(REV).$(AGE); do \ rm -f $$f; if test -f .libs/$$f; then $(LN_S) .libs/$$f $$f; fi; done endif clean: rm -f *.lo *.la *.so* $(CLEANFILES) rm -rf .libs thepeg-1.8.0.orig/lib/Makefile.dist.install0000644000175000017500000000010111747772425016754 0ustar sunsunOBJECTS = CLEANFILES = include @THEPEGLIB@/Makefile.common thepeg-1.8.0.orig/lib/Makefile.in0000644000175000017500000005073411756366735014776 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.common.install.in $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = Makefile.common.install CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(pkgdatadir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) am__DEPENDENCIES_1 = libThePEG_la_DEPENDENCIES = \ $(top_builddir)/Utilities/libThePEGUtilities.la \ $(top_builddir)/Vectors/libThePEGVectors.la \ $(top_builddir)/Persistency/libThePEGPersistency.la \ $(top_builddir)/Pointer/libThePEGReferenceCounted.la \ $(top_builddir)/Config/libThePEGConfig.la \ $(top_builddir)/PDF/libThePEGPDF.la \ $(top_builddir)/MatrixElement/libThePEGME.la \ $(top_builddir)/Repository/libThePEGRepo.la \ $(top_builddir)/Handlers/libThePEGHandlers.la \ $(top_builddir)/EventRecord/libThePEGEvent.la \ $(top_builddir)/PDT/libThePEGPDT.la \ $(top_builddir)/StandardModel/libThePEGSM.la \ $(top_builddir)/Interface/libThePEGInter.la \ $(top_builddir)/Helicity/libThePEGHelicity.la \ $(top_builddir)/Cuts/libThePEGCuts.la \ $(top_builddir)/Analysis/libThePEGHist.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_libThePEG_la_OBJECTS = libThePEG_la_OBJECTS = $(am_libThePEG_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent libThePEG_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libThePEG_la_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CCLD = $(CC) AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEG_la_SOURCES) DIST_SOURCES = $(libThePEG_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ LINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LINKDIRS = Config Utilities Helicity Interface LesHouches Vectors \ PDT PDF Persistency Handlers MatrixElement Pointer ACDC \ StandardModel Repository EventRecord Cuts Analysis EXTRA_DIST = Makefile.dist.install dist_pkgdata_DATA = ThePEG.el pkglib_LTLIBRARIES = libThePEG.la CLEANFILES = Makefile.dist Makefile.common # Version info should be updated if any interface or persistent I/O # function is changed libThePEG_la_LDFLAGS = $(AM_LDFLAGS) $(LIBTOOLVERSIONINFO) -export-dynamic libThePEG_la_SOURCES = libThePEG_la_LIBADD = \ $(top_builddir)/Utilities/libThePEGUtilities.la \ $(top_builddir)/Vectors/libThePEGVectors.la \ $(top_builddir)/Persistency/libThePEGPersistency.la \ $(top_builddir)/Pointer/libThePEGReferenceCounted.la \ $(top_builddir)/Config/libThePEGConfig.la \ $(top_builddir)/PDF/libThePEGPDF.la \ $(top_builddir)/MatrixElement/libThePEGME.la \ $(top_builddir)/Repository/libThePEGRepo.la \ $(top_builddir)/Handlers/libThePEGHandlers.la \ $(top_builddir)/EventRecord/libThePEGEvent.la \ $(top_builddir)/PDT/libThePEGPDT.la \ $(top_builddir)/StandardModel/libThePEGSM.la \ $(top_builddir)/Interface/libThePEGInter.la \ $(top_builddir)/Helicity/libThePEGHelicity.la \ $(top_builddir)/Cuts/libThePEGCuts.la \ $(top_builddir)/Analysis/libThePEGHist.la \ -ldl $(LIBS) \ $(GSLLIBS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): Makefile.common.install: $(top_builddir)/config.status $(srcdir)/Makefile.common.install.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEG.la: $(libThePEG_la_OBJECTS) $(libThePEG_la_DEPENDENCIES) $(EXTRA_libThePEG_la_DEPENDENCIES) $(AM_V_CCLD)$(libThePEG_la_LINK) -rpath $(pkglibdir) $(libThePEG_la_OBJECTS) $(libThePEG_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) all-local installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA uninstall-local \ uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local clean-pkglibLTLIBRARIES distclean \ distclean-compile distclean-generic distclean-libtool distdir \ dvi dvi-am html html-am info info-am install install-am \ install-data install-data-am install-data-local \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkglibLTLIBRARIES install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-dist_pkgdataDATA uninstall-local \ uninstall-pkglibLTLIBRARIES all-local: done-all-links done-all-links: libThePEG.la @EMPTY@ifdef SHOWCOMMAND for dir in $(LINKDIRS); do \ for sofile in ../$$dir/.libs/*.so* ../$$dir/.libs/*.la; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done; done for sofile in .libs/*.so*; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "Sym-linking all shared libraries ..." @for dir in $(LINKDIRS); do \ for sofile in ../$$dir/.libs/*.so* ../$$dir/.libs/*.la; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done; done @for sofile in .libs/*.so*; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done @echo "stamp" > done-all-links @EMPTY@endif install-data-local: Makefile.common.install sed -e s:@THEPEGLIB@:$(DESTDIR)$(pkglibdir):g -e s:@THEPEGINCLUDE@:-I$(DESTDIR)$(includedir):g Makefile.common.install > Makefile.common sed -e s:@THEPEGLIB@:$(DESTDIR)$(pkglibdir):g $(srcdir)/Makefile.dist.install > Makefile.dist test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" $(INSTALL_DATA) Makefile.common $(DESTDIR)$(pkglibdir)/Makefile.common $(INSTALL_DATA) Makefile.dist $(DESTDIR)$(pkglibdir)/Makefile uninstall-local: rm -f $(DESTDIR)$(pkglibdir)/Makefile.common $(DESTDIR)$(pkglibdir)/Makefile clean-local: rm -f *.so* *.la *.rpo done-all-links # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/lib/Makefile.am0000644000175000017500000000553611747772425014762 0ustar sunsun## workaround for OS X, automake doesn't realize it's meant to use c++ LINK = $(LIBTOOL) --tag=CXX --mode=link $(CXX) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ LINKDIRS = Config Utilities Helicity Interface LesHouches Vectors \ PDT PDF Persistency Handlers MatrixElement Pointer ACDC \ StandardModel Repository EventRecord Cuts Analysis EXTRA_DIST = Makefile.dist.install dist_pkgdata_DATA = ThePEG.el pkglib_LTLIBRARIES = libThePEG.la CLEANFILES = Makefile.dist Makefile.common # Version info should be updated if any interface or persistent I/O # function is changed libThePEG_la_LDFLAGS = $(AM_LDFLAGS) $(LIBTOOLVERSIONINFO) -export-dynamic libThePEG_la_SOURCES = libThePEG_la_LIBADD = \ $(top_builddir)/Utilities/libThePEGUtilities.la \ $(top_builddir)/Vectors/libThePEGVectors.la \ $(top_builddir)/Persistency/libThePEGPersistency.la \ $(top_builddir)/Pointer/libThePEGReferenceCounted.la \ $(top_builddir)/Config/libThePEGConfig.la \ $(top_builddir)/PDF/libThePEGPDF.la \ $(top_builddir)/MatrixElement/libThePEGME.la \ $(top_builddir)/Repository/libThePEGRepo.la \ $(top_builddir)/Handlers/libThePEGHandlers.la \ $(top_builddir)/EventRecord/libThePEGEvent.la \ $(top_builddir)/PDT/libThePEGPDT.la \ $(top_builddir)/StandardModel/libThePEGSM.la \ $(top_builddir)/Interface/libThePEGInter.la \ $(top_builddir)/Helicity/libThePEGHelicity.la \ $(top_builddir)/Cuts/libThePEGCuts.la \ $(top_builddir)/Analysis/libThePEGHist.la \ -ldl $(LIBS) \ $(GSLLIBS) all-local: done-all-links done-all-links: libThePEG.la @EMPTY@ifdef SHOWCOMMAND for dir in $(LINKDIRS); do \ for sofile in ../$$dir/.libs/*.so* ../$$dir/.libs/*.la; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done; done for sofile in .libs/*.so*; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "Sym-linking all shared libraries ..." @for dir in $(LINKDIRS); do \ for sofile in ../$$dir/.libs/*.so* ../$$dir/.libs/*.la; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done; done @for sofile in .libs/*.so*; \ do if test -f $$sofile; then $(LN_S) -f $$sofile .; fi; done @echo "stamp" > done-all-links @EMPTY@endif install-data-local: Makefile.common.install sed -e s:@THEPEGLIB@:$(DESTDIR)$(pkglibdir):g -e s:@THEPEGINCLUDE@:-I$(DESTDIR)$(includedir):g Makefile.common.install > Makefile.common sed -e s:@THEPEGLIB@:$(DESTDIR)$(pkglibdir):g $(srcdir)/Makefile.dist.install > Makefile.dist test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" $(INSTALL_DATA) Makefile.common $(DESTDIR)$(pkglibdir)/Makefile.common $(INSTALL_DATA) Makefile.dist $(DESTDIR)$(pkglibdir)/Makefile uninstall-local: rm -f $(DESTDIR)$(pkglibdir)/Makefile.common $(DESTDIR)$(pkglibdir)/Makefile clean-local: rm -f *.so* *.la *.rpo done-all-links thepeg-1.8.0.orig/Persistency/0000755000175000017500000000000011756460366014455 5ustar sunsunthepeg-1.8.0.orig/Persistency/PersistentIStream.h0000644000175000017500000003713511754473707020265 0ustar sunsun// -*- C++ -*- // // PersistentIStream.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PersistentIStream_H #define ThePEG_PersistentIStream_H // This is the declaration of the PersistentIStream class. #include "ThePEG/Config/ThePEG.h" #include "InputDescription.h" #include "PersistentIStream.fh" #include "ThePEG/Utilities/Exception.h" #include namespace ThePEG { /** @ingroup Persistency * PersistentIStream is used to read persistent objects from a stream * where they were previously written using PersistentOStream. Basic * types and pointers to objects derived from * PersistentBase should be read in the same order they * were written out. If pedantic() is true the same * classes that were written out must be present in the current * program. If pedantic() is false and if an object is * read for which only a base class is present in the current program, * only the parts corresponding to the base class will be read, and * the rest will be gracefully skipped. * * Each base class of a given object will be asked to read its * members from the stream starting from the least derived class going to * the most derived one. Members may be pointers to other persistent * objects or basic types or containers of these. The output for each * object part should be implemented by specializing the * ClassTraits::input method, which otherwise * will call the non-virtual persistentInput function of * the class. Note that for diamond-shaped multiple inheritance * structures, the virtual base classes will be written out several * times for the same object. * * @see PersistentOStream * @see ClassTraits */ class PersistentIStream { public: ThePEG_DECLARE_POINTERS(PersistentBase,BPtr); /** A vector of pointers to persistent objects */ typedef vector ObjectVector; /** A vector of bare pointers to InputDescription objects. */ typedef InputDescription::DescriptionVector DescriptionVector; public: /** * Constuctor giving an input stream to be used as an underlying * istream. If keepid is true, the order in which the original * objects were created will be kept. */ PersistentIStream(istream & is, bool keepid = false) : theIStream(&is), isPedantic(true), allocStream(false), badState(false), keepId(keepid) { init(); } /** * Constuctor giving a file name to read from. If the first * character in the string is a '|', the corresponding program is * run and its standard output is used instead. If the filename ends * in ".gz" the file is uncompressed with gzip. If keepid is true, * the order in which the original objects were created will be * kept. */ PersistentIStream(string, bool keepid = false); /** * The destructor. */ ~PersistentIStream(); /** * Operator for extracting persistent objects from the stream. * @param ptr this pointer will refer to the extracted object. * @return a reference to the stream. */ template PersistentIStream & operator>>(RCPtr & ptr) { BPtr b = getObject(); ptr = dynamic_ptr_cast< RCPtr >(b); if ( b && !ptr ) setBadState(); return *this; } /** * Operator for extracting persistent objects from the stream. * @param ptr this pointer will refer to the extracted object. * @return a reference to the stream. */ template PersistentIStream & operator>>(ConstRCPtr & ptr) { BPtr b = getObject(); ptr = dynamic_ptr_cast< ConstRCPtr >(b); if ( b && !ptr ) setBadState(); return *this; } /** * Operator for extracting persistent objects from the stream. * @param ptr this pointer will refer to the extracted object. * @return a reference to the stream. */ template PersistentIStream & operator>>(TransientRCPtr & ptr) { BPtr b = getObject(); ptr = dynamic_ptr_cast< TransientRCPtr >(b); if ( b && !ptr ) setBadState(); return *this; } /** * Operator for extracting persistent objects from the stream. * @param ptr this pointer will refer to the extracted object. * @return a reference to the stream. */ template PersistentIStream & operator>>(TransientConstRCPtr & ptr) { BPtr b = getObject(); ptr = dynamic_ptr_cast< TransientConstRCPtr >(b); if ( b && !ptr ) setBadState(); return *this; } /** @name Operators for extracting built-in types from the stream. */ //@{ /** * Read a character string. */ PersistentIStream & operator>>(string &); /** * Read a character. */ PersistentIStream & operator>>(char &); /** * Read a signed character. */ PersistentIStream & operator>>(signed char &); /** * Read an unsigned character. */ PersistentIStream & operator>>(unsigned char &); /** * Read an integer. */ PersistentIStream & operator>>(int & i) { is() >> i; getSep(); return *this; } /** * Read an unsigned integer. */ PersistentIStream & operator>>(unsigned int & i) { is() >> i; getSep(); return *this; } /** * Read a long integer. */ PersistentIStream & operator>>(long & i) { is() >> i; getSep(); return *this; } /** * Read an unsigned long integer. */ PersistentIStream & operator>>(unsigned long & i) { is() >> i; getSep(); return *this; } /** * Read a short integer. */ PersistentIStream & operator>>(short & i) { is() >> i; getSep(); return *this; } /** * Read an unsigned short integer. */ PersistentIStream & operator>>(unsigned short & i) { is() >> i; getSep(); return *this; } /** * Read a double. */ PersistentIStream & operator>>(double & d) { is() >> d; getSep(); return *this; } /** * Read a float. */ PersistentIStream & operator>>(float & f) { is() >> f; getSep(); return *this; } /** * Read a bool. */ PersistentIStream & operator>>(bool &); /** * Read a Complex. */ PersistentIStream & operator>>(Complex &); //@} /** * Intput of containers streamable objects. * @param c the container into which objects are added. */ template void getContainer(Container & c) { long size; typename Container::value_type val; c.clear(); *this >> size; while ( size-- && good() ) { *this >> val; c.insert(c.end(), val); } } /** * Read in an object. Create an object and read its data from the * stream. * @return a pointer to the read object. */ BPtr getObject(); /** * For a given object, read the member variables corresponding to a * given InputDescription object. * @param obj the object to be read into. * @param pid a pointer to an InputDescription describing the * (sub)class to be read. */ void getObjectPart(tBPtr obj, const InputDescription * pid); /** * Read a class description from the underlying stream and return a * corresponding InputDescription object */ const InputDescription * getClass(); /** * Set pedantic mode. If the stream is set to be tolerant it is * allowed to read an object from the stream even if the * corresponding class is not known to the running executable, under * the condition that a public base class of the unknown class is * known. If the stream is set to be pedantic this is not allowed. * By default, the stream is pedantic. */ PersistentIStream & setPedantic() { isPedantic = true; return *this; } /** * Set tolerant mode. If the stream is set to be tolerant it is * allowed to read an object from the stream even if the * corresponding class is not known to the running executable, under * the condition that a public base class of the unknown class is * known. If the stream is set to be pedantic this is not allowed. * By default, the stream is pedantic. */ PersistentIStream & setTolerant() { isPedantic = false; return *this; } /** * Check the state of the stream. */ bool good() const { return !badState && is(); } /** * Check the state of the stream. */ bool operator!() const { return !good(); } /** * Check the state of the stream. */ operator bool() const { return good(); } /** * Check the tolerance. Returns true if setPedantic() has been * called or if not setTolerant() has been called. */ bool pedantic() const { return isPedantic; } /** * The global libraries loaded on initialization. */ const vector & globalLibraries() const { return theGlobalLibraries; } private: /** @cond EXCEPTIONCLASSES */ /** @ingroup Persistency Thrown if a class is missing */ struct MissingClass: public Exception {}; /** @ingroup Persistency Thrown if an object which should have been read in is missing. */ struct MissingObject: public Exception {}; /** @ingroup Persistency Thrown if reading from the stream failed for some reason. */ struct ReadFailure: public Exception {}; /** @endcond */ /** * Internal initialization. */ void init(); /** * Get the next character from the associated istream. */ char get() { return is().get(); } /** * Get the next character from the associated istream and decode it * if it is escaped. */ char escaped() { char c = get(); return c == tNoSep? tSep: c; } /** * Set the stream in a bad state */ void setBadState() { breakThePEG(); badState = true; } /** * Read a field separator from the stream. */ void getSep() { if ( !pedantic() ) skipField(); else if ( get() != tSep ) setBadState(); } /** * Scan the stream for the next field separator. */ void skipField() { is().ignore(INT_MAX, tSep); if ( !is() ) setBadState(); } /** * Check if the next char to be read is a tBegin marker. */ bool beginObject() { return is().peek() == tBegin; } /** * Scan the stream to the end of the current object. If any new object are * found these are read prom the stream to ensure that the pointer structure * is preserved. */ void endObject(); /** * Scan stream for "end base class" marker. The \a classname is the * name of the class currently being read and is only used for * documenting exceptions. */ void endBase(string classname); /** * Return a reference to the associated stream. */ istream & is() { return *theIStream; } /** * Return a const reference to the associated stream. */ const istream & is() const { return *theIStream; } /** * Lists of objects that have been read. */ ObjectVector readObjects; /** * Lists of classes and corresponding version strings that have been read. */ DescriptionVector readClasses; /** * A pointer to the associated istream. */ istream * theIStream; /** * Pedantic or tolerant. See description of the setPedantic() and * setTolerant() methods. */ bool isPedantic; /** * True if the associated istream should be deleted when the PersistentIStream * is destroyed. */ bool allocStream; /** * False if no errors has occurred. */ bool badState; /** Version number of the PersistentOStream which has written the * file being read. */ int version; /** Subversion number of the PersistentOStream which has written the * file being read. */ int subVersion; /** * If keepId is true, the order in which the original * objects were created will be kept. */ bool keepId; /** * Global libraries loaded in the initialization. */ vector theGlobalLibraries; /** @name Special marker characters */ //@{ /** * The special marker character indicating the beginning of an object. */ static const char tBegin = '{'; /** * The special marker character indicating the end of an object. */ static const char tEnd = '}'; /** * The marker character indicating the beginning of the next base * class in case of multiple inheritance. */ static const char tNext = '|'; /** * The special marker character indicating an escaped marker character. */ static const char tNull = '\\'; /** * The special marker character indicating the end of a value. */ static const char tSep = '\n'; /** * The special marker character used to avoid confusion with escaped * tSep markers. */ static const char tNoSep = 'n'; /** * The special marker character indicating a true boolean value. */ static const char tYes = 'y'; /** * The special marker character indicating a false boolean value. */ static const char tNo = 'n'; //@} private: /** * Standard ctors and assignment are private and not implemented. */ PersistentIStream(); /** * Standard ctors and assignment are private and not implemented. */ PersistentIStream(const PersistentIStream &); /** * Standard ctors and assignment are private and not implemented. */ PersistentIStream & operator=(const PersistentIStream &); }; /** * Operator for applying manipulators to the stream. */ inline PersistentIStream & operator>>(PersistentIStream & is, PersistentIManip func) { return (*func)(is); } /** * The manipulator for setting pedantic mode. */ inline PersistentIStream & pedantic(PersistentIStream & is) { return is.setPedantic(); } /** * The manipulator for setting tolerant mode. */ inline PersistentIStream & tolerant(PersistentIStream & is) { return is.setTolerant(); } /** * @name Partial specializations of operator>> for input of * std::containers. */ //@{ /** Input a pair of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, pair & p) { return is >> p.first >> p.second; } /** Input a map of key/objects pairs. */ template inline PersistentIStream & operator>>(PersistentIStream & is, map & m) { m.clear(); long size; Key k; is >> size; while ( size-- && is ) { is >> k; is >> m[k]; } return is; } /** Input a multimap of key/objects pairs. */ template inline PersistentIStream & operator>>(PersistentIStream & is, multimap & m) { m.clear(); long size; Key k; T t; is >> size; while ( size-- && is ) { is >> k; is >> t; m.insert(make_pair(k, t)); } return is; } /** Input a set of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, set & s) { is.getContainer(s); return is; } /** Input a multoset of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, multiset & s) { is.getContainer(s); return is; } /** Input a list of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, list & l) { is.getContainer(l); return is; } /** Input a vector of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, vector & v) { is.getContainer(v); return is; } /** Input a deque of objects. */ template inline PersistentIStream & operator>>(PersistentIStream & is, deque & d) { is.getContainer(d); return is; } } #endif /* ThePEG_PersistentIStream_H */ thepeg-1.8.0.orig/Persistency/PersistentIStream.cc0000644000175000017500000002172411747772425020421 0ustar sunsun// -*- C++ -*- // // PersistentIStream.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PersistentIStream class. // #include "PersistentIStream.h" #include "PersistentOStream.xh" #include "PersistentIStream.xh" #include "ThePEG/Utilities/DynamicLoader.h" #include "ThePEG/Utilities/Debug.h" namespace ThePEG { PersistentIStream::PersistentIStream(string file, bool keepid) : theIStream(0), isPedantic(true), allocStream(true), badState(false), keepId(keepid) { // if ( file[0] == '|' ) // theIStream = new ipfstream(file.substr(1).c_str()); // else if ( file.substr(file.length()-3, file.length()) == ".gz" ) // theIStream = new ipfstream(string("gzip -d -c " + file).c_str()); // else theIStream = new ifstream(file.c_str()); if ( theIStream ) { init(); } else setBadState(); } void PersistentIStream::init() { string tag; operator>>(tag); if ( tag != "ThePEG version 1 Database" ) setBadState(); operator>>(version); operator>>(subVersion); if ( version > 0 || subVersion > 0 ) { vector paths; *this >> paths; for ( int i = 0, N = paths.size(); i < N; ++i ) DynamicLoader::appendPath(paths[i]); *this >> paths; for ( int i = 0, N = paths.size(); i < N; ++i ) DynamicLoader::prependPath(paths[i]); } if ( version > 0 || subVersion > 1 ) { *this >> theGlobalLibraries; string loaderror; for ( int i = 0, N = theGlobalLibraries.size(); i < N; ++i ) { istringstream is(theGlobalLibraries[i]); string library; while ( is >> library ) { DynamicLoader::load(library); loaderror += DynamicLoader::lastErrorMessage; } } if ( !loaderror.empty() ) loaderror = "\nerror message from dynamic loader:\n" + loaderror; } } PersistentIStream::~PersistentIStream() { if ( allocStream ) delete theIStream; for ( int i = 0, N = readClasses.size(); i < N; ++i ) delete readClasses[i]; } void PersistentIStream::endObject() { // We have just read an object, but we may only have acces to a base class // of the originally written object. Therefore we must skip everything that // the unknown derived class may have written. So we check one field at // the time... while ( good() ) { switch ( is().peek() ) { case tEnd: // OK we found the end of the object, let's quit get(); return; case tBegin: // it seems there is an object next on the stream. We read it in and // add it to the list of orphans getObject(); break; case tSep: case tNext: // This was a field separator, check next char; get(); break; default: // Just an ordinary character, this means we are in a field, // skip to the end of the field. skipField(); } }; } void PersistentIStream::endBase(string classname) { // We have just read an object part, but we may only have acces to a // base class of the originally written object. Therefore we must // skip everything that the unknown derived class may have // written. So we check one field at the time... if ( is().peek() != tNext && pedantic() ) throw ReadFailure() << "PersistentIStream could not read an object of class '" << classname << "'. The file may be corrupted, or the class could not be found. The " << "base class was found, however, and if the PersistentIStream is " << "'setTolerant()' it may still be possible to read the part of the " << "object corresponding to this base class." << Exception::runerror; while ( good() ) { switch ( is().peek() ) { case tNext: // This is what we are looking for. get(); return; case tSep: // This was a field separator, check next char; get(); break; case tBegin: // it seems there is an object next on the stream. We read it in and // add it to the list of orphans getObject(); break; case tEnd: // OOPS we found the end of an object, something went wrong, let's quit throw ReadFailure() << "PersistentIStream could not read an object of class '" << classname << "'. Maybe the file was written with another version " << "of the class." << Exception::runerror; default: // Just an ordinary character, this means we are in a field, // skip to the end of the field. skipField(); } } } PersistentIStream::BPtr PersistentIStream::getObject() { BPtr obj; if ( !good() ) return obj; ObjectVector::size_type oid; const InputDescription * pid = 0; try { if ( !beginObject() ) { *this >> oid; if ( !oid ) return obj; if ( oid <= readObjects.size() ) return readObjects[oid-1]; throw MissingObject() << "PersistentIStream could not find object number " << oid << " which should have already been read." << Exception::runerror; } get(); *this >> oid; if ( oid > readObjects.size() + 1 ) throw MissingObject() << "PersistentIStream could not read in object because its number (" << oid << ") was inconsistent." << Exception::runerror; pid = getClass(); unsigned long uid = ReferenceCounted::objectCounter + 1; if ( version > 0 || subVersion >= 3 ) *this >> uid; unsigned long saveid = ReferenceCounted::objectCounter; if ( keepId ) ReferenceCounted::objectCounter = uid - 1; obj = pid->create(); if ( keepId ) ReferenceCounted::objectCounter = max(saveid, uid); readObjects.erase(readObjects.begin() + (oid - 1), readObjects.end()); readObjects.push_back(obj); getObjectPart(obj, pid); endObject(); if ( badState && Debug::level ) throw ReadFailure() << "PersistentIStream failed to read in object number " << oid << " of class " << pid->name() << "." << Exception::runerror; return obj; } catch ( Exception & e ) { if ( pedantic() || Debug::level ) { e.handle(); string classname = ""; if ( pid ) classname = pid->name(); throw ReadFailure() << "While reading object number " << oid << " of class " << classname << ":\n" << e.message() << Exception::runerror; } setBadState(); return obj; } catch (...) { setBadState(); if ( pedantic() ) throw; return obj; } } void PersistentIStream:: getObjectPart(tBPtr obj, const InputDescription * pid) { DescriptionVector::const_iterator bit = pid->descriptions().begin(); while ( bit != pid->descriptions().end() ) { getObjectPart(obj, *bit++); endBase(pid->name()); } pid->input(obj, *this); } const InputDescription * PersistentIStream::getClass() { unsigned int cid; operator>>(cid); if ( cid < readClasses.size() ) return readClasses[cid]; string className; operator>>(className); if ( cid != readClasses.size() ) throw MissingClass() << "PersistentIStream could not read info on class '" << className << "' because its number (" << cid << ") was inconsistent." << Exception::runerror; int version; string libraries; operator>>(version); operator>>(libraries); InputDescription * id = new InputDescription(className, version); readClasses.push_back(id); int nBase; operator>>(nBase); while ( nBase-- ) id->addBaseClass(getClass()); const ClassDescriptionBase * db = DescriptionList::find(className); string loaderror; if ( !db && libraries.length() ) { istringstream is(libraries); string library; while ( is >> library ) { DynamicLoader::load(library); loaderror += DynamicLoader::lastErrorMessage; } if ( !loaderror.empty() ) loaderror = "\nerror message from dynamic loader:\n" + loaderror; } db = DescriptionList::find(className); if ( pedantic() && !db ) throw MissingClass() << "PersistentIStream could not find the class '" << className << "'." << loaderror << Exception::runerror; id->setDescription(db); return id; } PersistentIStream & PersistentIStream::operator>>(string & s) { s.erase(); char c = 0; while ( good() && (c = get()) != tSep ) { if ( c == tNull ) s += escaped(); else s += c; } return *this; } PersistentIStream & PersistentIStream::operator>>(char & c) { if ( (c = get()) == tNull ) c = escaped(); getSep(); return *this; } PersistentIStream & PersistentIStream::operator>>(unsigned char & c) { char cc; *this >> cc; c = static_cast(cc); return *this; } PersistentIStream & PersistentIStream::operator>>(signed char & c) { char cc; *this >> cc; c = static_cast(cc); return *this; } PersistentIStream & PersistentIStream::operator>>(bool & t) { char c = get(); t = ( c == tYes ); if ( !t && c != tNo ) setBadState(); getSep(); return *this; } PersistentIStream & PersistentIStream::operator>>(Complex & z) { double re = 0.0; double im = 0.0; *this >> re >> im; z = Complex(re, im); return *this; } } thepeg-1.8.0.orig/Persistency/PersistentOStream.cc0000644000175000017500000001160011754473707020416 0ustar sunsun// -*- C++ -*- // // PersistentOStream.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PersistentOStream class. // #include "PersistentOStream.h" #include "ThePEG/Utilities/DynamicLoader.h" #include namespace ThePEG { PersistentOStream::PersistentOStream(ostream & os, const vector & libs) : theOStream(&os), badState(false), allocStream(false) { init(libs); } PersistentOStream::PersistentOStream(string file, const vector & libs) : badState(false), allocStream(true) { // if ( file[0] == '|' ) // theOStream = new opfstream(file.substr(1).c_str()); // else if ( file.substr(file.length()-3, file.length()) == ".gz" ) // theOStream = new opfstream(string("gzip > " + file).c_str()); // else theOStream = new ofstream(file.c_str()); if ( theOStream ) init(libs); else setBadState(); } void PersistentOStream::init(const vector & libs) { operator<<(string("ThePEG version 1 Database")); operator<<(version); operator<<(subVersion); *this << DynamicLoader::appendedPaths(); *this << DynamicLoader::prependedPaths(); vector libraries; for ( int i = 0, N = libs.size(); i < N; ++i ) libraries.push_back(DynamicLoader::dlnameversion(libs[i])); *this << libraries; } PersistentOStream::~PersistentOStream() { if ( allocStream ) delete theOStream; } void PersistentOStream:: putObjectPart(tcBPtr obj, const ClassDescriptionBase * db) { ClassDescriptionBase::DescriptionVector::const_iterator bit = db->descriptions().begin(); while ( bit != db->descriptions().end() ) { putObjectPart(obj, *bit++); endBase(); } db->output(obj, *this); } PersistentOStream & PersistentOStream::outputPointer(tcBPtr obj) { if ( !good() ) return *this; if ( !obj ) return operator<<(0); // It it's the null pointer, just print a zero. int oid = 0; const ClassDescriptionBase * desc = 0; try { // Check if the object has been written before. In that case just write // out it's number ObjectMap::const_iterator oit = writtenObjects.find(obj); if ( oit != writtenObjects.end() ) { *this << oit->second; return *this; } // This object hasn't been written before so we write it out, beginning // with a number, then the class information, and finally let it write // itself on the stream. beginObject(); oid = writtenObjects.size()+1; writtenObjects[obj] = oid; *this << oid; desc = writeClassId(obj); *this << obj->uniqueId; putObjectPart(obj, desc); endObject(); } catch (Exception & e) { e.handle(); string classname = ""; if ( desc ) classname = desc->name(); throw WriteError() << "While writing object number " << oid << " of class " << classname << ":\n" << e.message() << Exception::runerror; setBadState(); } catch (...) { setBadState(); } checkState(); return *this; } const ClassDescriptionBase * PersistentOStream::writeClassId(tcBPtr obj) { const ClassDescriptionBase * db = DescriptionList::find(typeid(*obj)); if ( !db ) { throw MissingClass() << "PersistentOStream could not find the ClassDescription object " << "corresponding to the class " << typeid(*obj).name() << ". Please check that the class has a properly instantiated " << "ClassDescription object." << Exception::runerror; } writeClassDescription(db); return db; } void PersistentOStream:: writeClassDescription(const ClassDescriptionBase * db) { // If objects of this class has been written out before, just write // the corresponding number ClassMap::iterator cit = writtenClasses.find(db); if ( cit != writtenClasses.end() ) { operator<<(cit->second); return; } // This class hasn't been written before, so append it to the list of // written classes and assign a number to it, before writing the string // containing the information int cid = writtenClasses.size(); writtenClasses[db] = cid; operator<<(cid); operator<<(db->name()); operator<<(db->version()); operator<<(DynamicLoader::dlnameversion(db->library())); // Now write its base classes or a zero if the base class is PersistentBase. operator<<(db->descriptions().size()); DescriptionVector::const_iterator bit = db->descriptions().begin(); while ( bit != db->descriptions().end() ) writeClassDescription(*bit++); } PersistentOStream & PersistentOStream::flush() { ObjectMap::iterator it = writtenObjects.begin(); while ( it != writtenObjects.end() ) { ObjectMap::iterator it2 = it++; if ( (*it2).second > lastSavedObject.top() ) writtenObjects.erase(it2); } os().flush(); return *this; } } thepeg-1.8.0.orig/Persistency/PersistentOStream.xh0000644000175000017500000000106611747772425020456 0ustar sunsun// -*- C++ -*- // // PersistentOStream.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PersistentOStream_XH #define ThePEG_PersistentOStream_XH // // This is the declarations of the exception classes used by the // PersistentOStream class. // #include "PersistentOStream.fh" namespace ThePEG { } #endif /* ThePEG_PersistentOStream_XH */ thepeg-1.8.0.orig/Persistency/InputDescription.h0000644000175000017500000000576011747772425020143 0ustar sunsun// -*- C++ -*- // // InputDescription.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_InputDescription_H #define ThePEG_InputDescription_H // This is the declaration of the InputDescription class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/ClassDescription.h" namespace ThePEG { /** @ingroup Persistency * InputDescription objects are used by the PersistentIStream class to * keep track of all classes it has read from a stream. It keeps a * pointer to the corresponding ClassDescription in case the class * read in was actually present in the current program, a version * number of the read class which may be different from the class * present in the current program and a list of base class * InputDescriptions. * * @see PersistentIStream * @see Named * @see ClassDescription */ class InputDescription: public Named { public: /** A vector of pointers to InputDescription objects. */ typedef vector DescriptionVector; ThePEG_DECLARE_POINTERS(PersistentBase,BPtr); public: /** * The standard constructor. * @param newName the name of the class being read. * @param newVersion the version number of the class when written. */ InputDescription(string newName, int newVersion) : Named(newName), theDescription(0), theVersion(newVersion) {} /** * Set the ClassDescriptionBase object of the class being read. */ void setDescription(const ClassDescriptionBase * cd) { theDescription = cd; } /** * Add a base class description. */ void addBaseClass(const InputDescription * newBase) { theBaseClasses.push_back(newBase); } /** * Return the list of base class descriptions. */ const DescriptionVector & descriptions() const { return theBaseClasses; } /** * Create an object of the corresponding class. */ BPtr create() const { if ( theDescription ) return theDescription->create(); DescriptionVector::const_iterator dit = theBaseClasses.begin(); while ( dit != theBaseClasses.end() ) { BPtr obj = (*dit++)->create(); if ( obj ) return obj; } return BPtr(); } /** * Read an object part of the corresponding class from a stream. * Will only read the part of the object corresponding to the * members of the class represented by this object. */ void input(tBPtr b, PersistentIStream & is) const { if ( theDescription ) theDescription->input(b, is, theVersion); } private: /** * The list of base class descriptions. */ DescriptionVector theBaseClasses; /** * The description of the corresponding class in the current * program. */ const ClassDescriptionBase * theDescription; /** * The version of the class to be read. */ int theVersion; }; } #endif /* ThePEG_InputDescription_H */ thepeg-1.8.0.orig/Persistency/PersistentIStream.xh0000644000175000017500000000106611747772425020450 0ustar sunsun// -*- C++ -*- // // PersistentIStream.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PersistentIStream_XH #define ThePEG_PersistentIStream_XH // // This is the declarations of the exception classes used by the // PersistentIStream class. // #include "PersistentIStream.fh" namespace ThePEG { } #endif /* ThePEG_PersistentIStream_XH */ thepeg-1.8.0.orig/Persistency/Makefile.in0000644000175000017500000004461311756366734016536 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Persistency ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGPersistency_la_LIBADD = am__objects_1 = PersistentOStream.lo PersistentIStream.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGPersistency_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGPersistency_la_OBJECTS = \ $(am_libThePEGPersistency_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGPersistency_la_SOURCES) DIST_SOURCES = $(libThePEGPersistency_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = PersistentOStream.cc PersistentIStream.cc DOCFILES = InputDescription.h PersistentIStream.h PersistentOStream.h INCLUDEFILES = $(DOCFILES) PersistentIStream.fh PersistentIStream.xh \ PersistentOStream.fh PersistentOStream.xh noinst_LTLIBRARIES = libThePEGPersistency.la libThePEGPersistency_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Persistency/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Persistency/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGPersistency.la: $(libThePEGPersistency_la_OBJECTS) $(libThePEGPersistency_la_DEPENDENCIES) $(EXTRA_libThePEGPersistency_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGPersistency_la_OBJECTS) $(libThePEGPersistency_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PersistentIStream.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PersistentOStream.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Persistency/PersistentIStream.fh0000644000175000017500000000055711747772425020432 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_PersistentIStream_FH #define ThePEG_PersistentIStream_FH // // This is the forward declaration of the PersistentIStream class. // namespace ThePEG { class PersistentIStream; /** Defines a manipulator function type */ typedef PersistentIStream & (* PersistentIManip) (PersistentIStream &); } #endif /* ThePEG_PersistentIStream_FH */ thepeg-1.8.0.orig/Persistency/PersistentOStream.fh0000644000175000017500000000055711747772425020440 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_PersistentOStream_FH #define ThePEG_PersistentOStream_FH // // This is the forward declaration of the PersistentOStream class. // namespace ThePEG { class PersistentOStream; /** Defines a manipulator function type */ typedef PersistentOStream & (* PersistentOManip) (PersistentOStream &); } #endif /* ThePEG_PersistentOStream_FH */ thepeg-1.8.0.orig/Persistency/PersistentOStream.h0000644000175000017500000003610411754473707020266 0ustar sunsun// -*- C++ -*- // // PersistentOStream.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PersistentOStream_H #define ThePEG_PersistentOStream_H // This is the declaration of the PersistentOStream class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Utilities/Debug.h" #include "PersistentOStream.fh" #include "PersistentOStream.xh" namespace ThePEG { /** @ingroup Persistency * PersistentOStream is used to write objects persistently * to a stream from which they can be read in again with a * PersistentIStream. Pointers to objects of classes * derived from PersistentBase may be written out if a * static ClassDescription object is present for the * class. Also basic types may be written to the stream, as well as * containers of pointers to persistent objects and basic types. * * The PersistentOStream keeps a list of all pointers to * written persistent objects, so that if several pointers to the * smame object is written, the object will only be written once. * * Each base class of a given object will be asked to write its * members to the stream starting from the least derived class going to * the most derived one. Members may be pointers to other persistent * objects or basic types or containers of these. The output for each * object part should be implemented by specializing the * ClassTraits::output method, which otherwise * will call the non-virtual persistentOutput function of * the class. Note that for diamond-shaped multiple inheritance * structures, the virtual base classes will be written out several * times for the same object. * * @see PersistentIStream * @see ClassDescription * @see ClassTraits */ class PersistentOStream { public: ThePEG_DECLARE_POINTERS(PersistentBase,BPtr); /** A map of objects indexed by integers */ ThePEG_DECLARE_MAP(cBPtr, int, ObjectMap); /** A map relating class descriptions to integers. */ ThePEG_DECLARE_MAP(const ClassDescriptionBase *, int, ClassMap); /** A vector of bare pointers to InputDescription objects. */ typedef ClassDescriptionBase::DescriptionVector DescriptionVector; public: /** * Constuctor giving an output stream. Optionally a vector of * libraries to be loaded before the resulting file can be read in * again can be given in \a libs. */ PersistentOStream(ostream &, const vector & libs = vector()); /** * Constuctor giving a file name to read. If the first * character in the string is a '|', the corresponding program is * run and its standard input is used instead. If the filename ends * in ".gz" the file is compressed with gzip. Optionally a vector of * libraries to be loaded before the resulting file can be read in * again can be given in \a libs. */ PersistentOStream(string, const vector & libs = vector()); /** * The destructor */ ~PersistentOStream(); /** * Operator for writing persistent objects to the stream. * @param p a pointer to the object to be written. * @return a reference to the stream. */ template PersistentOStream & operator<<(const RCPtr & p) { return outputPointer(p); } /** * Operator for writing persistent objects to the stream. * @param p a pointer to the object to be written. * @return a reference to the stream. */ template PersistentOStream & operator<<(const ConstRCPtr & p) { return outputPointer(p); } /** * Operator for writing persistent objects to the stream. * @param p a pointer to the object to be written. * @return a reference to the stream. */ template PersistentOStream & operator<<(const TransientRCPtr & p) { return outputPointer(p); } /** * Operator for writing persistent objects to the stream. * @param p a pointer to the object to be written. * @return a reference to the stream. */ template PersistentOStream & operator<<(const TransientConstRCPtr & p) { return outputPointer(p); } /** @name Operators for extracting built-in types from the stream. */ //@{ /** * Write a character string. */ PersistentOStream & operator<<(string s) { for ( string::const_iterator i = s.begin(); i < s.end(); ++i ) escape(*i); put(tSep); return *this; } /** * Write a character. */ PersistentOStream & operator<<(char c) { escape(c); put(tSep); return *this; } /** * Write a signed character. */ PersistentOStream & operator<<(signed char c) { return (*this) << static_cast(c); } /** * Write an unsigned character. */ PersistentOStream & operator<<(unsigned char c) { return (*this) << static_cast(c); } /** * Write an integer. */ PersistentOStream & operator<<(int i) { os() << i; put(tSep); return *this; } /** * Write an unsigned integer. */ PersistentOStream & operator<<(unsigned int i) { os() << i; put(tSep); return *this; } /** * Write a long integer. */ PersistentOStream & operator<<(long i) { os() << i; put(tSep); return *this; } /** * Write an unsigned long integer. */ PersistentOStream & operator<<(unsigned long i) { os() << i; put(tSep); return *this; } /** * Write a short integer. */ PersistentOStream & operator<<(short i) { os() << i; put(tSep); return *this; } /** * Write an unsigned short integer. */ PersistentOStream & operator<<(unsigned short i) { os() << i; put(tSep); return *this; } /** * Write a double. */ PersistentOStream & operator<<(double d) { if ( isnan(d) || isinf(d) ) throw WriteError() << "Tried to write a NaN or Inf double to a persistent stream." << Exception::runerror; os() << setprecision(18) << d; put(tSep); return *this; } /** * Write a float. */ PersistentOStream & operator<<(float f) { if ( isnan(f) || isinf(f) ) throw WriteError() << "Tried to write a NaN or Inf float to a persistent stream." << Exception::runerror; os() << setprecision(9) << f; put(tSep); return *this; } /** * Write a boolean. */ PersistentOStream & operator<<(bool t) { if (t) put(tYes); else put(tNo); // This is a workaround for a possible bug in gcc 4.0.0 // which inserts tYes and tNo as global symbols although // they are private // put(t? tYes: tNo); put(tSep); return *this; } /** * Write a c-style character string (to be read in as a std::string). */ PersistentOStream & operator<<(const char * s) { *this << string(s); return *this; } /** * Write a Complex. */ PersistentOStream & operator<<(Complex z) { *this << z.real() << z.imag(); return *this; } //@} /** * Output of containers of streamable objects. */ template void putContainer(const Container & c) { *this << c.size(); for ( typename Container::const_iterator it = c.begin(); it != c.end() && good() ; ++it ) *this << *it; } /** * Write out a persistent object given a pointer to it. */ PersistentOStream & outputPointer(tcBPtr); /** * For a given object, write the member variables corresponding to a * given ClassDescriptionBase object. * @param obj the object to be written. * @param cd a pointer to a ClassDescriptionBase describing the * (sub)class to written. */ void putObjectPart(tcBPtr obj, const ClassDescriptionBase * cd); /** * Remove all objects that have been written, except those which are * to be saved, from the list of written objects. */ PersistentOStream & flush(); /** * Instuct the stream to save the following objects (protecting them from * being flushed). */ PersistentOStream & push() { lastSavedObject.push(writtenObjects.size() - 1); return *this; } /** * Instuct the stream not to save the following objects. */ PersistentOStream & pop() { lastSavedObject.pop(); return *this; } /** * Check the state of the stream. */ bool good() const { return !badState && os(); } /** * Check the state of the stream. */ operator bool() const { return good(); } /** * Check the state of the stream. */ bool operator!() const { return !good(); } private: /** @cond EXCEPTIONCLASSES */ /** @ingroup Persistency * Internal exception class. */ struct MissingClass: public Exception {}; /** @ingroup Persistency * Internal exception class. */ struct WriteError: public Exception {}; /** @endcond */ /** * The version of this PersistentOStream implementation. */ static const int version = 0; /** * The subversion of this PersistentOStream implementation. */ static const int subVersion = 3; /** @name Special marker characters */ //@{ /** * The special marker character indicating the beginning of an object. */ static const char tBegin = '{'; /** * The special marker character indicating the end of an object. */ static const char tEnd = '}'; /** * The marker character indicating the beginning of the next base * class in case of multiple inheritance. */ /** * The special marker character indicating an escaped marker character. */ static const char tNext = '|'; /** * The special marker character indicating an escaped marker character. */ static const char tNull = '\\'; /** * The special marker character indicating the end of a value. */ static const char tSep = '\n'; /** * The special marker character used to avoid confusion with escaped * tSep markers. */ static const char tNoSep = 'n'; /** * The special marker character indicating a true boolean value. */ static const char tYes = 'y'; /** * The special marker character indicating a false boolean value. */ static const char tNo = 'n'; //@} /** * Return true if the given character is aspecial marker character. */ bool isToken(char c) const { return c == tBegin || c == tEnd || c == tNext || c == tSep || c == tNull; } /** * Set the stream in a bad state. */ void setBadState() { breakThePEG(); badState = true; } /** * Check if the state is ok. */ void checkState() { if ( ! os() ) badState = true; } /** * Write out class information to the associated ostream. */ const ClassDescriptionBase * writeClassId(tcBPtr); /** * write out class information to the associated ostream. */ void writeClassDescription(const ClassDescriptionBase *); /** * Put a "begin object" marker on the associated ostream */ void beginObject() { put(tBegin); } /** * Put a "end of object" marker on the associated ostream */ void endObject() { put(tEnd); } /** * Put an "next base class" marker on the associated ostream */ void endBase() { put(tNext); } /** * Put a character on the associated ostream */ void put(char c) { os().put(c); } /** * Put a character on the associated ostream but escape it if it is * a token. */ void escape(char c) { if ( isToken(c) ) { put(tNull); put( c == tSep? tNoSep: c ); } else put(c); } /** * Return a reference to the associated ostream. */ ostream & os() { return *theOStream; } /** * Return a const reference to the associated ostream. */ const ostream & os() const { return *theOStream; } /** * Write out initial metainfo on the stream. */ void init(const vector & libs); /** * List of written objects. */ ObjectMap writtenObjects; /** * List of written objects that are to be saved. */ stack lastSavedObject; /** * List of written classes. */ ClassMap writtenClasses; /** * A pointer to the associated ostream. */ ostream * theOStream; /** * True if no errors has occurred. */ bool badState; /** * True if the associated ostream should be deleted in the destructor. */ bool allocStream; private: /** * Standard ctors and assignment are private and not implemented. */ PersistentOStream(); /** * Standard ctors and assignment are private and not implemented. */ PersistentOStream(const PersistentOStream &); /** * Standard ctors and assignment are private and not implemented. */ PersistentOStream & operator=(const PersistentOStream &); }; /** * Operator for applying manipulators to the stream. */ inline PersistentOStream & operator<<(PersistentOStream & os, PersistentOManip func) { return (*func)(os); } /** * The manipulator for calling PersistentOStream::flush(). */ inline PersistentOStream & flush(PersistentOStream & os) { return os.flush(); } /** * The manipulator for calling PersistentOStream::push(). */ inline PersistentOStream & push(PersistentOStream & os) { return os.push(); } /** * The manipulator for calling PersistentOStream::pop(). */ inline PersistentOStream & pop(PersistentOStream & os) { return os.pop(); } /** * @name Partial specializations of operator<< for output of * std::containers. */ //@{ /** Output a pair of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const pair & p) { return os << p.first << p.second; } /** * Output a multimap of key/object pairs. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const multimap & m) { os.putContainer(m); return os; } /** * Output a map of key/object pairs. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const map & m) { os.putContainer(m); return os; } /** * Output a set of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const set & s) { os.putContainer(s); return os; } /** * Output a multiset of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const multiset & s) { os.putContainer(s); return os; } /** * Output a list of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const list & l) { os.putContainer(l); return os; } /** * Output a vector of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const vector & v) { os.putContainer(v); return os; } /** * Output a deque of objects. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const deque & d) { os.putContainer(d); return os; } //@} } #endif /* ThePEG_PersistentOStream_H */ thepeg-1.8.0.orig/Persistency/Makefile.am0000644000175000017500000000063311747772425016515 0ustar sunsunmySOURCES = PersistentOStream.cc PersistentIStream.cc DOCFILES = InputDescription.h PersistentIStream.h PersistentOStream.h INCLUDEFILES = $(DOCFILES) PersistentIStream.fh PersistentIStream.xh \ PersistentOStream.fh PersistentOStream.xh noinst_LTLIBRARIES = libThePEGPersistency.la libThePEGPersistency_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/INSTALL0000644000175000017500000003660511756366734013214 0ustar sunsunInstallation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2012 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell commands `./configure; make; make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. thepeg-1.8.0.orig/include/0000755000175000017500000000000011756460365013567 5ustar sunsunthepeg-1.8.0.orig/include/Makefile.in0000644000175000017500000003347711756366735015660 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ BUILT_SOURCES = done-all-links AUTOMAKE_OPTIONS = -Wno-portability DIRLINKS = $(top_srcdir)/Repository \ $(top_srcdir)/EventRecord \ $(top_srcdir)/Pointer \ $(top_srcdir)/StandardModel \ $(top_srcdir)/Vectors \ $(top_srcdir)/PDT \ $(top_srcdir)/ACDC \ $(top_srcdir)/Interface \ $(top_srcdir)/Handlers \ $(top_srcdir)/LesHouches \ $(top_srcdir)/Persistency \ $(top_srcdir)/PDF \ $(top_srcdir)/Helicity \ $(top_srcdir)/Utilities \ $(top_srcdir)/MatrixElement \ $(top_srcdir)/Cuts \ $(top_srcdir)/Analysis CONFIGHEADERS = $(top_srcdir)/Config/Complex.h \ $(top_srcdir)/Config/Constants.h \ $(top_srcdir)/Config/Containers.h \ $(top_srcdir)/Config/Pointers.h \ $(top_srcdir)/Config/ThePEG.h \ $(top_srcdir)/Config/algorithm.h \ $(top_srcdir)/Config/PhysicalQty.h \ $(top_srcdir)/Config/PhysicalQtyComplex.h \ $(top_srcdir)/Config/PhysicalQtyOps.h \ $(top_srcdir)/Config/TemplateTools.h \ $(top_srcdir)/Config/Unitsystem.h \ $(top_srcdir)/Config/HepMCHelper.h \ $(top_srcdir)/Config/std.h CLEANFILES = done-all-links all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile installdirs: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: all check install install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ clean-local distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-local done-all-links: $(DIRLINKS) $(CONFIGHEADERS) @EMPTY@ifdef SHOWCOMMAND mkdir -p ThePEG/Config $(LN_S) -f $(addprefix ../, $(DIRLINKS)) ThePEG $(LN_S) -f $(addprefix ../../, $(CONFIGHEADERS)) ThePEG/Config $(LN_S) -f ../../../Config/ThePEG_Qty.h ThePEG/Config $(LN_S) -f ../../../Config/LWH.h ThePEG/Config touch done-all-links @EMPTY@else @echo "sym-linking header files..." @mkdir -p ThePEG/Config @$(LN_S) -f $(addprefix ../, $(DIRLINKS)) ThePEG @$(LN_S) -f $(addprefix ../../, $(CONFIGHEADERS)) ThePEG/Config @$(LN_S) -f ../../../Config/ThePEG_Qty.h ThePEG/Config @$(LN_S) -f ../../../Config/LWH.h ThePEG/Config @touch done-all-links @EMPTY@endif install-data-local: find ThePEG -follow \( -name '*.h' -or -name '*.icc' \ -or -name '*.tcc' -or -name '*.fh' -or -name '*.xh' \) \ -exec $(install_sh_DATA) \{\} $(DESTDIR)$(includedir)/\{\} \; uninstall-local: rm -rf $(DESTDIR)$(includedir)/ThePEG clean-local: rm -rf ThePEG # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/include/Makefile.am0000644000175000017500000000424711747772425015635 0ustar sunsunBUILT_SOURCES = done-all-links AUTOMAKE_OPTIONS = -Wno-portability DIRLINKS = $(top_srcdir)/Repository \ $(top_srcdir)/EventRecord \ $(top_srcdir)/Pointer \ $(top_srcdir)/StandardModel \ $(top_srcdir)/Vectors \ $(top_srcdir)/PDT \ $(top_srcdir)/ACDC \ $(top_srcdir)/Interface \ $(top_srcdir)/Handlers \ $(top_srcdir)/LesHouches \ $(top_srcdir)/Persistency \ $(top_srcdir)/PDF \ $(top_srcdir)/Helicity \ $(top_srcdir)/Utilities \ $(top_srcdir)/MatrixElement \ $(top_srcdir)/Cuts \ $(top_srcdir)/Analysis CONFIGHEADERS = $(top_srcdir)/Config/Complex.h \ $(top_srcdir)/Config/Constants.h \ $(top_srcdir)/Config/Containers.h \ $(top_srcdir)/Config/Pointers.h \ $(top_srcdir)/Config/ThePEG.h \ $(top_srcdir)/Config/algorithm.h \ $(top_srcdir)/Config/PhysicalQty.h \ $(top_srcdir)/Config/PhysicalQtyComplex.h \ $(top_srcdir)/Config/PhysicalQtyOps.h \ $(top_srcdir)/Config/TemplateTools.h \ $(top_srcdir)/Config/Unitsystem.h \ $(top_srcdir)/Config/HepMCHelper.h \ $(top_srcdir)/Config/std.h CLEANFILES = done-all-links done-all-links: $(DIRLINKS) $(CONFIGHEADERS) @EMPTY@ifdef SHOWCOMMAND mkdir -p ThePEG/Config $(LN_S) -f $(addprefix ../, $(DIRLINKS)) ThePEG $(LN_S) -f $(addprefix ../../, $(CONFIGHEADERS)) ThePEG/Config $(LN_S) -f ../../../Config/ThePEG_Qty.h ThePEG/Config $(LN_S) -f ../../../Config/LWH.h ThePEG/Config touch done-all-links @EMPTY@else @echo "sym-linking header files..." @mkdir -p ThePEG/Config @$(LN_S) -f $(addprefix ../, $(DIRLINKS)) ThePEG @$(LN_S) -f $(addprefix ../../, $(CONFIGHEADERS)) ThePEG/Config @$(LN_S) -f ../../../Config/ThePEG_Qty.h ThePEG/Config @$(LN_S) -f ../../../Config/LWH.h ThePEG/Config @touch done-all-links @EMPTY@endif install-data-local: find ThePEG -follow \( -name '*.h' -or -name '*.icc' \ -or -name '*.tcc' -or -name '*.fh' -or -name '*.xh' \) \ -exec $(install_sh_DATA) \{\} $(DESTDIR)$(includedir)/\{\} \; uninstall-local: rm -rf $(DESTDIR)$(includedir)/ThePEG clean-local: rm -rf ThePEG thepeg-1.8.0.orig/Config/0000755000175000017500000000000011756460365013351 5ustar sunsunthepeg-1.8.0.orig/Config/PhysicalQtyOps.h0000644000175000017500000001653411747772425016472 0ustar sunsun// -*- C++ -*- // // PhysicalQtyOps.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef Physical_Qty_Ops_H #define Physical_Qty_Ops_H #include /** @file PhysicalQtyOps.h * Overloads for mathematical operations on physical quantities. */ namespace ThePEG { /// @name Overloads for mathematical operations on physical quantities. //@{ // qty = qty * qty template inline Qty operator*(Qty q1, Qty q2) { typedef Qty RetT; return RetT(q1.rawValue()*q2.rawValue()*RetT::baseunit()); } // qty = qty / qty template inline Qty operator/(Qty q1, Qty q2) { typedef Qty RetT; return RetT((q1.rawValue()/q2.rawValue())*RetT::baseunit()); } // qty = qty + qty template inline Qty operator+(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { Qty q = q1; q += q2; return q; } // qty = qty - qty template inline Qty operator-(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { Qty q = q1; q -= q2; return q; } // qty == qty template inline bool operator==(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue()==q2.rawValue(); } // qty != qty template inline bool operator!=(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue()!=q2.rawValue(); } // qty < qty template inline bool operator<(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue() inline bool operator<=(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue()<=q2.rawValue(); } // qty > qty template inline bool operator>(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue()>q2.rawValue(); } // qty >= qty template inline bool operator>=(Qty q1, Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> q2) { return q1.rawValue()>=q2.rawValue(); } // comparisons with ZERO template inline bool operator==(Qty q1, ZeroUnit) { return q1.rawValue() == 0.0; } template inline bool operator!=(Qty q1, ZeroUnit) { return q1.rawValue() != 0.0; } template inline bool operator<(Qty q1, ZeroUnit) { return q1.rawValue() < 0.0; } template inline bool operator>(Qty q1, ZeroUnit) { return q1.rawValue() > 0.0; } template inline bool operator<=(Qty q1, ZeroUnit) { return q1.rawValue() <= 0.0; } template inline bool operator>=(Qty q1, ZeroUnit) { return q1.rawValue() >= 0.0; } // qty = qty * double template inline Qty operator*(Qty q,double x) { return q*=x; } // qty = double * qty template inline Qty operator*(double x,Qty q) { return q*=x; } // qty = qty / double template inline Qty operator/(Qty q,double x) { return q/=x; } // qty = double / qty template inline Qty<-L,-E,-Q,DL,DE,DQ> operator/(double x, Qty q) { typedef Qty<-L,-E,-Q,DL,DE,DQ> RetT; return RetT((x/q.rawValue())*RetT::baseunit()); } // qty = -qty template inline Qty operator-(Qty q) { return Qty(-q.rawValue()*Qty::baseunit()); } // qty = sqr(qty) template inline Qty<2*L,2*E,2*Q,DL,DE,DQ> sqr(Qty q) { return q*q; } // qty = sqrt(qty) template inline Qty sqrt(Qty q) { typedef Qty RetT; return RetT(std::sqrt(q.rawValue())*RetT::baseunit()); } // double = atan2(y,x) template inline double atan2(Qty y, Qty x) { return std::atan2(y.rawValue(), x.rawValue()); } // qty = abs(qty) template inline Qty abs(Qty q) { typedef Qty RetT; return RetT(std::abs(q.rawValue())*RetT::baseunit()); } // qty = pow(qty) template Qty pow(Qty q) { typedef Qty RetT; return RetT(std::pow(q.rawValue(),double(P)/double(R))*RetT::baseunit()); } // max for T,U types template inline T max(const T & t, const U & u) { const T & utmp = u; return std::max(t, utmp); } // ZeroUnit in front should take U type template inline U max(const ZeroUnit & t, const U & u) { const U & ttmp = t; return std::max(ttmp, u); } // min for T,U types template inline T min(const T & t, const U & u) { const T & utmp = u; return std::min(t, utmp); } // ZeroUnit in front should take U type template inline U min(const ZeroUnit & t, const U & u) { const U & ttmp = t; return std::min(ttmp, u); } //@} } #endif thepeg-1.8.0.orig/Config/Unitsystem.h0000644000175000017500000001414711747772425015720 0ustar sunsun// -*- C++ -*- // // Unitsystem.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad, David Grellscheid // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Units_H #define ThePEG_Units_H #include "ThePEG/Vectors/Lorentz5Vector.fh" #include "ThePEG/Vectors/LorentzVector.fh" #include "ThePEG/Vectors/ThreeVector.fh" #include "ThePEG/Vectors/Transverse.fh" #include "ThePEG_Qty.h" namespace ThePEG { /** * The Units namespace contains the declaration of a number of classes * for variables with dimension. Currently they are all typedefs of * double, but in the future the SIUnits package will be used. * * The file Utilities/UnitIO.h defines helper-classes and helper * functions to read and write variables with dimensions. As an * example, to read and write an energy variable e in * units of GeV, use: os << ounit(e, GeV) and is >> * iunit(e, GeV) */ namespace Units { /** Energy. */ typedef QTY<0,1,0>::Type Energy; /** Mass has the same unit as Energy <=> c == 1. */ typedef Energy Mass; /** Length. */ typedef QTY<1,0,0>::Type Length; /** Time has the same unit as Length. <=> c == 1. */ typedef Length Time; /** Inverse Length. */ typedef QTY<-1,0,0>::Type InvLength; /** Velocities are dimensionless fractions of c. */ typedef double Velocity; /** Charge. */ typedef QTY<0,0,1>::Type Charge; /** Angular momentum. */ typedef QTY<1,1,0>::Type AngularMomentum; /** Tension. */ typedef QTY<-1,1,0>::Type Tension; /** Area will be assumed to be Length\f$^2\f$. */ typedef QTY<2,0,0>::Type Area; /** Inverse Area. */ typedef QTY<-2,0,0>::Type InvArea; /** Cross section is an area. */ typedef Area CrossSection; /** * @name Higher powers of energy. * Even higher powers can be created with similar typedefs. */ //@{ typedef QTY<0, 2, 0>::Type Energy2; typedef QTY<0, 3, 0>::Type Energy3; typedef QTY<0, 4, 0>::Type Energy4; typedef QTY<0, 5, 0>::Type Energy5; typedef QTY<0, 6, 0>::Type Energy6; typedef QTY<0, 7, 0>::Type Energy7; typedef QTY<0, 8, 0>::Type Energy8; typedef QTY<0, 9, 0>::Type Energy9; typedef QTY<0,10, 0>::Type Energy10; typedef QTY<0,11, 0>::Type Energy11; typedef QTY<0,12, 0>::Type Energy12; typedef QTY<0, 1,0, 1,2,1>::Type SqrtEnergy; typedef QTY<0,-1,0, 1,2,1>::Type InvSqrtEnergy; typedef QTY<0, -1, 0>::Type InvEnergy; typedef QTY<0, -2, 0>::Type InvEnergy2; typedef QTY<0, -3, 0>::Type InvEnergy3; typedef QTY<0, -4, 0>::Type InvEnergy4; typedef QTY<0, -5, 0>::Type InvEnergy5; typedef QTY<0, -6, 0>::Type InvEnergy6; typedef QTY<0, -7, 0>::Type InvEnergy7; typedef QTY<0, -8, 0>::Type InvEnergy8; typedef QTY<0, -9, 0>::Type InvEnergy9; typedef QTY<0,-10, 0>::Type InvEnergy10; typedef QTY<0,-11, 0>::Type InvEnergy11; typedef QTY<0,-12, 0>::Type InvEnergy12; //@} /** CrossSection*Energy2. */ typedef QTY<2,2,0>::Type Energy2XSec; /** CrossSection/Energy2. */ typedef QTY<2,-2,0>::Type DiffXSec; /** CrossSection/Energy4. */ typedef QTY<2,-4,0>::Type Diff2XSec; /** CrossSection/Energy6 */ typedef QTY<2,-6,0>::Type Diff3XSec; /** Scale is the same as a squared energy. */ typedef Energy2 Scale; /** A point in three-dimensional euclidean space. */ typedef ThreeVector Point; /** A distance in three-dimensional euclidean space. */ typedef ThreeVector Distance; /** A direction in three-dimensional euclidean space. */ typedef ThreeVector Axis; /** A momentum in three-dimensional euclidean space. */ typedef ThreeVector Momentum3; /** A three-dimensional boost vector. */ typedef ThreeVector Boost; /** A distance in four-dimensional space-time. */ typedef LorentzVector LorentzDistance; /** A distance in four-dimensional space-time with an explicit * invariant time component. */ typedef Lorentz5Vector Lorentz5Distance; /** A point in four-dimensional space-time. */ typedef LorentzVector LorentzPoint; /** A momentum in four-dimensional space-time. */ typedef LorentzVector LorentzMomentum; /** A momentum in four-dimensional space-time with an explicit * invariant mass component. */ typedef Lorentz5Vector Lorentz5Momentum; /** Transverse components of a momentum. */ typedef Transverse TransverseMomentum; /// @name Pre-defined basic units. //@{ const Length millimeter = TypeTraits::baseunit; const Energy MeV = TypeTraits::baseunit; const Charge eplus = TypeTraits::baseunit; const Energy keV = 1.0e-3 * MeV; const Energy GeV = 1.0e3 * MeV; const Energy TeV = 1.0e6 * MeV; const Energy2 MeV2 = MeV * MeV; const Energy2 GeV2 = GeV * GeV; const InvEnergy InvGeV = 1/GeV; const Length meter = 1.0e3 * millimeter; const Length mm = millimeter; const Length centimeter = 10.0*millimeter; const Length micrometer = 1.0e-3 * millimeter; const Length nanometer = 1.0e-6 * millimeter; const Length picometer = 1.0e-9 * millimeter; const Length femtometer = 1.0e-12 * millimeter; const Area picobarn = 1.0e-40 * meter * meter; const Area nanobarn = 1.0e3 * picobarn; const Area microbarn = 1.0e6 * picobarn; const Area millibarn = 1.0e9 * picobarn; const Area barn = 1.0e12 * picobarn; const Area femtobarn = 1.0e-3 * picobarn; //@} /// Planck's constant times c (PDG 2006 value 197.326968(17) MeV fm) const QTY<1,1,0>::Type hbarc = 197.326968e-15 * MeV * meter; /// Planck's constant (PDG 2006 value 197.326968(17) MeV fm) const QTY<1,1,0>::Type hbar_Planck = hbarc / 1.0; } /** * Use symbols from this namespace to make forced breaks of unit * consistency explicit. */ namespace UnitRemoval { /// @name Helper units to make breaks of unit consistency explicit. //@{ const Units::Energy E = Units::MeV; const Units::Energy2 E2 = E*E; const Units::Energy3 E3 = E*E2; const Units::Energy4 E4 = E2*E2; const Units::InvEnergy InvE = 1.0/E; const Units::InvEnergy2 InvE2 = 1.0/E2; const Units::InvEnergy3 InvE3 = 1.0/E3; const Units::InvEnergy4 InvE4 = 1.0/E4; const Units::SqrtEnergy SqrtE = sqrt(E); const Units::InvSqrtEnergy InvSqrtE = 1.0/sqrt(E); //@} } } #endif /* ThePEG_Units_H */ thepeg-1.8.0.orig/Config/Complex.h0000644000175000017500000000432111747772425015134 0ustar sunsun// -*- C++ -*- // // Complex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Complex_H #define ThePEG_Complex_H // // This is file wraps the standard complex header and makes some // convenient typedefs in the ThePEG namespace. // #include namespace ThePEG { using std::complex; /** ThePEG code should use Complex for all complex scalars */ typedef std::complex Complex; /** @cond TRAITSPECIALIZATIONS */ template struct BinaryOpTraits; template struct BinaryOpTraits, U> { /** The type resulting from multiplication of the template type with itself. */ typedef complex::MulT> MulT; /** The type resulting from division of one template type with another. */ typedef complex::DivT> DivT; }; template struct BinaryOpTraits > { /** The type resulting from multiplication of the template type with itself. */ typedef complex::MulT> MulT; /** The type resulting from division of one template type with another. */ typedef complex::DivT> DivT; }; template struct BinaryOpTraits, complex > { /** The type resulting from multiplication of the template type with itself. */ typedef complex::MulT> MulT; /** The type resulting from division of one template type with another. */ typedef complex::DivT> DivT; }; template struct BinaryOpTraits, complex > { /** The type resulting from multiplication of the template type with itself. */ typedef complex::MulT> MulT; /** The type resulting from division of one template type with another. */ typedef complex::DivT> DivT; /** @endcond */ }; } #endif /* ThePEG_Complex_H */ thepeg-1.8.0.orig/Config/Makefile.aminclude0000644000175000017500000000016211747772425016753 0ustar sunsun debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) thepeg-1.8.0.orig/Config/ThePEG_Qty.h.a0000644000175000017500000000005211747772425015652 0ustar sunsun#ifndef THEPEG_QTY_H #define THEPEG_QTY_H thepeg-1.8.0.orig/Config/TemplateTools.h0000644000175000017500000000434211747772425016324 0ustar sunsun// -*- C++ -*- // // TemplateTools.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef Template_Tools_H #define Template_Tools_H /** * @file TemplateTools.h * Useful template machinery. Based on Alexandrescu, "Modern C++ Design". */ namespace ThePEG { /// Conversion between integers and types. template struct Int2Type { enum { value = v }; }; /// Dummy type for ambiguous function signatures. struct DummyType {}; /// Result type calculations for binary operators. template struct BinaryOpTraits; /** @cond TRAITSPECIALIZATIONS */ template <> struct BinaryOpTraits { /** The type resulting from multiplication of the template types. */ typedef double MulT; /** The type resulting from division of the first template type by the second. */ typedef double DivT; }; template <> struct BinaryOpTraits { /** The type resulting from multiplication of the template types. */ typedef long double MulT; /** The type resulting from division of the first template type by the second. */ typedef long double DivT; }; template <> struct BinaryOpTraits { /** The type resulting from multiplication of the template types. */ typedef int MulT; /** The type resulting from division of the first template type by the second. */ typedef int DivT; }; /** @endcond */ /// Selection mechanism for type-dependent implementations. enum ImplSelector { Dimensioned, Standard }; /// Typedef for dimensioned types. typedef Int2Type DimensionT; /// Typedef for non-dimensioned types. typedef Int2Type StandardT; /// Type traits for built-in types template struct TypeTraits { /// Boolean flag. Is true for physical quantities. enum { hasDimension = false }; /// Implementation selector typedef StandardT DimType; /// Base unit static const double baseunit; }; /// Built-in types have no dimension. template const double TypeTraits::baseunit = T(1); } #endif thepeg-1.8.0.orig/Config/ThePEG.cc0000644000175000017500000000104411747772425014736 0ustar sunsun// -*- C++ -*- // // ThePEG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // This file contains the implementations of the declarations in // ThePEG.h. #include "ThePEG/Config/ThePEG.h" using namespace ThePEG; void Base::debug() const { debugme(); } void Base::debugme() const { cerr << "(#ref: " << referenceCount() << ")"; } thepeg-1.8.0.orig/Config/Constants.h0000644000175000017500000000313511747772425015503 0ustar sunsun// -*- C++ -*- // // Constants.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Constants_H #define ThePEG_Constants_H // This file defines a number of useful constants, placed in the // namespace ThePEG::Constants. #include "Unitsystem.h" #include #include namespace ThePEG { /** * The Constants namespace containing some useful physical constants * with suitable units. */ namespace Constants { using namespace ThePEG::Units; /** A really large length. */ const Length MaxLength = 1.0e20 * meter; /** A really large energy. */ const Energy MaxEnergy = 1.0e6 * GeV; /** A really large squared energy. */ const Energy2 MaxEnergy2 = MaxEnergy * MaxEnergy; /** The largest possible double. */ const double MaxDouble = DBL_MAX; /** A really large double. */ const double HugeDouble = DBL_MAX * 1.0e-4; /** The largest possible float. */ const double MaxFloat = FLT_MAX; /** A really large floa.t */ const double HugeFloat = FLT_MAX * 0.01; /** A really large rapidity */ const double MaxRapidity = 100.0; /** Good old \f$\pi\f$. */ const double pi = M_PI; /** Good old \f$2\pi\f$. */ const double twopi = 2.0 * pi; /** A really large integer */ const long MaxInt = 1000000000L; /** The smallest non-zero double. */ const double epsilon = DBL_EPSILON; /** The Euler gamma */ const double EulerGamma = 0.5772156649015329; } } #endif /* ThePEG_Constants_H */ thepeg-1.8.0.orig/Config/missing0000755000175000017500000002370311756366733014761 0ustar sunsun#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.18; # UTC # Copyright (C) 1996-2012 Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, 'missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file 'aclocal.m4' autoconf touch file 'configure' autoheader touch file 'config.h.in' autom4te touch the output file, or create a stub one automake touch all 'Makefile.in' files bison create 'y.tab.[ch]', if possible, from existing .[ch] flex create 'lex.yy.c', if possible, from existing .c help2man touch the output file lex create 'lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create 'y.tab.[ch]', if possible, from existing .[ch] Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running '$TOOL --version' or '$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'acconfig.h' or '${configure_ac}'. You might want to install the Autoconf and GNU m4 packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'. You might want to install the Automake and Perl packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: '$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get '$1' as part of Autoconf from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: '$1' $msg. You should only need it if you modified a '.y' file. You may need the Bison package in order for those modifications to take effect. You can get Bison from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.l' file. You may need the Flex package in order for those modifications to take effect. You can get Flex from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the Help2man package in order for those modifications to take effect. You can get Help2man from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: '$1' is $msg. You should only need it if you modified a '.texi' or '.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy 'make' (AIX, DU, IRIX). You might want to install the Texinfo package or the GNU make package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: '$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the 'README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing '$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: thepeg-1.8.0.orig/Config/ltmain.sh0000644000175000017500000105152211756366730015200 0ustar sunsun # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, # or obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # Usage: $progname [OPTION]... [MODE-ARG]... # # Provide generalized library-building support services. # # --config show all configuration variables # --debug enable verbose shell tracing # -n, --dry-run display commands without modifying any files # --features display basic configuration information and exit # --mode=MODE use operation mode MODE # --preserve-dup-deps don't remove duplicate dependency libraries # --quiet, --silent don't print informational messages # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed help message # # MODE must be one of the following: # # clean remove files from the build directory # compile compile a source file into a libtool object # execute automatically set library path, then run a program # finish complete the installation of libtool libraries # install install libraries or executables # link create a library or an executable # uninstall remove libraries from an installed directory # # MODE-ARGS vary depending on the MODE. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # Try `$progname --help --mode=MODE' for a more detailed description of MODE. # # When reporting a bug, please describe a test case to reproduce it and # include the following information: # # host-triplet: $host # shell: $SHELL # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) # $progname: (GNU libtool) 2.4.2 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to . # GNU libtool home page: . # General help using GNU software: . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.2 TIMESTAMP="" package_revision=1.3337 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. lt_user_locale= lt_safe_locale= for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${$lt_var+set}\" = set; then save_$lt_var=\$$lt_var $lt_var=C export $lt_var lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" fi" done LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath="$0" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} : ${Xsed="$SED -e 1s/^X//"} # Global variables: EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. exit_status=$EXIT_SUCCESS # Make sure IFS has a sensible default lt_nl=' ' IFS=" $lt_nl" dirname="s,/[^/]*$,," basename="s,^.*/,," # func_dirname file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # func_dirname_and_basename file append nondir_replacement # perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # Implementation must be kept synchronized with func_dirname # and func_basename. For efficiency, we do not delegate to # those functions but instead duplicate the functionality here. func_dirname_and_basename () { # Extract subdirectory from the argument. func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # func_stripname prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # func_strip_suffix prefix name func_stripname () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # Make sure we have an absolute path for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=$func_dirname_result progdir=`cd "$progdir" && pwd` progpath="$progdir/$progname" ;; *) save_IFS="$IFS" IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS="$save_IFS" test -x "$progdir/$progname" && break done IFS="$save_IFS" test -n "$progdir" || progdir=`pwd` progpath="$progdir/$progname" ;; esac # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. Xsed="${SED}"' -e 1s/^X//' sed_quote_subst='s/\([`"$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-`\' parameter expansions in output of double_quote_subst that were # `\'-ed in input to the same. If an odd number of `\' preceded a '$' # in input to double_quote_subst, that '$' was protected from expansion. # Since each input `\' is now two `\'s, look for any number of runs of # four `\'s followed by two `\'s and then a '$'. `\' that '$'. bs='\\' bs2='\\\\' bs4='\\\\\\\\' dollar='\$' sed_double_backslash="\ s/$bs4/&\\ /g s/^$bs2$dollar/$bs&/ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g s/\n//g" # Standard options: opt_dry_run=false opt_help=false opt_quiet=false opt_verbose=false opt_warning=: # func_echo arg... # Echo program name prefixed message, along with the current mode # name if it has been set yet. func_echo () { $ECHO "$progname: ${opt_mode+$opt_mode: }$*" } # func_verbose arg... # Echo program name prefixed message in verbose mode only. func_verbose () { $opt_verbose && func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 # bash bug again: : } # func_fatal_error arg... # Echo program name prefixed message to standard error, and exit. func_fatal_error () { func_error ${1+"$@"} exit $EXIT_FAILURE } # func_fatal_help arg... # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { func_error ${1+"$@"} func_fatal_error "$help" } help="Try \`$progname --help' for more information." ## default # func_grep expression filename # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $GREP "$1" "$2" >/dev/null 2>&1 } # func_mkdir_p directory-path # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { my_directory_path="$1" my_dir_list= if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then # Protect directory names starting with `-' case $my_directory_path in -*) my_directory_path="./$my_directory_path" ;; esac # While some portion of DIR does not yet exist... while test ! -d "$my_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. my_dir_list="$my_directory_path:$my_dir_list" # If the last portion added has no slash in it, the list is done case $my_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` save_mkdir_p_IFS="$IFS"; IFS=':' for my_dir in $my_dir_list; do IFS="$save_mkdir_p_IFS" # mkdir can fail with a `File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$my_dir" 2>/dev/null || : done IFS="$save_mkdir_p_IFS" # Bail out if we (or some other process) failed to create a directory. test -d "$my_directory_path" || \ func_fatal_error "Failed to create \`$1'" fi } # func_mktempdir [string] # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, STRING is the basename for that directory. func_mktempdir () { my_template="${TMPDIR-/tmp}/${1-$progname}" if test "$opt_dry_run" = ":"; then # Return a directory name, but don't create it in dry-run mode my_tmpdir="${my_template}-$$" else # If mktemp works, use that first and foremost my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` if test ! -d "$my_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race my_tmpdir="${my_template}-${RANDOM-0}$$" save_mktempdir_umask=`umask` umask 0077 $MKDIR "$my_tmpdir" umask $save_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$my_tmpdir" || \ func_fatal_error "cannot create temporary directory \`$my_tmpdir'" fi $ECHO "$my_tmpdir" } # func_quote_for_eval arg # Aesthetically quote ARG to be evaled later. # This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT # is double-quoted, suitable for a subsequent eval, whereas # FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters # which are still active within double quotes backslashified. func_quote_for_eval () { case $1 in *[\\\`\"\$]*) func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; *) func_quote_for_eval_unquoted_result="$1" ;; esac case $func_quote_for_eval_unquoted_result in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and and variable # expansion for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" ;; *) func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" esac } # func_quote_for_expand arg # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { case $1 in *[\\\`\"]*) my_arg=`$ECHO "$1" | $SED \ -e "$double_quote_subst" -e "$sed_double_backslash"` ;; *) my_arg="$1" ;; esac case $my_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") my_arg="\"$my_arg\"" ;; esac func_quote_for_expand_result="$my_arg" } # func_show_eval cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$my_cmd" my_status=$? if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_show_eval_locale cmd [fail_exp] # Unless opt_silent is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { my_cmd="$1" my_fail_exp="${2-:}" ${opt_silent-false} || { func_quote_for_expand "$my_cmd" eval "func_echo $func_quote_for_expand_result" } if ${opt_dry_run-false}; then :; else eval "$lt_user_locale $my_cmd" my_status=$? eval "$lt_safe_locale" if test "$my_status" -eq 0; then :; else eval "(exit $my_status); $my_fail_exp" fi fi } # func_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$PROGRAM' (GNU /,/# warranty; / { s/^# // s/^# *$// s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ p }' < "$progpath" exit $? } # func_usage # Echo short help message to standard output and exit. func_usage () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print s/^# // s/^# *$// s*\$progname*'$progname'* s*\$host*'"$host"'* s*\$SHELL*'"$SHELL"'* s*\$LTCC*'"$LTCC"'* s*\$LTCFLAGS*'"$LTCFLAGS"'* s*\$LD*'"$LD"'* s/\$with_gnu_ld/'"$with_gnu_ld"'/ s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # func_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # func_fatal_configuration arg... # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func_error ${1+"$@"} func_error "See the $PACKAGE documentation for more information." func_fatal_error "Fatal configuration error." } # func_config # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # Display the features supported by this script. func_features () { echo "host: $host" if test "$build_libtool_libs" = yes; then echo "enable shared libraries" else echo "disable shared libraries" fi if test "$build_old_libs" = yes; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag tagname # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname="$1" re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf="/$re_begincf/,/$re_endcf/p" # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" case $host in *cygwin* | *mingw* | *pw32* | *cegcc*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then func_fatal_configuration "not configured to build any kind of library" fi # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_mode" != execute; then func_error "unrecognized option \`-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help="$help" help="Try \`$progname --help --mode=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # func_lalib_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null \ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_unsafe_p file # True iff FILE is a libtool `.la' library or `.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if `file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case "$lalib_p_line" in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test "$lalib_p" = yes } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { func_lalib_p "$1" } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $opt_debug save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$save_ifs eval cmd=\"$cmd\" func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # `FILE.' does not work on cygwin managed mounts. func_source () { $opt_debug case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $opt_debug if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with \`--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=${1} if test "$build_libtool_libs" = yes; then write_lobj=\'${2}\' else write_lobj=none fi if test "$build_old_libs" = yes; then write_oldobj=\'${3}\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_mode_compile arg... func_mode_compile () { $opt_debug # Get the compilation command and the source file. base_compile= srcfile="$nonopt" # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg="$arg" arg_mode=normal ;; target ) libobj="$arg" arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify \`-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs="$IFS"; IFS=',' for arg in $args; do IFS="$save_ifs" func_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg="$srcfile" srcfile="$arg" ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with \`-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj="$func_basename_result" } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from \`$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name \`$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname="$func_basename_result" xdir="$func_dirname_result" lobj=${xdir}$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test "$build_old_libs" = yes; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test "$compiler_c_o" = no; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} lockfile="$output_obj.lock" else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test "$need_locks" = yes; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test "$need_locks" = warn; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test "$build_libtool_libs" = yes; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test "$pic_mode" != no; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test "$suppress_opt" = yes; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test "$build_old_libs" = yes; then if test "$pic_mode" != yes; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test "$compiler_c_o" = yes; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test "$need_locks" = warn && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support \`-c' and \`-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test "$need_locks" != no; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a \`.o' file suitable for static linking -static only build a \`.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a \`standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix \`.c' with the library object suffix, \`.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to \`-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the \`--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the \`install' or \`cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE Use a list of object files found in FILE to specify objects -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with \`-') are ignored. Every other argument is treated as a filename. Files ending in \`.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in \`.la', then a libtool library is created, only library objects (\`.lo' files) may be specified, and \`-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created using \`ar' and \`ranlib', or on Windows using \`lib'. If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $opt_debug # The first argument is the command name. cmd="$nonopt" test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "\`$file' was not linked with \`-export-dynamic'" continue fi func_dirname "$file" "" "." dir="$func_dirname_result" if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir="$func_dirname_result" ;; *) func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir="$absdir" # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic="$magic" # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file="$progdir/$program" elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file="$progdir/$program" fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if test "X$opt_dry_run" = Xfalse; then if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd="\$cmd$args" else # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS fi } test "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the \`-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the \`$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the \`$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the \`$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_mode" = finish && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $opt_debug # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac; then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the \`$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=yes if test "$isdir" = yes; then destdir="$dest" destname= else func_dirname_and_basename "$dest" "" "." destdir="$func_dirname_result" destname="$func_basename_result" # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "\`$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "\`$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "\`$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking \`$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname="$1" shift srcname="$realname" test -n "$relink_command" && srcname="$realname"T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme="$stripme" case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme="" ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try `ln -sf' first, because the `ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib="$destdir/$realname" func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name="$func_basename_result" instname="$dir/$name"i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest="$destfile" destfile= ;; *) func_fatal_help "cannot copy a libtool object to \`$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test "$build_old_libs" = yes; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile="$destdir/$destname" else func_basename "$file" destfile="$func_basename_result" destfile="$destdir/$destfile" fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext="" case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=".exe" fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script \`$wrapper'" finalize=yes for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test if test -n "$libdir" && test ! -f "$libfile"; then func_warning "\`$lib' has not been installed in \`$libdir'" finalize=no fi done relink_command= func_source "$wrapper" outputname= if test "$fast_install" = no && test -n "$relink_command"; then $opt_dry_run || { if test "$finalize" = yes; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file="$func_basename_result" outputname="$tmpdir/$file" # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_silent || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink \`$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file="$outputname" else func_warning "cannot relink \`$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name="$func_basename_result" # Set up the ranlib parameters. oldlib="$destdir/$name" func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run \`$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test "$opt_mode" = install && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $opt_debug my_outputname="$1" my_originator="$2" my_pic_p="${3-no}" my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms="${my_outputname}S.c" else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist="$output_objdir/${my_outputname}.nm" func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif /* External symbol declarations for the compiler. */\ " if test "$dlself" = yes; then func_verbose "generating symbol list for \`$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols="$output_objdir/$outputname.exp" $opt_dry_run || { $RM $export_symbols eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from \`$dlprefile'" func_basename "$dlprefile" name="$func_basename_result" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[]; LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = {\ { \"$my_originator\", (void *) 0 }," case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) if test "X$my_pic_p" != Xno; then pic_flag_for_symtable=" $pic_flag" fi ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' # Transform the symbol file into the correct name. symfileobj="$output_objdir/${my_outputname}S.$objext" case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for \`$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $opt_debug win32_libid_type="unknown" win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s,.*,import, p q } }'` case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $opt_debug f_ex_an_ar_dir="$1"; shift f_ex_an_ar_oldlib="$1" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $opt_debug my_gentop="$1"; shift my_oldlibs=${1+"$@"} my_oldobjs="" my_xlib="" my_xabs="" my_xdir="" for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib="$func_basename_result" my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir="$my_gentop/$my_xlib_u" func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` darwin_base_archive=`basename "$darwin_archive"` darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches ; do func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" func_extract_an_archive "`pwd`" "${darwin_base_archive}" cd "$darwin_curdir" $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory in which it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test "$fast_install" = yes; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else $ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #if defined(PATH_MAX) # define LT_PATHMAX PATH_MAX #elif defined(MAXPATHLEN) # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ defined (__OS2__) # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free ((void *) stale); stale = 0; } \ } while (0) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; int tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined (HAVE_DOS_BASED_FILE_SYSTEM) if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined (HAVE_DOS_BASED_FILE_SYSTEM) } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = q - p; p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (strcmp (str, pat) == 0) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else int len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { int orig_value_len = strlen (orig_value); int add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ int len = strlen (new_value); while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[len-1] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_mode_link arg... func_mode_link () { $opt_debug case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # which system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll which has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=no prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module="${wl}-single_module" func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test "$build_libtool_libs" != yes && \ func_fatal_configuration "can not build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg="$1" shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir="$arg" prev= continue ;; dlfiles|dlprefiles) if test "$preload" = no; then # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=yes fi case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test "$dlself" = no; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test "$prev" = dlprefiles; then dlself=yes elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test "$prev" = dlfiles; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols="$arg" test -f "$arg" \ || func_fatal_error "symbol file \`$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex="$arg" prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir="$arg" prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file \`$arg' does not exist" fi arg=$save_arg prev= continue ;; precious_regex) precious_files_regex="$arg" prev= continue ;; release) release="-$arg" prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test "$prev" = rpath; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg="$arg" case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "\`-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test "X$arg" = "X-export-symbols"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between \`-L' and \`$1'" else func_fatal_error "need path for \`-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of \`$dir'" dir="$absdir" ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test "X$arg" = "X-lc" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. test "X$arg" = "X-lc" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test "X$arg" = "X-lc" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test "X$arg" = "X-lc" && continue ;; esac elif test "X$arg" = "X-lc_r"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module="${wl}-multi_module" continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "\`-no-install' is ignored for $host" func_warning "assuming \`-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs="$IFS"; IFS=',' for flag in $args; do IFS="$save_ifs" func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS="$save_ifs" func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test "$pic_object" = none && test "$non_pic_object" = none; then func_fatal_error "cannot find name of object for \`$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" if test "$pic_object" != none; then # Prepend the subdirectory the object is found in. pic_object="$xdir$pic_object" if test "$prev" = dlfiles; then if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test "$prev" = dlprefiles; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg="$pic_object" fi # Non-PIC object. if test "$non_pic_object" != none; then # Prepend the subdirectory the object is found in. non_pic_object="$xdir$non_pic_object" # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test "$pic_object" = none ; then arg="$non_pic_object" fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object="$pic_object" func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir="$func_dirname_result" func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "\`$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the \`$prevarg' option requires an argument" if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname="$func_basename_result" libobjs_save="$libobjs" if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" func_dirname "$output" "/" "" output_objdir="$func_dirname_result$objdir" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test "$linkmode" = lib; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=no newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test "$linkmode,$pass" = "lib,link"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs="$tmp_deplibs" fi if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan"; then libs="$deplibs" deplibs= fi if test "$linkmode" = prog; then case $pass in dlopen) libs="$dlfiles" ;; dlpreopen) libs="$dlprefiles" ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test "$linkmode,$pass" = "lib,dlpreopen"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs="$dlprefiles" fi if test "$pass" = dlopen; then # Collect dlpreopened libraries save_deplibs="$deplibs" deplibs= fi for deplib in $libs; do lib= found=no case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test "$linkmode" != lib && test "$linkmode" != prog; then func_warning "\`-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test "$linkmode" = lib; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib="$searchdir/lib${name}${search_ext}" if test -f "$lib"; then if test "$search_ext" = ".la"; then found=yes else found=no fi break 2 fi done done if test "$found" != yes; then # deplib doesn't seem to be a libtool library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue else # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll="$l" done if test "X$ll" = "X$old_library" ; then # only static version available found=no func_dirname "$lib" "" "." ladir="$func_dirname_result" lib=$ladir/$old_library if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi fi ;; # -l *.ltframework) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test "$pass" = conv && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi if test "$pass" = scan; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test "$pass" = conv; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=no case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=yes fi ;; pass_all) valid_a_lib=yes ;; esac if test "$valid_a_lib" != yes; then echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." else echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" fi ;; esac continue ;; prog) if test "$pass" != link; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test "$pass" = conv; then deplibs="$deplib $deplibs" elif test "$linkmode" = prog; then if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=yes continue ;; esac # case $deplib if test "$found" = yes || test -f "$lib"; then : else func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" fi # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "\`$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir="$func_dirname_result" dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test "$linkmode,$pass" = "lib,link" || test "$linkmode,$pass" = "prog,scan" || { test "$linkmode" != prog && test "$linkmode" != lib; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test "$pass" = conv; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for \`$lib'" fi # This library was specified with -dlopen. if test "$pass" = dlopen; then if test -z "$libdir"; then func_fatal_error "cannot -dlopen a convenience library: \`$lib'" fi if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of \`$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir="$ladir" fi ;; esac func_basename "$lib" laname="$func_basename_result" # Find the relevant object directory and library name. if test "X$installed" = Xyes; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$libdir" fi test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir="$ladir" absdir="$abs_ladir" # Remove this search path later func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test "$pass" = dlpreopen; then if test -z "$libdir" && test "$linkmode" = prog; then func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" fi case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test "$linkmode" = lib; then deplibs="$dir/$old_library $deplibs" elif test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test "$linkmode" = prog && test "$pass" != link; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=no if test "$link_all_deplibs" != no || test -z "$library_names" || test "$build_libtool_libs" = no; then linkalldeplibs=yes fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if test "$linkalldeplibs" = yes; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test "$linkmode,$pass" = "prog,link"; then if test -n "$library_names" && { { test "$prefer_static_libs" = no || test "$prefer_static_libs,$installed" = "built,yes"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then # Make sure the rpath contains only unique directories. case "$temp_rpath:" in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if test "$alldeplibs" = yes && { test "$deplibs_check_method" = pass_all || { test "$build_libtool_libs" = yes && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test "$use_static_libs" = built && test "$installed" = yes; then use_static_libs=no fi if test -n "$library_names" && { test "$use_static_libs" = no || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule="" for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule="$dlpremoduletest" break fi done if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then echo if test "$linkmode" = prog; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test "$linkmode" = lib && test "$hardcode_into_libs" = yes; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname="$1" shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname="$dlname" elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc*) func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; esac eval soname=\"$soname_spec\" else soname="$realname" fi # Make a new name for the extract_expsyms_cmds to use soroot="$soname" func_basename "$soroot" soname="$func_basename_result" func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from \`$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for \`$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test "$linkmode" = prog || test "$opt_mode" != relink; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test "$hardcode_direct" = no; then add="$dir/$linklib" case $host in *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; *-*-sysv4*uw2*) add_dir="-L$dir" ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir="-L$dir" ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we can not # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null ; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library" ; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add="$dir/$old_library" fi elif test -n "$old_library"; then add="$dir/$old_library" fi fi esac elif test "$hardcode_minus_L" = no; then case $host in *-*-sunos*) add_shlibpath="$dir" ;; esac add_dir="-L$dir" add="-l$name" elif test "$hardcode_shlibpath_var" = no; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; relink) if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$dir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then add_shlibpath="$dir" add="-l$name" else lib_linked=no fi ;; *) lib_linked=no ;; esac if test "$lib_linked" != yes; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test "$linkmode" = prog; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test "$hardcode_direct" != yes && test "$hardcode_minus_L" != yes && test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_mode" = relink; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test "$hardcode_direct" = yes && test "$hardcode_direct_absolute" = no; then add="$libdir/$linklib" elif test "$hardcode_minus_L" = yes; then add_dir="-L$libdir" add="-l$name" elif test "$hardcode_shlibpath_var" = yes; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add="-l$name" elif test "$hardcode_automatic" = yes; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib" ; then add="$inst_prefix_dir$libdir/$linklib" else add="$libdir/$linklib" fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir="-L$libdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add="-l$name" fi if test "$linkmode" = prog; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test "$linkmode" = prog; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test "$hardcode_direct" != unsupported; then test -n "$old_library" && linklib="$old_library" compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test "$build_libtool_libs" = yes; then # Not a shared library if test "$deplibs_check_method" != pass_all; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system can not link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test "$module" = yes; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test "$linkmode" = lib; then if test -n "$dependency_libs" && { test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes || test "$link_static" = yes; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append newlib_search_path " $absdir" # Link against this library test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test "$link_all_deplibs" != no; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path="$deplib" ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of \`$dir'" absdir="$dir" fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names" ; then for tmp in $deplibrary_names ; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl" ; then depdepl="$absdir/$objdir/$depdepl" darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" path= fi fi ;; *) path="-L$absdir/$objdir" ;; esac else eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "\`$deplib' seems to be moved" path="-L$absdir" fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test "$pass" = link; then if test "$linkmode" = "prog"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs="$newdependency_libs" if test "$pass" = dlpreopen; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test "$pass" != dlopen; then if test "$pass" != conv; then # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= fi if test "$linkmode,$pass" != "prog,link"; then vars="deplibs" else vars="compile_deplibs finalize_deplibs" fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs ; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i="" ;; esac if test -n "$i" ; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test "$linkmode" = prog; then dlfiles="$newdlfiles" fi if test "$linkmode" = prog || test "$linkmode" = lib; then dlprefiles="$newdlprefiles" fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "\`-R' is ignored for archives" test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "\`-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "\`-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs="$output" func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form `libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test "$module" = no && \ func_fatal_help "libtool library \`$output' must begin with \`lib'" if test "$need_lib_prefix" != no; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test "$deplibs_check_method" != pass_all; then func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test "$dlself" != no && \ func_warning "\`-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test "$#" -gt 1 && \ func_warning "ignoring multiple \`-rpath's for a libtool library" install_libdir="$1" oldlibs= if test -z "$rpath"; then if test "$build_libtool_libs" = yes; then # Building a libtool convenience library. # Some compilers have problems with a `.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "\`-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "\`-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs="$IFS"; IFS=':' set dummy $vinfo 0 0 0 shift IFS="$save_ifs" test -n "$7" && \ func_fatal_help "too many parameters to \`-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major="$1" number_minor="$2" number_revision="$3" # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # which has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_revision" ;; freebsd-aout|freebsd-elf|qnx|sunos) current="$number_major" revision="$number_minor" age="0" ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age="$number_minor" revision="$number_minor" lt_irix_increment=no ;; esac ;; no) current="$1" revision="$2" age="$3" ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT \`$current' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION \`$revision' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE \`$age' must be a nonnegative integer" func_fatal_error "\`$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE \`$age' is greater than the current interface number \`$current'" func_fatal_error "\`$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; freebsd-aout) major=".$current" versuffix=".$current.$revision"; ;; freebsd-elf) major=".$current" versuffix=".$current" ;; irix | nonstopux) if test "X$lt_irix_increment" = "Xno"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring="$verstring_prefix$major.$revision" # Add in all the interfaces that we are compatible with. loop=$revision while test "$loop" -ne 0; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring_prefix$major.$iface:$verstring" done # Before this point, $major must not contain `.'. major=.$major versuffix="$major.$revision" ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix="$major.$age.$revision" ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=".$current.$age.$revision" verstring="$current.$age.$revision" # Add in all the interfaces that we are compatible with. loop=$age while test "$loop" -ne 0; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring="$verstring:${iface}.0" done # Make executables depend on our current version. func_append verstring ":${current}.0" ;; qnx) major=".$current" versuffix=".$current" ;; sunos) major=".$current" versuffix=".$current.$revision" ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 filesystems. func_arith $current - $age major=$func_arith_result versuffix="-$major" ;; *) func_fatal_configuration "unknown library version type \`$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring="0.0" ;; esac if test "$need_version" = no; then versuffix= else versuffix=".0.0" fi fi # Remove version info from name if versioning should be avoided if test "$avoid_version" = yes && test "$need_version" = no; then major= versuffix= verstring="" fi # Check to see if the archive will have undefined symbols. if test "$allow_undefined" = yes; then if test "$allow_undefined_flag" = unsupported; then func_warning "undefined symbols not allowed in $host shared libraries" build_libtool_libs=no build_old_libs=yes fi else # Don't allow undefined symbols. allow_undefined_flag="$no_undefined_flag" fi fi func_generate_dlsyms "$libname" "$libname" "yes" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_mode" != relink; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) if test "X$precious_files_regex" != "X"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles="$dlfiles" dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles="$dlprefiles" dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test "$build_libtool_libs" = yes; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test "$build_libtool_need_lc" = "yes"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release="" versuffix="" major="" newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib="$potent_lib" while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib="$potent_lib" # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib="" break 2 fi done done fi if test -n "$a_deplib" ; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib" ; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then for i in $predeps $postdeps ; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test "X$deplibs_check_method" = "Xnone"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test "$droppeddeps" = yes; then if test "$module" = yes; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using \`nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** \`nm' from GNU binutils and a full rebuild may help." fi if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test "$allow_undefined" = no; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test "$build_old_libs" = no; then oldlibs="$output_objdir/$libname.$libext" build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs="$new_libs" # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test "$build_libtool_libs" = yes; then # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_mode" != relink && rpath="$compile_rpath$rpath" for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath="$finalize_shlibpath" test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname="$1" shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname="$realname" fi if test -z "$dlname"; then dlname=$soname fi lib="$output_objdir/$realname" linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols="$output_objdir/$libname.uexp" func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile if test "x`$SED 1q $export_symbols`" != xEXPORTS; then # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols="$export_symbols" export_symbols= always_export_symbols=yes fi fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs="$IFS"; IFS='~' for cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS="$save_ifs" if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs="$tmp_deplibs" if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test "$compiler_needs_object" = yes && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test "X$skipped_export" != "X:" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then output=${output_objdir}/${output_la}.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then output=${output_objdir}/${output_la}.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test "$compiler_needs_object" = yes; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-${k}.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test "X$objlist" = X || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test "$k" -eq 1 ; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-${k}.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-${k}.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi if ${skipped_export-false}; then func_verbose "generating symbol list for \`$libname.la'" export_symbols="$output_objdir/$libname.exp" $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi fi test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs="$IFS"; IFS='~' for cmd in $concat_cmds; do IFS="$save_ifs" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi if ${skipped_export-false}; then if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols="$export_symbols" test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi fi libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test "$module" = yes && test -n "$module_cmds" ; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs="$IFS"; IFS='~' for cmd in $cmds; do IFS="$save_ifs" eval cmd=\"$cmd\" $opt_silent || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test "$opt_mode" = relink; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS="$save_ifs" # Restore the uninstalled library and exit if test "$opt_mode" = relink; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test "$module" = yes || test "$export_dynamic" = yes; then # On all known operating systems, these are identical. dlname="$soname" fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then func_warning "\`-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "\`-l' and \`-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "\`-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "\`-R' is ignored for objects" test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for objects" test -n "$release" && \ func_warning "\`-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object \`$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj="$output" ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # reload_cmds runs $LD directly, so let us get rid of # -Wl from whole_archive_flag_spec and hope we can get by with # turning comma into space.. wl= if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test output="$obj" func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi if test "$build_libtool_libs" != yes; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS fi if test -n "$pic_flag" || test "$pic_mode" != default; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output="$libobj" func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "\`-version-info' is ignored for programs" test -n "$release" && \ func_warning "\`-release' is ignored for programs" test "$preload" = yes \ && test "$dlopen_support" = unknown \ && test "$dlopen_self" = unknown \ && test "$dlopen_self_static" = unknown && \ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test "$tagname" = CXX ; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath="$rpath" rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs="$libdir" else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir="$hardcode_libdirs" eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath="$rpath" if test -n "$libobjs" && test "$build_old_libs" = yes; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" "no" # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=yes case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) if test "$need_relink" = no || test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; esac if test "$wrappers_required" = no; then # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command="$compile_command$compile_rpath" # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.${objext}"; then func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' fi exit $exit_status fi if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test "$no_install" = yes; then # We don't need to create a wrapper script. link_command="$compile_var$compile_command$compile_rpath" # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi if test "$hardcode_action" = relink; then # Fast installation is not supported link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" func_warning "this platform does not like uninstalled shared libraries" func_warning "\`$output' will be relinked during installation" else if test "$fast_install" != no; then link_command="$finalize_var$compile_command$finalize_rpath" if test "$fast_install" = yes; then relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` else # fast_install is set to needless relink_command= fi else link_command="$compile_var$compile_command$compile_rpath" relink_command="$finalize_var$finalize_command$finalize_rpath" fi fi # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource="$output_path/$objdir/lt-$output_name.c" cwrapper="$output_path/$output_name.exe" $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host" ; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do if test "$build_libtool_libs" = convenience; then oldobjs="$libobjs_save $symfileobj" addlibs="$convenience" build_libtool_libs=no else if test "$build_libtool_libs" = module; then oldobjs="$libobjs_save" build_libtool_libs=no else oldobjs="$old_deplibs $non_pic_objects" if test "$preload" = yes && test -f "$symfileobj"; then func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase="$func_basename_result" case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj" ; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test "X$oldobjs" = "X" ; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test "$build_old_libs" = yes && old_library="$libname.$libext" func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test "$hardcode_automatic" = yes ; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test "$installed" = yes; then if test -z "$install_libdir"; then break fi output="$output_objdir/$outputname"i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name="$func_basename_result" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs="$newdependency_libs" newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name="$func_basename_result" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "\`$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles="$newdlprefiles" else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that can not go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test "$installed" = no && test "$need_relink" = yes; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } { test "$opt_mode" = link || test "$opt_mode" = relink; } && func_mode_link ${1+"$@"} # func_mode_uninstall arg... func_mode_uninstall () { $opt_debug RM="$nonopt" files= rmforce= exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic="$magic" for arg do case $arg in -f) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif test "$rmforce" = yes; then continue fi rmfiles="$file" case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test "$pic_object" != none; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test "$non_pic_object" != none; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_mode" = clean ; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the ${objdir}s in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } { test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # in which we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: # vi:sw=2 thepeg-1.8.0.orig/Config/depcomp0000755000175000017500000005055211756366735014743 0ustar sunsun#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2012-03-27.16; # UTC # Copyright (C) 1999-2012 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # A tabulation character. tab=' ' # A newline character. nl=' ' if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency informations. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' "$nl" < "$tmpdepfile" | ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependent.h'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler anf tcc (Tiny C Compiler) understand '-MD -MF file'. # However on # $CC -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\': # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... # tcc 0.9.26 (FIXME still under development at the moment of writing) # will emit a similar output, but also prepend the continuation lines # with horizontal tabulation characters. "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form 'foo.o: dependent.h', # or 'foo.o: dep1.h dep2.h \', or ' dep3.h dep4.h \'. # Do two passes, one to just change these to # '$object: dependent.h' and one to simply 'dependent.h:'. sed -e "s/^[ $tab][ $tab]*/ /" -e "s,^[^:]*:,$object :," \ < "$tmpdepfile" > "$depfile" sed ' s/[ '"$tab"'][ '"$tab"']*/ /g s/^ *// s/ *\\*$// s/^[^:]*: *// /^$/d /:$/d s/$/ :/ ' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" sed -e 's,^.*\.[a-z]*:['"$tab"' ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test "$stat" = 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed 's:^['"$tab"' ]*[^:'"$tab"' ][^:][^:]*\:['"$tab"' ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' "$nl" < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' "$nl" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: thepeg-1.8.0.orig/Config/install-sh0000755000175000017500000003325511756366733015371 0ustar sunsun#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: thepeg-1.8.0.orig/Config/HepMCHelper.h0000644000175000017500000000131111747772425015615 0ustar sunsun// -*- C++ -*- // // HepMCHelper_HepMC.h is a part of Herwig++ - A multi-purpose Monte Carlo event generator // Copyright (C) 2002-2011 The Herwig Collaboration // // Herwig++ is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is a helper header to implement HepMC conversions // #include "ThePEG/Vectors/HepMCConverter.h" #include "HepMC/GenEvent.h" namespace ThePEG { /** * Struct for HepMC conversion */ template<> struct HepMCTraits : public HepMCTraitsBase {}; } thepeg-1.8.0.orig/Config/Pointers.h0000644000175000017500000001201511747772425015327 0ustar sunsun// -*- C++ -*- // // Pointers.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Pointers_H #define ThePEG_Pointers_H /** \file * This file declares typedefs of commonly used pointers in * ThePEG. The standard way of declaring the typedefs is by using the * ThePEG_DECLARE_CLASS_POINTERS macro which in turn used the Ptr * traits class to define normal pointers, normal const pointers, * transient pointers and transient const pointers for a given * class. For the standard classes, the following typedefs should be * introduced for a class abbreviated with T: * TPtr for a normal (smart) pointer, cTPtr * for a normal const pointer, tTPtr for a transient * pointer and tcTPtr for transient const pointer. * * Do not make changes in this file. If you need to modify any of the * standard pointer declarations used in ThePEG, edit a copy of this * file and include it in an alternative config file which can be * included in the main ThePEG.h config file using the macro * ThePEG_ALTERNATE_CONFIG. */ #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** This macro helps us to declare pointers and stuff to standard classes. */ #define ThePEG_DECLARE_TEMPLATE_POINTERS(full, abbrev) \ /** Alias for a reference counted pointer to full. */ \ typedef typename ThePEG::Ptr::pointer abbrev; \ /** Alias for a reference counted pointer to a const full. */ \ typedef typename ThePEG::Ptr::const_pointer c ## abbrev; \ /** Alias for a transient pointer to full. */ \ typedef typename ThePEG::Ptr::transient_pointer t ## abbrev; \ /** Alias for a transient pointer to a const full. */ \ typedef typename ThePEG::Ptr::transient_const_pointer tc ## abbrev /** This macro helps us to declare pointers and stuff to standard classes. */ #define ThePEG_DECLARE_POINTERS(full, abbrev) \ /** Alias for a reference counted pointer to full. */ \ typedef ThePEG::Ptr::pointer abbrev; \ /** Alias for a reference counted pointer to a const full. */ \ typedef ThePEG::Ptr::const_pointer c ## abbrev; \ /** Alias for a transient pointer to full. */ \ typedef ThePEG::Ptr::transient_pointer t ## abbrev; \ /** Alias for a transient pointer to a const full. */ \ typedef ThePEG::Ptr::transient_const_pointer tc ## abbrev /** This macro helps us to declare pointers and stuff to standard classes. */ #define ThePEG_DECLARE_CLASS_POINTERS(full, abbrev) \ class full; \ ThePEG_DECLARE_POINTERS(full, abbrev) ThePEG_DECLARE_CLASS_POINTERS(InterfacedBase,IBPtr); ThePEG_DECLARE_CLASS_POINTERS(Interfaced,IPtr); ThePEG_DECLARE_CLASS_POINTERS(ParticleData,PDPtr); ThePEG_DECLARE_CLASS_POINTERS(MatcherBase,PMPtr); ThePEG_DECLARE_CLASS_POINTERS(DecayMode,DMPtr); ThePEG_DECLARE_CLASS_POINTERS(Particle,PPtr); ThePEG_DECLARE_CLASS_POINTERS(EventGenerator,EGPtr); ThePEG_DECLARE_CLASS_POINTERS(EventHandler,EHPtr); ThePEG_DECLARE_CLASS_POINTERS(StepHandler,StepHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(Hint,HintPtr); ThePEG_DECLARE_CLASS_POINTERS(HadronizationHandler,HadrHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(CascadeHandler,CascHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(MultipleInteractionHandler,MIHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(DecayHandler,DecayHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(PileupHandler,PileHdlPtr); ThePEG_DECLARE_CLASS_POINTERS(LuminosityFunction,LumiFnPtr); ThePEG_DECLARE_CLASS_POINTERS(PartonExtractor,PExtrPtr); ThePEG_DECLARE_CLASS_POINTERS(RandomGenerator,RanGenPtr); ThePEG_DECLARE_CLASS_POINTERS(AnalysisHandler,AnaPtr); ThePEG_DECLARE_CLASS_POINTERS(EventManipulator, EvtManipPtr); ThePEG_DECLARE_CLASS_POINTERS(Decayer,DecayerPtr); ThePEG_DECLARE_CLASS_POINTERS(Event,EventPtr); ThePEG_DECLARE_CLASS_POINTERS(Collision,CollPtr); ThePEG_DECLARE_CLASS_POINTERS(Step,StepPtr); ThePEG_DECLARE_CLASS_POINTERS(SubProcess,SubProPtr); ThePEG_DECLARE_CLASS_POINTERS(Strategy,StrategyPtr); ThePEG_DECLARE_CLASS_POINTERS(XComb,XCombPtr); ThePEG_DECLARE_CLASS_POINTERS(RemnantHandler,RemHPtr); ThePEG_DECLARE_CLASS_POINTERS(PDFBase,PDFPtr); ThePEG_DECLARE_CLASS_POINTERS(StandardModelBase,SMPtr); ThePEG_DECLARE_CLASS_POINTERS(ColourBase,CBPtr); ThePEG_DECLARE_CLASS_POINTERS(SpinInfo,SpinPtr); ThePEG_DECLARE_CLASS_POINTERS(EventInfoBase,EIPtr); ThePEG_DECLARE_CLASS_POINTERS(ReweightBase,ReweightPtr); ThePEG_DECLARE_CLASS_POINTERS(ColourLine,ColinePtr); ThePEG_DECLARE_POINTERS(Base,BPtr); // ThePEG_DECLARE_CLASS_POINTERS(,); } // #include "Pointers.icc" #ifndef ThePEG_TEMPLATES_IN_CC_FILE // #include "Pointers.tcc" #endif #endif /* ThePEG_Pointers_H */ thepeg-1.8.0.orig/Config/ar-lib0000755000175000017500000001330211756366733014450 0ustar sunsun#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2012 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat < PDVector; /** A vector of pointers to const ParticleData objects. */ typedef vector cPDVector; /** A vector of transient pointers to ParticleData objects. */ typedef vector tPDVector; /** A vector of transient pointers to const ParticleData objects. */ typedef vector tcPDVector; /** A set of pointers to MatcherBase objects. */ ThePEG_DECLARE_SET(PMPtr,MatcherSet); /** A set of pointers to DecayMode objects */ ThePEG_DECLARE_SET(DMPtr,DecayModeSet); /** A set of pointers to InterfacedBase objects */ ThePEG_DECLARE_SET(IBPtr,ObjectSet); /** A set of pointers to InterfacedBase objects */ ThePEG_DECLARE_SET(IBPtr,DependencySet); /** A map relating integers to ParticleData objects */ ThePEG_DECLARE_MAP(long,PDPtr,ParticleMap); /** A map relating character strings to InterfacedBase objects */ ThePEG_DECLARE_MAP(string,IBPtr,ObjectMap); /** A map relating InterfacedBase objects to corresponding * DependencySet containers */ ThePEG_DECLARE_MAP(IBPtr,DependencySet,DependencyMap); /** A vector of pointers to InterfacedBase objects. */ typedef vector IVector; /** A vector of pointers to const InterfacedBase objects. */ typedef vector CIVector; /** A vector of pointers to Particle objects. */ typedef vector ParticleVector; /** A vector of pointers to Particle objects. */ typedef vector PVector; /** A vector of pointers to const Particle objects. */ typedef vector cPVector; /** A vector of transient pointers to Particle objects. */ typedef vector tPVector; /** A vector of transient pointers to const Particle objects. */ typedef vector tcPVector; /** A list of pointers to Particle objects. */ typedef list ParticleList; /** A list of pointers to Particle objects. */ typedef list PList; /** A list of pointers to const Particle objects. */ typedef list cPList; /** A list of transient pointers to Particle objects. */ typedef list tPList; /** A list of transient pointers to const Particle objects. */ typedef list tcPList; /** A map relating character strings to bare pointers to InterfaceBase objects */ ThePEG_DECLARE_MAP(string,const InterfaceBase *,InterfaceMap); /** A rebinder for InterfacedBase objects. */ typedef Rebinder TranslationMap; /** A map relating character strings to EventGenerator objects */ ThePEG_DECLARE_MAP(string,EGPtr,GeneratorMap); /** A vector of pointers to AnalysisHandler objects. */ typedef vector AnalysisVector; /** A pair of pointers to ParticleData objects. */ typedef pair PDPair; /** A pair of pointers to const ParticleData objects. */ typedef pair cPDPair; /** A pair of transient pointers to ParticleData objects. */ typedef pair tPDPair; /** A pair of transient pointers to const ParticleData objects. */ typedef pair tcPDPair; /** A pair of pointers to Particle objects. */ typedef pair PPair; /** A pair of pointers to const Particle objects. */ typedef pair cPPair; /** A pair of transient pointers to const Particle objects. */ typedef pair tPPair; /** A pair of transient pointers to const Particle objects. */ typedef pair tcPPair; /** An Interval in scale. */ typedef Interval SInterval; /** A vector of intervals of scales. */ typedef vector SIntervalVector; /** A vector of pairs of transient pointers to PartonBins. */ typedef vector tPartonPairVec; /** A pair of transient pointers to ColourLine objects. */ typedef pair tColinePair; /** A set of pointers to DecayMode objects. */ ThePEG_DECLARE_SET(tDMPtr,DecaySet); /** A set oc character strings. */ ThePEG_DECLARE_SET(string,StringSet); /** A vector of energies. */ typedef vector EnergyVector; /** A vector of pointers to EventInfoBase objects. */ typedef vector EIVector; /** A vector of doubles. */ typedef vector DVector; /** A pair of doubles. */ typedef pair DPair; /** @name Global shift operators to simplify adding and removing * objects to containers. */ //@{ /** * Overload the left shift operator for vector to push_back objects to * a vector. * @param tv the vector being filled by push_back. * @param u the object being pushed back. * @return a referens to the vector. */ template vector & operator<<(vector & tv, const U & u) { tv.push_back(u); return tv; } /** * Overload the right shift operator for vector to pop objects from * a vector. * @param tv the vector being popped by pop_back. * @param u the object at the back of the vector before popping. * @return a referens to the vector. */ template vector & operator>>(vector & tv, U & u) { u = tv.back(); tv.pop_back(); return tv; } /** * Overload the left shift operator for stack to push objects to * a vector. * @param ts the stack being filled by push. * @param u the object being pushed. * @return a referens to the stack. */ template stack & operator<<(stack & ts, const U & u) { ts.push(u); return ts; } /** * Overload the right shift operator for stack to pop objects from * a stack. * @param ts the stack being popped. * @param u the object at the top of the stack before popping. * @return a referens to the stack. */ template stack & operator>>(stack & ts, U & u) { u = ts.top(); ts.pop(); return ts; } /** * Overload the left shift operator for deque to push_back objects to * a deque. * @param td the deque being filled by push_back. * @param u the object being pushed back. * @return a referens to the deque. */ template deque & operator<<(deque & td, const U & u) { td.push_back(u); return td; } /** * Overload the right shift operator for vector to pop objects from * a deque. * @param td the deque being popped by pop_front. * @param u the object at the front of the deque before popping. * @return a referens to the deque. */ template deque & operator>>(deque & td, U & u) { u = td.front(); td.pop_front(); return td; } /** * Overload the left shift operator for std::set to insert objects in * a set. * @param ts the set being filled by insert. * @param u the object being inserted. * @return a referens to the set. */ template set & operator<<(set & ts, const U & u) { ts.insert(u); return ts; } //@} /** @name Functions for I/O of containers of objects with unit. */ //@{ /** * Ouput a vector of objects with the specified unit. * @param os the stream used for output. * @param v the vector to be output. * @param u the unit to be used. */ template void ounitstream(OStream & os, const vector & v, UT & u) { os << v.size(); for ( typename vector::const_iterator i = v.begin(); i != v.end(); ++i ) os << ounit(*i, u); } /** * Input a vector of objects with the specified unit. * @param is the stream used for input. * @param v the vector to be input. * @param u the unit to be used. */ template void iunitstream(IStream & is, vector & v, UT & u) { typename vector::size_type l; is >> l; v.resize(l); for ( typename vector::iterator i = v.begin(); i != v.end(); ++i ) is >> iunit(*i, u); } /** * Ouput a set of objects with the specified unit. * @param os the stream used for output. * @param s the set to be output. * @param u the unit to be used. */ template void ounitstream(OStream & os, const set & s, UT & u) { os << s.size(); for ( typename set::const_iterator i = s.begin(); i != s.end(); ++i ) os << ounit(*i, u); } /** * Input a set of objects with the specified unit. * @param is the stream used for input. * @param s the set to be input. * @param u the unit to be used. */ template void iunitstream(IStream & is, set & s, UT & u) { s.clear(); typename set::size_type l; is >> l; T t; while ( l-- ) { is >> iunit(t, u); s.insert(t); } } /** * Ouput a map of keys and objects where the objects are output with * the specified unit. * @param os the stream used for output. * @param m the map to be output. * @param u the unit to be used for the mapped objects. */ template void ounitstream(OStream & os, const map & m, UT & u) { os << m.size(); for ( typename map::const_iterator i = m.begin(); i != m.end(); ++i ) os << i->first << ounit(i->second, u); } /** * Input a map of keys and objects where the objects are input with * the specified unit. * @param is the stream used for input. * @param m the map to be input. * @param u the unit to be used for the mapped objects. */ template void iunitstream(IStream & is, map & m, UT & u) { m.clear(); typename map::size_type l; is >> l; T t; K k; while ( l-- ) { is >> k >> iunit(t, u); m[k] = t; } } //@} } #endif /* ThePEG_Containers_H */ thepeg-1.8.0.orig/Config/ThePEG.h0000644000175000017500000001007411747772425014603 0ustar sunsun// -*- C++ -*- // // ThePEG.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_H #define ThePEG_H /** \file ThePEG.h * This is the main config header file for ThePEG. Do not make * changes in this file. If you need to modify anything, edit a copy * of the file which can be included instead of this file using the * macro ThePEG_ALTERNATE_CONFIG. */ #ifndef ThePEG_ALTERNATE_CONFIG #include "ThePEG/Pointer/Ptr.h" #include "ThePEG/Pointer/PtrTraits.h" #include "ThePEG/Pointer/RCPtr.h" #include "ThePEG/Utilities/Rebinder.fh" #include "ThePEG/Utilities/Interval.fh" #include "ThePEG/Utilities/ClassDescription.fh" #include "ThePEG/Interface/InterfaceBase.fh" #include "ThePEG/Persistency/PersistentOStream.fh" #include "ThePEG/Persistency/PersistentIStream.fh" #include "TemplateTools.h" #include "Complex.h" #include "Unitsystem.h" #include "Constants.h" #include "std.h" /** * This is the main namespace within which all identifiers in ThePEG * are declared. External packages based on ThePEG should not * introduce identifiers in the ThePEG namespace, but in a separate * namespace which need not be nested within the ThePEG namespace. */ namespace ThePEG { // Introduce some identifiers in the ThePEG namespace/ using namespace ThePEG::Pointer; using ThePEG::Pointer::Ptr; using namespace ThePEG::Units; /** * Define the base class from which all (polymorphic) classes in * ThePEG are derived. */ struct Base: public ReferenceCounted { /** The virtual destructor */ virtual ~Base() {} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init() {} /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger. Simply calls the virtual * debugme() function. */ void debug() const; /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; }; /** * Define the base class from which all persistent classes in * ThePEG are derived. */ typedef Base PersistentBase; /** * TraitsType is an empty, non-polymorphic, base class. It is used as * a base class of all traits classes in ThePEG in order to group them * together in the documentation. It currently serves no other * purpose. */ struct TraitsType {}; /** * A standard exception class to be used for vetoing a whole event. */ struct Veto { /** the default constructor. */ Veto(); }; /** * A standard exception class to be used to temporarily stop the * generation of an event. */ struct Stop {}; /** * The square function should really have been included in the * standard C++ library. */ template inline typename BinaryOpTraits::MulT sqr(const T& x) { return x*x; } /** * The templated abs function should really have been included in the * standard C++ library. */ template inline T abs(const T & t) { return t < T()? -t: t; } // Debugging in ThePEG may be swithced off completely by this // compilation swithc, eliminating possible overhead in error // checking. #ifndef ThePEG_NO_DEBUG /** Macro for accessing debug functions to enable compile-time disabling. */ #define ThePEG_DEBUG_LEVEL Debug::level /** Macro for accessing debug functions to enable compile-time disabling. */ #define ThePEG_DEBUG_ITEM(item) Debug::debugItem(item) #else /** Macro for accessing debug functions to enable compile-time disabling. */ #define ThePEG_DEBUG_LEVEL 0 /** Macro for accessing debug functions to enable compile-time disabling. */ #define ThePEG_DEBUG_ITEM(item) false #endif } #include "Pointers.h" #include "Containers.h" #else #include ThePEG_ALTERNATIVE_CONFIG #endif #endif /* ThePEG_H */ thepeg-1.8.0.orig/Config/config.guess0000755000175000017500000012743211756366733015706 0ustar sunsun#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in i386) eval $set_cc_for_build if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: thepeg-1.8.0.orig/Config/PhysicalQty.h0000644000175000017500000002224311747772425016002 0ustar sunsun// -*- C++ -*- // // PhysicalQty.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef Physical_Qty_H #define Physical_Qty_H #include "TemplateTools.h" #include /** @file * * The PhysicalQty class allows compile-time checking of dimensional * correctness. Mathematical operations that are inconsistent are * flagged as type errors. * * Do not use the classes directly in ThePEG, use the wrappers defined * in Units.h or Phys_Qty.h instead. */ namespace ThePEG { /// Helper class to construct zero unitful quantities. struct ZeroUnit { /** Automatic conversion to double. */ operator double() const { return 0.0; } }; /// ZERO can be used as zero for any unitful quantity. const ZeroUnit ZERO = ZeroUnit(); /// Helper classes to extend or shorten fractions //@{ /** * Template to help with fractional powers of dimensions */ template struct QtyHelper { /// The numerator, indicating failure. static const int I = -999999; }; /** * Template to help with fractional powers of dimensions */ template struct QtyHelper<0,II> { /// The new numerator. static const int I = II; }; /** * Template to help with fractional powers of dimensions */ template struct QtyInt { /// The new numerator. static const int I = QtyHelper<(DI2*II)%DI,(DI2*II)/DI>::I; }; //@} /** * This template class allows the compiler to check calculations with * physical quantities for dimensional correctness. A quantity can be * composed of arbitrary fractional powers of length L, energy E and * charge Q. Commonly used quantities should be typedef'ed (see Units.h). * * Some member functions can break dimensional consistency if the user * is not careful; these are marked explicitly. * * Do not use this class directly in ThePEG, use the pre-defined quantities * from Units.h or the wrapper in Phys_Qty.h instead. */ template class Qty { private: /// Constructor from raw values. Breaks consistency. Qty(double val) : rawValue_(val) {} public: /// The name of the class for persistent IO static std::string className() { std::ostringstream os; os << "Qty<" << L << ',' << E << ',' << Q << ',' << DL << ',' << DE << ',' << DQ << '>'; return os.str(); } /// The squared type. typedef Qty<2*L,2*E,2*Q,DL,DE,DQ> Squared; /// Basic unit of this quantity. static Qty baseunit() { return Qty(1.0); } /// Default constructor to 0. Qty() : rawValue_(0.0) {} /// Default constructor to 0. Qty(ZeroUnit) : rawValue_(0.0) {} /// Constructor from a compatible quantity template Qty(const Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> & q) : rawValue_(q.rawValue()) {} /// Access to the raw value. Breaks consistency. double rawValue() const { return rawValue_; } /// Assignment multiplication by dimensionless number. Qty & operator*=(double x) { rawValue_ *= x; return *this; } /// Assignment division by dimensionless number. Qty & operator/=(double x) { rawValue_ /= x; return *this; } /// Assignment addition with compatible quantity. template Qty & operator+=(const Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> x) { rawValue_ += x.rawValue(); return *this; } /// Assignment subtraction with compatible quantity. template Qty & operator-=(const Qty::I, QtyInt::I, QtyInt::I, DL2,DE2,DQ2> x) { rawValue_ -= x.rawValue(); return *this; } private: /// The raw value in units of Qty::baseunit(). double rawValue_; }; /// Specialization of Qty for <0,0,0> with conversions to double. template class Qty<0,0,0,DL,DE,DQ> { public: /// The squared type. typedef Qty<0,0,0,DL,DE,DQ> Squared; /// Basic unit of this quantity. static double baseunit() { return 1.0; } /// Default constructor to 0. Qty(ZeroUnit) : rawValue_(0.0) {} /// Default constructor from a double. Qty(double x = 0.0) : rawValue_(x) {} /// Constructor from a compatible quantity template Qty(const Qty<0,0,0,DL2,DE2,DQ2> & q) : rawValue_(q.rawValue()) {} /// Access to the raw value. double rawValue() const { return rawValue_; } /// Cast to double. operator double() const { return rawValue_; } /// Assignment multiplication by dimensionless number. Qty<0,0,0,DL,DE,DQ> & operator*=(double x) { rawValue_ *= x; return *this; } /// Assignment division by dimensionless number. Qty<0,0,0,DL,DE,DQ> & operator/=(double x) { rawValue_ /= x; return *this; } /// Assignment addition with compatible quantity. template Qty<0,0,0,DL,DE,DQ> & operator+=(const Qty<0,0,0,DL2,DE2,DQ2> x) { rawValue_ += x.rawValue(); return *this; } /// Assignment subtraction with compatible quantity. template Qty<0,0,0,DL,DE,DQ> & operator-=(const Qty<0,0,0,DL2,DE2,DQ2> x) { rawValue_ -= x.rawValue(); return *this; } /// Assignment addition with double. Qty<0,0,0,DL,DE,DQ> & operator+=(double x) { rawValue_ += x; return *this; } /// Assignment subtraction with double. Qty<0,0,0,DL,DE,DQ> & operator-=(double x) { rawValue_ -= x; return *this; } private: /// The raw value. double rawValue_; }; /// @name Result types for binary operations. //@{ /** * BinaryOpTraits should be specialized with typdefs called MulT and * DivT which gives the type resulting when multiplying and dividing * the template argument types respectively. */ template struct BinaryOpTraits; /** @cond TRAITSPECIALIZATIONS */ template struct BinaryOpTraits, Qty > { /** The type resulting from multiplication of the template type with itself. */ typedef Qty MulT; /** The type resulting from division of one template type with another. */ typedef Qty DivT; }; template struct BinaryOpTraits, Qty > { /** The type resulting from multiplication of the template type with itself. */ typedef Qty<2*L1,2*E1,2*Q1, DL1,DE1,DQ1> MulT; /** The type resulting from division of one template type with another. */ typedef double DivT; }; /** * Multiplication template */ template struct BinaryOpTraits > { /** The type resulting from multiplication of the template type with itself. */ typedef Qty MulT; /** The type resulting from division of one template type with another. */ typedef Qty<-L1,-E1,-Q1, DL1,DE1,DQ1> DivT; }; /** * Multiplication template */ template struct BinaryOpTraits, double> { /** The type resulting from multiplication of the template type with itself. */ typedef Qty MulT; /** The type resulting from division of one template type with another. */ typedef Qty DivT; }; //@} /// @name Type traits for alternative code generation. //@{ /** Type traits for alternative code generation*/ template struct TypeTraits > { /** Enum for dimensions*/ enum { hasDimension = true }; /// Type switch set to dimensioned type. typedef DimensionT DimType; static const Qty baseunit; }; /** Type traits for alternative code generation*/ template const Qty TypeTraits >::baseunit = Qty::baseunit(); /** Type traits for alternative code generation*/ template struct TypeTraits > { /** Enum for dimensions*/ enum { hasDimension = false }; /// Type switch set to standard type. typedef StandardT DimType; static const double baseunit; }; /** Type traits for alternative code generation*/ template const double TypeTraits >::baseunit = 1.0; //@} /** @endcond */ } #endif thepeg-1.8.0.orig/Config/LWH.h.in0000644000175000017500000000010211747772425014555 0ustar sunsun/* define if AIDA headers are installed */ #undef LWH_USING_AIDA thepeg-1.8.0.orig/Config/std.h0000644000175000017500000006166111747772425014331 0ustar sunsun// -*- C++ -*- // // std.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_std_H #define ThePEG_std_H /** \file * This file introduces a number of std:: classes into * the ThePEG namespace. Also introduces some useful functions for * standard library classes. * * Do not make changes in this file. If you want to use alternatives * to the std:: classes in ThePEG, edit a copy of this * file and include it in an alternative config file which can be * included in the main ThePEG.h config file using the macro * ThePEG_ALTERNATE_CONFIG. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace std { /** @cond TRAITSPECIALIZATIONS */ /** * This specialization of the std::less class is needed in order to be * able use put pointers to type_info objects as keys in maps and * sets. */ template <> struct less : public binary_function { /** * This is the function called when comparing two pointers to * type_info. */ bool operator()(const type_info * x, const type_info * y) const { return x->before(*y); } }; /** @endcond */ } /** @cond SHOWOSXWORKAROUNDS */ // Workarounds for OS X #if defined __APPLE__ && defined __MACH__ extern "C" int isnan(double) throw(); extern "C" int isinf(double) throw(); #endif /** @endcond */ namespace ThePEG { using std::deque; using std::stack; using std::vector; using std::multiset; using std::set; using std::map; using std::list; using std::multimap; using std::pair; using std::make_pair; using std::less; using std::string; using std::type_info; using std::exception; using std::range_error; using std::ios; using std::ostream; using std::istream; using std::ofstream; using std::ifstream; using std::ostringstream; using std::istringstream; using std::cin; using std::cout; using std::cerr; using std::endl; using std::flush; using std::setprecision; using std::setw; using std::swap; using std::min; using std::max; using std::mem_fun; using std::sqrt; using std::pow; using std::atan2; /** Square root of an integer. */ inline double sqrt(int x) { return std::sqrt(double(x)); } /** Check if a given object is a part of a container. */ template inline bool member(const Container & c, const Key & k) { return c.find(k) != c.end(); } /** Check if a given object is a part of a vector. */ template inline bool member(const vector & v, const Key & k) { for ( typename vector::const_iterator i = v.begin(); i != v.end(); ++i ) if ( *i == k ) return true; return false; // return find(v.begin(), v.end(), k) != v.end(); } /** Return an insert iterator for a given container. */ template inline std::insert_iterator inserter(Cont & c) { return std::insert_iterator(c, c.end()); } /** Return an insert iterator for a given vector. Overrides the * general version. */ template inline std::back_insert_iterator< vector > inserter(vector & v) { return back_inserter(v); } /** Return an insert iterator for a given vector. Overrides the * general version. */ template inline std::back_insert_iterator< deque > inserter(deque & v) { return back_inserter(v); } /** Stream manipulator setting an ostream to left-adjust its ouput. */ inline ostream& left(ostream& os) { os.setf(ios::left, ios::adjustfield); return os; } /** Stream manipulator setting an ostream to right-adjust its ouput. */ inline ostream& right(ostream& os) { os.setf(ios::right, ios::adjustfield); return os; } } #ifndef ThePEG_WRAP_STL_CONTAINERS /** Macro for declaring a set. */ #define ThePEG_DECLARE_SET(VALTYPE,NAME) \ /** A set of VALTYPE. */ \ typedef set > NAME /** Macro for declaring a multiset. */ #define ThePEG_DECLARE_MULTISET(VALTYPE,NAME) \ /** A multiset of VALTYPE. */ \ typedef multiset > NAME /** Macro for declaring a map. */ #define ThePEG_DECLARE_MAP(KEYTYPE,VALTYPE,NAME) \ /** A map of VALTYPE indexed by KEYTYPE. */ \ typedef map > NAME /** Macro for implementing a set. */ #define ThePEG_IMPLEMENT_SET(VALTYPE,NAME) /** Macro for implementing a multiset. */ #define ThePEG_IMPLEMENT_MULTISET(VALTYPE,NAME) /** Macro for implementing a map. */ #define ThePEG_IMPLEMENT_MAP(KEYTYPE,VALTYPE,NAME) #else /** Macro for declaring a set. */ #define ThePEG_DECLARE_SET(VALTYPE,NAME) \ class NAME : public set > { \ public: \ typedef set > SETTYPE; \ NAME(); \ explicit NAME(const key_compare & c, \ const allocator_type & a = allocator_type()); \ template \ NAME(InputIterator first, InputIterator last) \ : SETTYPE(first, last) {} \ template \ NAME(InputIterator first, InputIterator last, const key_compare & c, \ const allocator_type & a = allocator_type()) \ : SETTYPE(first, last, c, a) {} \ NAME(const SETTYPE & s); \ NAME(const NAME & s); \ ~NAME(); \ NAME & operator=(const NAME &); \ NAME & operator=(const SETTYPE &); \ pair insert(const value_type & x); \ iterator insert(iterator position, const value_type & x); \ template \ void insert(InputIterator first, InputIterator last) { \ SETTYPE::insert(first, last); \ } \ void erase(iterator position); \ size_type erase(const key_type & x); \ void erase(iterator first, iterator last); \ void clear(); \ iterator find(const key_type & x) const; \ size_type count(const key_type & x) const; \ iterator lower_bound(const key_type & x) const; \ iterator upper_bound(const key_type & x) const; \ pair equal_range(const key_type & x) const; \ } /** Macro for declaring a multiset. */ #define ThePEG_DECLARE_MULTISET(VALTYPE,NAME) \ class NAME : \ public multiset > { \ public: \ typedef multiset > SETTYPE;\ NAME(); \ explicit NAME(const key_compare & c, \ const allocator_type & a = allocator_type()); \ template \ NAME(InputIterator first, InputIterator last) \ : SETTYPE(first, last) {} \ template \ NAME(InputIterator first, InputIterator last, const key_compare & c, \ const allocator_type & a = allocator_type()) \ : SETTYPE(first, last, c, a) {} \ NAME(const SETTYPE & s); \ NAME(const NAME & s); \ ~NAME(); \ NAME & operator=(const NAME &); \ NAME & operator=(const SETTYPE &); \ iterator insert(const value_type & x); \ iterator insert(iterator position, const value_type & x); \ template \ void insert(InputIterator first, InputIterator last) { \ SETTYPE::insert(first, last); \ } \ void erase(iterator position); \ size_type erase(const key_type & x); \ void erase(iterator first, iterator last); \ void clear(); \ iterator find(const key_type & x) const; \ size_type count(const key_type & x) const; \ iterator lower_bound(const key_type & x) const; \ iterator upper_bound(const key_type & x) const; \ pair equal_range(const key_type & x) const; \ } /** Macro for declaring a map. */ #define ThePEG_DECLARE_MAP(KEYTYPE,VALTYPE,NAME) \ class NAME : \ public map > { \ public: \ typedef map > MAPTYPE; \ NAME(); \ explicit NAME(const key_compare & c, \ const allocator_type & a = allocator_type()); \ template \ NAME(InputIterator first, InputIterator last) \ : MAPTYPE(first, last) {} \ template \ NAME(InputIterator first, InputIterator last, const key_compare & c, \ const allocator_type & a = allocator_type()) \ : MAPTYPE(first, last, c, a) {} \ NAME(const NAME & s); \ NAME(const MAPTYPE & s); \ ~NAME(); \ NAME & operator=(const NAME &); \ NAME & operator=(const MAPTYPE &); \ data_type & operator[](const key_type & k); \ pair insert(const value_type & x); \ iterator insert(iterator position, const value_type & x); \ template \ void insert(InputIterator first, InputIterator last) { \ MAPTYPE::insert(first, last); \ } \ void erase(iterator position); \ size_type erase(const key_type & x); \ void erase(iterator first, iterator last); \ void clear(); \ iterator find(const key_type & x); \ const_iterator find(const key_type & x) const; \ size_type count(const key_type & x) const; \ iterator lower_bound(const key_type & x); \ const_iterator lower_bound(const key_type & x) const; \ iterator upper_bound(const key_type & x); \ const_iterator upper_bound(const key_type & x) const; \ pair equal_range(const key_type & x); \ pair \ equal_range(const key_type & x) const; \ } /** Macro for implementing a set. */ #define ThePEG_IMPLEMENT_SET(VALTYPE,NAME) \ NAME::NAME() {} \ NAME::NAME(const key_compare & c, const allocator_type & a) \ :SETTYPE(c, a) {} \ NAME::NAME(const NAME & x) : SETTYPE(x) {} \ NAME::NAME(const SETTYPE & x) : SETTYPE(x) {} \ NAME::~NAME() {} \ NAME & NAME::operator=(const NAME & x) { \ SETTYPE::operator=(x); \ return *this; \ } \ NAME & NAME::operator=(const SETTYPE & x) { \ SETTYPE::operator=(x); \ return *this; \ } \ pair NAME::insert(const value_type & x) { \ return SETTYPE::insert(x); \ } \ NAME::iterator NAME::insert(iterator position, const value_type & x) { \ return SETTYPE::insert(position, x); \ } \ void NAME::erase(iterator position) { \ SETTYPE::erase(position); \ } \ NAME::size_type NAME::erase(const key_type & x) { \ return SETTYPE::erase(x); \ } \ void NAME::erase(iterator first, iterator last) { \ SETTYPE::erase(first, last); \ } \ void NAME::clear() { \ SETTYPE::clear(); \ } \ NAME::iterator NAME::find(const key_type & x) const { \ return SETTYPE::find(x); \ } \ NAME::size_type NAME::count(const key_type & x) const { \ return SETTYPE::count(x); \ } \ NAME::iterator NAME::lower_bound(const key_type & x) const { \ return SETTYPE::lower_bound(x); \ } \ NAME::iterator NAME::upper_bound(const key_type & x) const { \ return SETTYPE::upper_bound(x); \ } \ pair \ NAME::equal_range(const key_type & x) const { \ return SETTYPE::equal_range(x); \ } \ /** Macro for implementing a multiset. */ #define ThePEG_IMPLEMENT_MULTISET(VALTYPE,NAME) \ NAME::NAME() {} \ NAME::NAME(const key_compare & c, const allocator_type & a) \ :SETTYPE(c, a) {} \ NAME::NAME(const NAME & x) : SETTYPE(x) {} \ NAME::NAME(const SETTYPE & x) : SETTYPE(x) {} \ NAME::~NAME() {} \ NAME & NAME::operator=(const NAME & x) { \ SETTYPE::operator=(x); \ return *this; \ } \ NAME & NAME::operator=(const SETTYPE & x) { \ SETTYPE::operator=(x); \ return *this; \ } \ NAME::iterator NAME::insert(const value_type & x) { \ return SETTYPE::insert(x); \ } \ NAME::iterator NAME::insert(iterator position, const value_type & x) { \ return SETTYPE::insert(position, x); \ } \ void NAME::erase(iterator position) { \ SETTYPE::erase(position); \ } \ NAME::size_type NAME::erase(const key_type & x) { \ return SETTYPE::erase(x); \ } \ void NAME::erase(iterator first, iterator last) { \ SETTYPE::erase(first, last); \ } \ void NAME::clear() { \ SETTYPE::clear(); \ } \ NAME::iterator NAME::find(const key_type & x) const { \ return SETTYPE::find(x); \ } \ NAME::size_type NAME::count(const key_type & x) const { \ return SETTYPE::count(x); \ } \ NAME::iterator NAME::lower_bound(const key_type & x) const { \ return SETTYPE::lower_bound(x); \ } \ NAME::iterator NAME::upper_bound(const key_type & x) const { \ return SETTYPE::upper_bound(x); \ } \ pair \ NAME::equal_range(const key_type & x) const { \ return SETTYPE::equal_range(x); \ } \ /** Macro for implementing a map. */ #define ThePEG_IMPLEMENT_MAP(KEYTYPE,VALTYPE,NAME) \ NAME::NAME() {} \ NAME::NAME(const key_compare & c, const allocator_type & a) \ :MAPTYPE(c, a) {} \ NAME::NAME(const NAME & x) : MAPTYPE(x) {} \ NAME::NAME(const MAPTYPE & x) : MAPTYPE(x) {} \ NAME::~NAME() {} \ NAME & NAME::operator=(const NAME & x) { \ MAPTYPE::operator=(x); \ return *this; \ } \ NAME & NAME::operator=(const MAPTYPE & x) { \ MAPTYPE::operator=(x); \ return *this; \ } \ pair NAME::insert(const value_type & x) { \ return MAPTYPE::insert(x); \ } \ NAME::iterator NAME::insert(iterator position, const value_type & x) { \ return MAPTYPE::insert(position, x); \ } \ void NAME::erase(iterator position) { \ MAPTYPE::erase(position); \ } \ NAME::size_type NAME::erase(const key_type & x) { \ return MAPTYPE::erase(x); \ } \ void NAME::erase(iterator first, iterator last) { \ MAPTYPE::erase(first, last); \ } \ void NAME::clear() { \ MAPTYPE::clear(); \ } \ NAME::iterator NAME::find(const key_type & x) { \ return MAPTYPE::find(x); \ } \ NAME::const_iterator NAME::find(const key_type & x) const { \ return MAPTYPE::find(x); \ } \ NAME::size_type NAME::count(const key_type & x) const { \ return MAPTYPE::count(x); \ } \ NAME::iterator NAME::lower_bound(const key_type & x) { \ return MAPTYPE::lower_bound(x); \ } \ NAME::const_iterator NAME::lower_bound(const key_type & x) const { \ return MAPTYPE::lower_bound(x); \ } \ NAME::iterator NAME::upper_bound(const key_type & x) { \ return MAPTYPE::upper_bound(x); \ } \ NAME::const_iterator NAME::upper_bound(const key_type & x) const { \ return MAPTYPE::upper_bound(x); \ } \ pair \ NAME::equal_range(const key_type & x) { \ return MAPTYPE::equal_range(x); \ } \ pair \ NAME::equal_range(const key_type & x) const { \ return MAPTYPE::equal_range(x); \ } \ NAME::data_type & NAME::operator[](const key_type & k) { \ return MAPTYPE::operator[](k); \ } \ #endif // #include "std.icc" #ifndef ThePEG_TEMPLATES_IN_CC_FILE // #include "std.tcc" #endif #endif /* ThePEG_std_H */ thepeg-1.8.0.orig/Config/ThePEG_Qty.h.b0000644000175000017500000000122711747772425015660 0ustar sunsun #ifdef ThePEG_HAS_UNITS_CHECKING #include "PhysicalQty.h" #include "PhysicalQtyOps.h" #include "PhysicalQtyComplex.h" namespace ThePEG { #else #include namespace ThePEG { const double ZERO = 0.0; /// Fractional powers of a double. template double pow(double q) { return std::pow(q,double(P)/double(R)); } #endif /// Helper class to define unitful quantities. template struct QTY { #ifdef ThePEG_HAS_UNITS_CHECKING /// The QTY type is dimensioned. typedef Qty Type; #else /// The QTY type is double. typedef double Type; #endif }; } #endif thepeg-1.8.0.orig/Config/Makefile.in0000644000175000017500000005013311756366733015424 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_HEPMC_TRUE@am__append_1 = HepMCHelper.h DIST_COMMON = $(srcdir)/LWH.h.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/ThePEG_Qty.h.a \ $(srcdir)/ThePEG_Qty.h.b $(srcdir)/ThePEG_Qty.h.in \ $(srcdir)/config.h.in $(top_srcdir)/Config/Makefile.aminclude \ ar-lib config.guess config.sub depcomp install-sh ltmain.sh \ missing subdir = Config ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h LWH.h ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGConfig_la_LIBADD = am__libThePEGConfig_la_SOURCES_DIST = ThePEG.cc Containers.cc ThePEG.h \ Constants.h Containers.h Pointers.h Unitsystem.h algorithm.h \ std.h Complex.h TemplateTools.h PhysicalQty.h PhysicalQtyOps.h \ PhysicalQtyComplex.h HepMCHelper.h am__objects_1 = ThePEG.lo Containers.lo am__objects_2 = am__objects_3 = $(am__objects_2) am__objects_4 = $(am__objects_3) am_libThePEGConfig_la_OBJECTS = $(am__objects_1) $(am__objects_4) libThePEGConfig_la_OBJECTS = $(am_libThePEGConfig_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGConfig_la_SOURCES) DIST_SOURCES = $(am__libThePEGConfig_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = ThePEG.cc Containers.cc DOCFILES = ThePEG.h Constants.h Containers.h Pointers.h Unitsystem.h \ algorithm.h std.h Complex.h TemplateTools.h PhysicalQty.h \ PhysicalQtyOps.h PhysicalQtyComplex.h $(am__append_1) INCLUDEFILES = $(DOCFILES) noinst_LTLIBRARIES = libThePEGConfig.la libThePEGConfig_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: config.h LWH.h ThePEG_Qty.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Config/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Config/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status Config/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ LWH.h: stamp-h2 @if test ! -f $@; then rm -f stamp-h2; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h2; else :; fi stamp-h2: $(srcdir)/LWH.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status Config/LWH.h ThePEG_Qty.h: stamp-h3 @if test ! -f $@; then rm -f stamp-h3; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h3; else :; fi stamp-h3: $(srcdir)/ThePEG_Qty.h.a $(srcdir)/ThePEG_Qty.h.in $(srcdir)/ThePEG_Qty.h.b $(top_builddir)/config.status @rm -f stamp-h3 cd $(top_builddir) && $(SHELL) ./config.status Config/ThePEG_Qty.h distclean-hdr: -rm -f config.h stamp-h1 LWH.h stamp-h2 ThePEG_Qty.h stamp-h3 clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGConfig.la: $(libThePEGConfig_la_OBJECTS) $(libThePEGConfig_la_DEPENDENCIES) $(EXTRA_libThePEGConfig_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGConfig_la_OBJECTS) $(libThePEGConfig_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Containers.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThePEG.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in LWH.h.in ThePEG_Qty.h.a ThePEG_Qty.h.in ThePEG_Qty.h.b $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in LWH.h.in ThePEG_Qty.h.a ThePEG_Qty.h.in ThePEG_Qty.h.b $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in LWH.h.in ThePEG_Qty.h.a ThePEG_Qty.h.in ThePEG_Qty.h.b $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in LWH.h.in ThePEG_Qty.h.a ThePEG_Qty.h.in ThePEG_Qty.h.b $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) config.h LWH.h ThePEG_Qty.h installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Config/algorithm.h0000644000175000017500000001132511747772425015515 0ustar sunsun// -*- C++ -*- // // algorithm.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_algorithm_H #define ThePEG_algorithm_H /** \file * This file implements a number of interfaces to std:: * algorithms, modified to take a whole container as argument rather * than a range of iterators, Also defines IteratorRange to * encapsulate a range of iterators and corresponding algorithms. */ #include "ThePEG/Config/ThePEG.h" #include namespace ThePEG { /** * A pair of iterators to be used in specialized algorithms instead * of the standard first, last construction. */ template struct IteratorRange: public std::pair { /** The underlying representation. */ typedef std::pair BaseType; /** Default constructor. */ IteratorRange() {} /** Copy constructor */ IteratorRange(const IteratorRange & ir): BaseType(ir) {} /** Constructor taking the underlying pair representation as argument. */ IteratorRange(const BaseType & ir): BaseType(ir) {} }; /** Return an IteratorRange corresponding to the whole container. */ template inline IteratorRange range(Container & c) { return std::make_pair(c.begin(), c.end()); } /** Return an IteratorRange of const iterators corresponding to the * whole container. */ template inline IteratorRange range(const Container & c) { return std::make_pair(c.begin(), c.end()); } /** Return an IteratorRange of reverse iterators corresponding to the * whole container. */ template inline IteratorRange rrange(Container & c) { return std::make_pair(c.rbegin(), c.rend()); } /** Return an IteratorRange of reverse const iterators corresponding * to the whole container. */ template inline IteratorRange rrange(const Container & c) { return std::make_pair(c.rbegin(), c.rend()); } /** The std::for_each function taking an IteratorRange as argument. */ template inline FNC for_each(IteratorRange r, FNC f) { return std::for_each(r.first, r.second, f); } /** The std::find function taking an IteratorRange as argument. */ template inline Iterator find(IteratorRange r, const T & t) { return std::find(r.first, r.second, t); } /** The std::find_if function taking an IteratorRange as argument. */ template inline Iterator find_if(IteratorRange r, Pred p) { return std::find_if(r.first, r.second, p); } /** The std::replace function taking an IteratorRange as argument. */ template inline void replace(IteratorRange r, const T & oval, const T & nval) { return std::replace(r.first, r.second, oval, nval); } /** The std::for_each function taking a whole container as argument. */ template inline FNC for_each(Cont & c, FNC f) { return std::for_each(c.begin(), c.end(), f); } /** The std::for_each function taking a whole const container as argument. */ template inline FNC for_each(const Cont & c, FNC f) { return std::for_each(c.begin(), c.end(), f); } /** The std::find function taking a whole container as argument. */ template inline typename Cont::iterator find(Cont & c, const Type & t) { return find(range(c), t); } /** The std::find function taking a whole const container as argument. */ template inline typename Cont::const_iterator find(const Cont & c, const Type & t) { return find(range(c), t); } /** The std::find_if function taking a whole container as argument. */ template inline typename Cont::iterator find_if(Cont & c, const Pred & p) { return find_if(range(c), p); } /** The std::find_if function taking a whole const container as argument. */ template inline typename Cont::const_iterator find_if(const Cont & c, const Pred & p) { return find_if(range(c), p); } /** The std::replace function taking a whole container as argument. */ template inline void replace(Cont & c, const T & oval, const T & nval) { return replace(range(c), oval, nval); } } // #include "algorithm.icc" #ifndef ThePEG_TEMPLATES_IN_CC_FILE // #include "algorithm.tcc" #endif #endif /* ThePEG_algorithm_H */ thepeg-1.8.0.orig/Config/config.h.in0000644000175000017500000000773211756366733015411 0ustar sunsun/* Config/config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the header file. */ #undef HAVE_HEPMC_HEPMCDEFS_H /* Define to 1 if you have the header file. */ #undef HAVE_HEPMC_IO_GENEVENT_H /* Define to 1 if you have the header file. */ #undef HAVE_HEPMC_PDFINFO_H /* Define to 1 if you have the header file. */ #undef HAVE_HISTORY_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the `gsl' library (-lgsl). */ #undef HAVE_LIBGSL /* Define to 1 if you have the `gslcblas' library (-lgslcblas). */ #undef HAVE_LIBGSLCBLAS /* Define to 1 if you have the `HepMC' library (-lHepMC). */ #undef HAVE_LIBHEPMC /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* Define if you have a readline compatible library */ #undef HAVE_LIBREADLINE /* Define to 1 if you have the `Rivet' library (-lRivet). */ #undef HAVE_LIBRIVET /* Define to 1 if you have the `z' library (-lz). */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_H /* Define if your readline library has \`add_history' */ #undef HAVE_READLINE_HISTORY /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_HISTORY_H /* Define to 1 if you have the header file. */ #undef HAVE_READLINE_READLINE_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* define if AIDA headers are installed */ #undef LWH_USING_AIDA /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* The command which, taking the name of a bzipped file as argument, unzips it and prints it to stdout. Default is "bunzip2 -c". */ #undef ThePEG_BZ2READ_FILE /* The command which, taking the name of a bzipped file as argument, reads stdin, zips it and writes it to the file. Default is "bzip2 -c > ". */ #undef ThePEG_BZ2WRITE_FILE /* The command which, taking the name of a gzipped file as argument, unzips it and prints it to stdout. Default is "gunzip -c" */ #undef ThePEG_GZREAD_FILE /* The command which, taking the name of a gzipped file as argument, reads stdin, zips it and writes it to the file. Default is "gzip -c > ". */ #undef ThePEG_GZWRITE_FILE /* define if dlopen is available */ #undef ThePEG_HAS_DLOPEN /* define if expm1 is available */ #undef ThePEG_HAS_EXPM1 /* define if fenv is available */ #undef ThePEG_HAS_FENV /* define if fpucontrol is available */ #undef ThePEG_HAS_FPU_CONTROL /* define if log1p is available */ #undef ThePEG_HAS_LOG1P /* define if units should be checked */ #undef ThePEG_HAS_UNITS_CHECKING /* Version number of package */ #undef VERSION thepeg-1.8.0.orig/Config/config.sub0000755000175000017500000010517611756366733015352 0ustar sunsun#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze) basic_machine=microblaze-xilinx ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: thepeg-1.8.0.orig/Config/Makefile.am0000644000175000017500000000070311747772425015410 0ustar sunsunmySOURCES = ThePEG.cc Containers.cc DOCFILES = ThePEG.h Constants.h Containers.h Pointers.h \ Unitsystem.h algorithm.h \ std.h Complex.h TemplateTools.h \ PhysicalQty.h PhysicalQtyOps.h PhysicalQtyComplex.h if HAVE_HEPMC DOCFILES += HepMCHelper.h endif INCLUDEFILES = $(DOCFILES) noinst_LTLIBRARIES = libThePEGConfig.la libThePEGConfig_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Config/Containers.cc0000644000175000017500000000241211747772425015767 0ustar sunsun// -*- C++ -*- // // Containers.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // This file contains the implementations of the container // declarations in Containers.h. #include "ThePEG.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/MatcherBase.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Interface/InterfacedBase.h" #include "ThePEG/Repository/EventGenerator.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "Containers.tcc" #endif using namespace ThePEG; ThePEG_IMPLEMENT_SET(PDPTr,ParticleDataSet) ThePEG_IMPLEMENT_SET(PMPtr,MatcherSet) ThePEG_IMPLEMENT_SET(DMPtr,DecayModeSet) ThePEG_IMPLEMENT_SET(tDMPtr,DecaySet) ThePEG_IMPLEMENT_SET(IBPtr,ObjectSet) ThePEG_IMPLEMENT_SET(IBPtr,DependencySet) ThePEG_IMPLEMENT_MAP(long,PDPtr,ParticleMap) ThePEG_IMPLEMENT_MAP(string,IBPtr,ObjectMap) ThePEG_IMPLEMENT_MAP(IBPtr,DependencySet,DependencyMap) ThePEG_IMPLEMENT_MAP(string,const InterfaceBase *,InterfaceMap) ThePEG_IMPLEMENT_MAP(string,EGPtr,GeneratorMap) ThePEG_IMPLEMENT_SET(string,StringSet) // typedef set InterfaceSet; thepeg-1.8.0.orig/Config/PhysicalQtyComplex.h0000644000175000017500000002574211747772425017341 0ustar sunsun// -*- C++ -*- // // PhysicalQtyComplex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef Physical_Qty_Complex_H #define Physical_Qty_Complex_H #include /** @file PhysicalQtyComplex.h * Overloads for operations on complex physical quantities. */ namespace std { /** * Template specialization for std::complex > * with conversions to complex */ template class complex > { public: /// Default constructor complex(double r=0.0, double i=0.0) : rawValue_(r,i) {} /// Constructor from complex complex(complex C) : rawValue_(C) {} /** * The internal representation of the dimensionful quantity. * Using this will break dimension-consistency. */ complex rawValue() const { return rawValue_; } /// Real part double real() const { return rawValue_.real(); } /// Imaginary part double imag() const { return rawValue_.imag(); } /// Cast to complex operator complex() const { return rawValue_; } /// Addition-assignment complex > & operator+=(const complex > x) { rawValue_ += x.rawValue(); return *this; } /// Subtraction-assignment complex > & operator-=(const complex > x) { rawValue_ -= x.rawValue(); return *this; } private: /// Internal value of the dimensioned quantity complex rawValue_; }; } // ========================================= namespace ThePEG { /// @name Overloads for mathematical operations //@{ // complex qty = complex qty * complex qty template inline std::complex > operator*(std::complex > q1, std::complex > q2) { typedef std::complex > RetT; return RetT(q1.real()*q2.real() - q1.imag()*q2.imag(), q1.real()*q2.imag() + q1.imag()*q2.real()); } // complex qty = complex qty * complex qty template inline std::complex > operator*(std::complex > q1, std::complex > q2) { typedef std::complex > RetT; return RetT(q1.real()*q2.real() - q1.imag()*q2.imag(), q1.real()*q2.imag() + q1.imag()*q2.real()); } // complex qty = complex double - complex qty template inline std::complex operator-(std::complex q1, std::complex > q2) { typedef std::complex RetT; return RetT(q1.real()-q2.real(),q1.imag()-q2.imag()); } // complex qty = complex double * complex qty template inline std::complex > operator*(std::complex q1, std::complex > q2) { typedef std::complex > RetT; return RetT(q1.real()*q2.real() - q1.imag()*q2.imag(), q1.real()*q2.imag() + q1.imag()*q2.real()); } // complex qty = complex double / complex qty template inline std::complex > operator/(std::complex q1, std::complex > q2) { typedef std::complex > RetT; std::complex > tmp = q1*conj(q2); Qty<2*L,2*E,2*Q,DL,DE,DQ> norm = (q2*conj(q2)).real(); return RetT(tmp.real()/norm,tmp.imag()/norm); } // complex qty = complex double / qty template inline std::complex > operator/(std::complex q1, Qty q2) { typedef std::complex > RetT; return RetT(q1.real()/q2,q1.imag()/q2); } // complex qty = complex qty / complex double template inline std::complex > operator/(std::complex > q1, std::complex q2) { std::complex > tmp = q1*conj(q2); double norm = (q2*conj(q2)).real(); return std::complex >(tmp.real()/norm,tmp.imag()/norm); } // complex qty = qty / complex double template inline std::complex > operator/(Qty q1, std::complex q2) { std::complex > tmp = q1*conj(q2); double norm = (q2*conj(q2)).real(); return std::complex >(tmp.real()/norm,tmp.imag()/norm); } // complex double = complex qty / complex qty template inline std::complex operator/(std::complex > q1, std::complex > q2) { std::complex > tmp = q1*conj(q2); Qty<2*L,2*E,2*Q,DL,DE,DQ> norm = (q2*conj(q2)).real(); return std::complex(tmp.real()/norm,tmp.imag()/norm); } // complex double = qty / complex qty template inline std::complex operator/(Qty q1, std::complex > q2) { std::complex > tmp = q1*conj(q2); Qty<2*L,2*E,2*Q,DL,DE,DQ> norm = (q2*conj(q2)).real(); return std::complex(tmp.real()/norm,tmp.imag()/norm); } // complex double = complex qty / qty template inline std::complex operator/(std::complex > q1, Qty q2) { return std::complex(q1.real()/q2,q1.imag()/q2); } // complex qty = complex qty / complex qty template inline std::complex > operator/(std::complex > q1, std::complex > q2) { typedef std::complex > RetT; std::complex > tmp = q1*conj(q2); Qty<2*L2,2*E2,2*Q2,DL2,DE2,DQ2> norm = (q2*conj(q2)).real(); return RetT(tmp.real()/norm,tmp.imag()/norm); } // complex qty = qty / complex qty template inline std::complex > operator/(Qty q1, std::complex > q2) { typedef std::complex > RetT; std::complex > tmp = q1*conj(q2); Qty<2*L2,2*E2,2*Q2,DL2,DE2,DQ2> norm = (q2*conj(q2)).real(); return RetT(tmp.real()/norm,tmp.imag()/norm); } // complex qty = complex qty / qty template inline std::complex > operator/(std::complex > q1, Qty q2) { typedef std::complex > RetT; return RetT(q1.real()/q2,q1.imag()/q2); } // complex qty = complex qty * complex double template inline std::complex > operator*(std::complex > q1, std::complex q2) { return q2 * q1; } // complex qty = qty * complex qty template inline std::complex > operator*(Qty q1, std::complex > q2) { typedef std::complex > RetT; return RetT(q1*q2.real(), q1*q2.imag()); } // complex qty = qty * complex qty template inline std::complex > operator*(Qty q1, std::complex > q2) { typedef std::complex > RetT; return RetT(q1*q2.real(), q1*q2.imag()); } // complex qty = qty * complex double template inline std::complex > operator*(Qty q1, std::complex q2) { typedef std::complex > RetT; return RetT(q1*q2.real(), q1*q2.imag()); } // complex qty = complex double * qty template inline std::complex > operator*(std::complex q1, Qty q2) { return q2 * q1; } // complex qty = complex qty * qty template inline std::complex > operator*(std::complex > q1, Qty q2) { return q2 * q1; } // complex qty = complex qty * qty template inline std::complex > operator*(std::complex > q1, Qty q2) { return q2 * q1; } // complex qty *= complex double template inline std::complex > & operator*=(std::complex > & q1, std::complex q2) { q1 = q1 * q2; return q1; } // complex qty *= double template inline std::complex > & operator*=(std::complex > & q1, double q2) { q1 = q1 * q2; return q1; } // complex qty /= complex double template inline std::complex > & operator/=(std::complex > & q1, std::complex q2) { q1 = q1 / q2; return q1; } // complex qty /= double template inline std::complex > & operator/=(std::complex > & q1, double q2) { q1 = q1 / q2; return q1; } //@} } #endif thepeg-1.8.0.orig/java/0000755000175000017500000000000011756460367013067 5ustar sunsunthepeg-1.8.0.orig/java/Command.java0000644000175000017500000000345511747772425015320 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Command extends Interface implements ActionListener { JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JTextField text; public Command(SetupThePEG own, ObjectFrame obj, LinkedList input) { super(own, obj, input); if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Command view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); JPanel buttons = new JPanel(); buttons.add(cancel); buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); apply.addActionListener(this); ok.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); JPanel textpanel = new JPanel(); textpanel.add(new JLabel("Enter arguments: ")); textpanel.add(text); getContentPane().add(textpanel, BorderLayout.NORTH); text.addActionListener(this); setTitle("Command"); setupFrame(500,150); } protected boolean setup(LinkedList input) { if ( !super.setup(input) ) return false; if ( text == null ) text = new JTextField("", 30); return true; } private void setValue() { setValue(text.getText()); reset(); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok || e.getSource() == text) { if ( !readonly ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } } public static void classcheck() {} } thepeg-1.8.0.orig/java/Reference.java0000644000175000017500000001027111747772425015632 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Reference extends Interface implements ActionListener { boolean nullable; boolean defnull; String current; RefRef selected = new RefRef(); String dir; String pclass; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setnull = new JButton("Null"); JButton open = new JButton("Open"); JButton sel = new JButton("Select"); public Reference(SetupThePEG own, ObjectFrame obj, LinkedList input) { super(own, obj, input); if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Reference view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); JPanel buttons = new JPanel(); buttons.add(cancel); if ( !isReadonly() ) buttons.add(reset); if ( !isReadonly() && nullable ) buttons.add(setnull); if ( !isReadonly() ) buttons.add(sel); buttons.add(open); if ( !isReadonly() ) buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); if ( !isReadonly() ) reset.addActionListener(this); if ( !isReadonly() ) sel.addActionListener(this); if ( !isReadonly() && nullable ) setnull.addActionListener(this); open.addActionListener(this); if ( !isReadonly() ) apply.addActionListener(this); ok.addActionListener(this); fixButtons(); getContentPane().add(buttons, BorderLayout.SOUTH); Font f = selected.getFont(); selected.setFont(new Font(f.getName(), f.getStyle(), f.getSize() + 2)); selected.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { if ( e.getSource() == selected && e.getClickCount() >= 2 && ! selected.getName().equals("NULL") ) owner.openObject(current); } }); // getContentPane().add(selected, BorderLayout.NORTH); JPanel top = new JPanel(); top.add(new JLabel("Current Value: ")); top.add(selected); getContentPane().add(top, BorderLayout.NORTH); setTitle("Reference"); setupFrame(500,150); } protected boolean setup(LinkedList input) { String s = (String)input.getFirst(); pclass = s.substring(2, s.length() - 1); if ( !super.setup(input) ) return false; s = (String)input.remove(0); if ( s.equals("nullable") ) nullable = true; else if ( s.equals("nevernull") ) nullable = false; else return false; s = (String)input.remove(0); if ( s.equals("defnull") ) defnull = true; else if ( s.equals("nodefnull") ) defnull = false; else return false; current = (String)input.remove(0); selected.setup(current); dir = ""; if ( current.lastIndexOf("/") >= 0 ) dir = current.substring(0, current.lastIndexOf("/") + 1); if ( dir.equals("") ) dir = object.substring(0,object.lastIndexOf("/") + 1); if ( dir.equals("") ) dir = "/"; return true; } private void setValue() { setValue(selected.getFullName()); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !isReadonly() ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setnull ) { selected.setup("NULL", "NULL"); } else if ( e.getSource() == sel ) { ObjectSelector ch = new ObjectSelector(owner, dir, pclass, this); if ( ch.selected() != null ) selected.setup(ch.selected().getFullName()); } else if ( e.getSource() == open ) { if ( ! selected.getName().equals("NULL") ) owner.openObject(current); } else if ( e.getSource() == reset ) { selected.setup(current); } fixButtons(); } public void fixButtons() { setnull.setEnabled(!selected.getName().equals("NULL")); open.setEnabled(!selected.getName().equals("NULL")); apply.setEnabled(!selected.getFullName().equals(current)); reset.setEnabled(!selected.getFullName().equals(current)); } public static void classcheck() {} } thepeg-1.8.0.orig/java/FullSlider.java0000644000175000017500000001165111747772425016004 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.text.*; import java.awt.*; import java.awt.event.*; public class FullSlider extends JPanel implements ActionListener, ChangeListener { double val; double max; double min; double cmax; double cmin; double def; boolean integer; JTextField value = new JTextField(8); JLabel minl = new JLabel(""); JLabel maxl = new JLabel(""); JSlider slider = new JSlider(0, 1000); DecimalFormat nf = new DecimalFormat(); ParVector owner = null; public FullSlider(double mi, double va, double ma, double de, boolean in) { integer = in; set(mi, va, ma, de); slider.addChangeListener(this); value.addActionListener(this); add(minl); add(slider); add(maxl); add(value); slider.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { setValue(cmin + slider.getValue()*(cmax - cmin)*0.001); } }); } public FullSlider(String mi, double va, String ma, double de, boolean in) { integer = in; set(mi, va, ma, de); slider.addChangeListener(this); value.addActionListener(this); add(minl); add(slider); add(maxl); add(value); slider.addMouseListener(new MouseAdapter() { public void mouseReleased(MouseEvent e) { setValue(cmin + slider.getValue()*(cmax - cmin)*0.001); } }); } public void set(String cmi, double va, String cma, double de) { double mi = 0.0; double ma = 0.0; try { if ( cmi.equals("-inf") ) mi = de + Math.abs(de) + 1.0; else mi = Double.parseDouble(cmi); if ( cma.equals("inf") ) ma = de - Math.abs(de) - 1.0; else ma = Double.parseDouble(cma); } catch ( NumberFormatException e ) {} set(mi, va, ma, de); } public void set(double mi, double va, double ma, double de) { min = mi; max = ma; val = va; def = de; setValue(va); } public void setEnabled(boolean en) { slider.setEnabled(en); value.setEditable(en); } private void setValue(double v) { if ( ( min > def || val >= min ) && ( max < def || val <= max ) ) val = v; double scale = Math.max(Math.abs(def), Math.abs(val)); if ( scale == 0.0 && min <= def ) scale = Math.abs(min)/10.0; if ( scale == 0.0 && max >= def ) scale = Math.abs(max)/10.0; if ( scale == 0.0 ) scale = 1.0; cmax = max; if ( max < def ) cmax = scale*10.0; else if ( val != 0.0 ) cmax = Math.min(scale*10.0, max); if ( min > def ) cmin = -scale*10.0; else if ( val != 0.0 ) cmin = Math.max(-scale*10.0, min); slider.setValue((int)(1000.0*(val - cmin)/(cmax - cmin))); if ( integer ) { if ( min > def ) minl.setText("-inf [" + Math.round(cmin) + "]"); else minl.setText("" + Math.round(min) + " [" + Math.round(cmin) + "]"); if ( max < def ) maxl.setText("[" + Math.round(cmax) + "] inf"); else maxl.setText("[" + Math.round(cmax) + "] " + Math.round(max)); } else { if ( min > def ) minl.setText("-inf [" + format(cmin) + "]"); else minl.setText("" + format(min) + " [" + format(cmin) + "]"); if ( max < def ) maxl.setText("[" + format(cmax) + "] inf"); else maxl.setText("[" + format(cmax) + "] " + nf.format(max)); } if ( integer ) value.setText("" + getInt()); else value.setText("" + format(val)); value.setCaretPosition(0); if ( owner != null ) owner.pushValue(); } public void setOwner(ParVector pv) { owner = pv; } public String format(double d) { if ( d == 0 ) return "0"; if ( Math.abs(d) < 0.1 ) { nf.applyPattern("0.####E0"); } else if ( Math.abs(d) < 1 ) { nf.applyPattern("0.####"); } else if ( Math.abs(d) < 10 ) { nf.applyPattern("0.###"); } else if ( Math.abs(d) < 100 ) { nf.applyPattern("00.##"); } else if ( Math.abs(d) < 1000 ) { nf.applyPattern("000.#"); } else if ( Math.abs(d) < 10000 ) { nf.applyPattern("0000"); } else { nf.applyPattern("0.####E0"); } return nf.format(d); } public long getInt() { return Math.round(val); } public double getDouble() { return val; } public void changeText() { double v = cmin + slider.getValue()*(cmax - cmin)*0.001; if ( integer ) value.setText("" + Math.round(v)); else value.setText("" + format(v)); value.setCaretPosition(0); } public void addActionListener(ActionListener l) { value.addActionListener(l); } public void addChangeListener(ChangeListener l) { slider.addChangeListener(l); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == value ) { try { setValue(Double.parseDouble(value.getText())); } catch ( NumberFormatException ex ) { setValue(val); } } } public void stateChanged(ChangeEvent e) { if ( e.getSource() == slider ) changeText(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/SwitchOption.java0000644000175000017500000000131211747772425016362 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class SwitchOption extends JLabel { String name; String comment; long index; public SwitchOption(long indx, String nm, String cm) { index = indx; name = nm; comment = cm; setText(Long.toString(index) + ": " + name); setToolTipText(SetupThePEG.ttt + comment); setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); } public long getIndex() { return index; } public String getName() { return name; } public String getComment() { return comment; } public String toString() { return getText(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/ObjectSelector.java0000644000175000017500000000446611747772425016654 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class ObjectSelector extends JDialog implements MouseListener, ActionListener { ObjectRef selectedObject; boolean done = false; BrowserTree tree; JButton cancelButton = new JButton("Cancel"); JButton okButton = new JButton("Select"); SetupThePEG thepeg; public ObjectSelector(SetupThePEG thepeg, String dir, String selclass, JDialog owner) { super(owner, "Choose an object", true); init(thepeg, dir, selclass); } public ObjectSelector(SetupThePEG thepeg, String dir, String selclass) { super(thepeg, "Choose an object", true); init(thepeg, dir, selclass); } public void init(SetupThePEG thepeg, String dir, String selclass) { this.thepeg = thepeg; setDefaultCloseOperation(DISPOSE_ON_CLOSE); tree = new BrowserTree(thepeg, selclass, true, dir); tree.addMouseListener(this); getContentPane().setLayout(new BorderLayout()); getContentPane().add(tree, BorderLayout.CENTER); JPanel panel = new JPanel(); cancelButton.addActionListener(this); okButton.addActionListener(this); panel.add(cancelButton); panel.add(okButton); getContentPane().add(panel, BorderLayout.SOUTH); setSize(300,400); thepeg.setLocation(this); setVisible(true); } public ObjectRef selected() { if ( !done ) return null; return selectedObject; } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancelButton ) { selectedObject = null; dispose(); } if ( e.getSource() == okButton ) { if ( selectedObject != null ) { done = true; dispose(); } else if ( tree.getSelectedObject() != null ) { selectedObject = tree.getSelectedObject(); done = true; dispose(); } } } public void mouseClicked(MouseEvent e) { if ( e.getClickCount() >= 2 ) { selectedObject = tree.getSelectedObject(); done = true; dispose(); } } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void dispose() { thepeg.removeLocation(this); super.dispose(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/PopCardPanel.java0000644000175000017500000000154211747772425016245 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class PopCardPanel extends JPanel implements ActionListener { CardLayout cards = new CardLayout(); JComboBox selector = new JComboBox(); JPanel panel = new JPanel(); public PopCardPanel() { setLayout(new BorderLayout()); panel.setLayout(cards); selector.addActionListener(this); add(panel, BorderLayout.CENTER); add(selector, BorderLayout.NORTH); } public int getItemCount() { return selector.getItemCount(); } public void addCard(String name, JComponent obj) { panel.add(obj, name); selector.addItem(name); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == selector ) cards.show(panel, (String)selector.getSelectedItem()); } public static void classcheck() {} } thepeg-1.8.0.orig/java/Interface.java0000644000175000017500000000545011747772425015637 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.text.html.HTMLDocument; public class Interface extends JDialog { SetupThePEG owner; String object; String objectName; String interfaceName; String description = ""; boolean readonly; // JTextArea info = new JTextArea(new HTMLDocument()); JEditorPane info = new JEditorPane(); public Interface(SetupThePEG own, ObjectFrame obj, LinkedList input) { super(obj); owner = own; object = obj.getFullName(); objectName = obj.getName(); info.addHyperlinkListener(obj); } protected boolean setup(LinkedList input) { String s = (String)input.remove(0); if ( input.size() > 0 ) interfaceName = (String)input.remove(0); else return false; while ( input.size() > 0 && ( s = (String)input.remove(0) ) != null && !s.equals("-*-mutable-*-") && !s.equals("-*-readonly-*-") ) description += s + " "; if ( s.equals("-*-mutable-*-") ) readonly = false; else if ( s.equals("-*-readonly-*-") ) readonly = true; else return false; return true; } protected boolean reset() { return setup(owner.exec("fulldescribe " + object + ":" + interfaceName)); } protected void setupFrame(int width, int height) { setDefaultCloseOperation(DISPOSE_ON_CLOSE); owner.setLocation(this); setSize(width, height); setVisible(true); } public void setTitle(String type) { super.setTitle("ThePEG " + type + " " + getObjectName() + ":" + getName()); } protected JScrollPane getDescriptionArea() { info.setContentType("text/html"); info.setText("" + ObjectFrame.htmlFormat(description) + ""); info.setEditable(false); info.setCaretPosition(0); return new JScrollPane(info); } protected boolean isReadonly() { return readonly; } protected void exec(String cmd) { owner.action(cmd); } protected void setValue(String val) { exec("set " + getObject() + ":" + getName() + " " + val); reset(); } protected void setValue(int indx, String val) { exec("set " + getObject() + ":" + getName() + " [" + Integer.toString(indx) + "] " + val); reset(); } protected void insert(int indx, String val) { exec("insert " + getObject() + ":" + getName() + "[" + Long.toString(indx) + "] " + val); reset(); } protected void erase(int indx) { exec("erase " + getObject() + ":" + getName() + "[" + Long.toString(indx) + "] "); reset(); } public String getName() { return interfaceName; } public String getObject() { return object; } public String getObjectName() { return objectName; } public void dispose() { owner.removeLocation(this); super.dispose(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/RunSelector.java0000644000175000017500000000443611747772425016207 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class RunSelector extends JDialog implements MouseListener, ActionListener { Object selectedRun; boolean done = false; JList runList = new JList(); JButton cancelButton = new JButton("Cancel"); JButton okButton = new JButton("Select"); SetupThePEG thepeg; public RunSelector(SetupThePEG thepeg) { super(thepeg, "Choose a run", true); this.thepeg = thepeg; setDefaultCloseOperation(DISPOSE_ON_CLOSE); LinkedList ret = thepeg.exec("lsruns"); Vector runs = new Vector(); while ( ret.size() > 0 ) runs.add(thepeg.getRun((String)ret.removeFirst())); runs.add("Create a new run"); runList.setListData(runs); runList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); runList.addMouseListener(this); getContentPane().setLayout(new BorderLayout()); getContentPane().add(new JScrollPane(runList), BorderLayout.CENTER); JPanel panel = new JPanel(); cancelButton.addActionListener(this); okButton.addActionListener(this); panel.add(cancelButton); panel.add(okButton); getContentPane().add(panel, BorderLayout.SOUTH); setSize(300,300); thepeg.setLocation(this); setVisible(true); } public Object selected() { if ( selectedRun == null || !done ) return null; return selectedRun; } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancelButton ) { selectedRun = null; dispose(); } if ( e.getSource() == okButton ) { if ( selectedRun != null ) { done = true; dispose(); } else if ( runList.getSelectedValue() != null ) { selectedRun = runList.getSelectedValue(); done = true; dispose(); } } } public void mouseClicked(MouseEvent e) { if ( e.getSource() == runList && e.getClickCount() >= 2 ) { selectedRun = runList.getSelectedValue(); done = true; dispose(); } } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void dispose() { thepeg.removeLocation(this); super.dispose(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/RefRef.java0000644000175000017500000000276611747772425015117 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class RefRef extends JLabel { String name; String fullname; int index; public RefRef(int indx, String nm, String fnm) { setup(indx, nm, fnm); } public RefRef(int indx, String fnm) { if ( fnm.equals("NULL") ) setup(indx, fnm, fnm); else setup(indx, fnm.substring(fnm.lastIndexOf('/')+1), fnm); } public RefRef(String nm, String fnm) { setup(-1, nm, fnm); } public RefRef(String fnm) { setup(-1, fnm); } public RefRef() { setup(-1, ""); } public void setup(int indx, String nm, String fnm) { index = indx; name = nm; fullname = fnm; String text = name; if ( index >= 0 && !name.equals(" - end - ") ) text = Long.toString(index) + ": " + name; setText(text); setToolTipText(fullname); } public String toString() { return getText(); } public void setup(int indx, String fnm) { setup(indx, fnm.substring(fnm.lastIndexOf('/')+1), fnm); } public void setup(String nm, String fnm) { setup(-1, nm, fnm); } public void setup(String fnm) { setup(-1, fnm); } public int getIndex() { return index; } public String getName() { return name; } public String getFullName() { return fullname; } public void set(String fnm) { setup(index, fnm); } public void set(String nm, String fnm) { setup(index, nm, fnm); } public static void classcheck() {} } thepeg-1.8.0.orig/java/ObjectFrame.java0000644000175000017500000002240311747772425016115 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class ObjectFrame extends JFrame implements ActionListener, MouseListener, HyperlinkListener { SetupThePEG thepeg; String object = ""; String name = ""; String pclass = ""; JList parameterList; JList switchList; JList referenceList; JList commandList; JList primaryList; JList secondaryList; int ctype = 0; static final int EVENT_GENERATOR = 1; PopCardPanel interfaces = new PopCardPanel(); JButton close = new JButton("Close"); JButton makerun = new JButton("Make run"); JButton saverun = new JButton("Save run"); JEditorPane info = new JEditorPane(); HashMap imap = new HashMap(); public ObjectFrame(SetupThePEG frame, String obj) { setIconImage(frame.icon); name = obj.substring(obj.lastIndexOf("/") + 1); object = obj; thepeg = frame; setup(); setTitle(name + " [" + pclass + "]"); if ( primaryList != null ) { primaryList.addMouseListener(this); addCard("Primary interfaces:", primaryList); } if ( parameterList != null ) { parameterList.addMouseListener(this); addCard("All Parameters:", parameterList); } if ( switchList != null ) { switchList.addMouseListener(this); addCard("All Switches:", switchList); } if ( referenceList != null ) { referenceList.addMouseListener(this); addCard("All References:", referenceList); } if ( commandList != null ) { commandList.addMouseListener(this); addCard("All Commands:", commandList); } if ( secondaryList != null ) { secondaryList.addMouseListener(this); addCard("Secondary interfaces:", secondaryList); } JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT); JScrollPane s = new JScrollPane(info); s.setMinimumSize(new Dimension(300,250)); split.setLeftComponent(s); if ( interfaces.getItemCount() > 0 ) { split.setRightComponent(interfaces); } else { JPanel noinf = new JPanel(); noinf.add(new JLabel("There are no interfaces defined for " + pclass)); split.setRightComponent(noinf); } getContentPane().setLayout(new BorderLayout()); getContentPane().add(split, BorderLayout.CENTER); close.addActionListener(this); JPanel buttons = new JPanel(); buttons.add(close); switch ( ctype ) { case EVENT_GENERATOR: makerun.addActionListener(this); buttons.add(makerun); saverun.addActionListener(this); buttons.add(saverun); break; } getContentPane().add(buttons, BorderLayout.SOUTH); thepeg.setLocation(this); setSize(400, 500); setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); setVisible(true); } public String getFullName() { return object; } public String getName() { return name; } private void addCard(String name, JList list) { if ( list == null ) return; interfaces.addCard(name, new JScrollPane(list)); } public static String htmlFormat(String text) { return text.replaceAll("(\\w+::)?(\\w+)", "$2"); } private void fixDescription(String desc) { if ( pclass.equals("ThePEG::EventGenerator") ) ctype = EVENT_GENERATOR; String text = "

Object \"" + getName() + "\" of class " + pclass + "

"; if ( desc.length() < 25 || !desc.substring(0, 25).equals("There is no documentation") ) text += htmlFormat(desc); LinkedList ret = thepeg.exec("baseclasses " + pclass); if ( ret.size() > 0 ) ret.remove(0); while ( ret.size() > 0 ) { String bclass = (String)ret.remove(0); if ( bclass.equals("ThePEG::HandlerBase") ) break; text += "

Inherits from class " + bclass + "

"; LinkedList bret = thepeg.exec("describeclass " + bclass); String inf = ""; while ( bret.size() > 0 ) inf += (String)bret.remove(0); if ( inf.length() < 25 || !inf.substring(0, 25).equals("There is no documentation") ) text += htmlFormat(inf); } text += "
You can modify the behavior of this object by " + "manipulating the interfaces below."; info.setContentType("text/html"); info.setText("" + text + ""); info.setEditable(false); info.setCaretPosition(0); info.addHyperlinkListener(this); } private void setup() { LinkedList ret = thepeg.exec("fulldescribe " + object); if ( ret.size() > 0 ) ret.remove(0); if ( ret.size() > 0 ) pclass = (String)ret.remove(0); String line = ""; String description = ""; while ( ret.size() > 0 && !(line = (String)ret.remove(0)).equals("Interfaces:") ) description += line + " "; Vector parameters = new Vector(); Vector switches = new Vector(); Vector references = new Vector(); Vector commands = new Vector(); Vector secondary = new Vector(); Vector primary = new Vector(); boolean prim = true; while ( ret.size() > 0 ) { line = (String)ret.remove(0); if ( line.length() == 0 ) continue; String name = ""; if ( line.length() > 3 ) name = line.substring(3); switch ( line.charAt(0) ) { case '0': prim = false; break; case 'P': parameters.add(name); break; case 'S': switches.add(name); break; case 'C': commands.add(name); break; case 'D': continue; case 'R': name = line.substring(line.lastIndexOf('>') + 2); references.add(name); break; case 'V': if ( line.charAt(1) == '<' ) { name = line.substring(line.lastIndexOf('>') + 2); references.add(name); } else parameters.add(name); } if ( prim ) primary.add(name); else secondary.add(name); } primaryList = new JList(primary); if ( parameters.size() > 0 ) parameterList = new JList(parameters); if ( switches.size() > 0 ) switchList = new JList(switches); if ( references.size() > 0 ) referenceList = new JList(references); if ( commands.size() > 0 ) commandList = new JList(commands); if ( secondary.size() > 0 ) secondaryList = new JList(secondary); fixDescription(description); } public void dispose() { super.dispose(); thepeg.removeLocation(this); } private void showInterface(String name) { if ( imap.get(name) != null ) { Interface i = (Interface)imap.get(name); if ( !i.isVisible() ) { thepeg.setLocation(i); i.setVisible(true); } i.toFront(); return; } if ( name == null ) return; LinkedList ret = thepeg.exec("fulldescribe " + object + ":" + name); if ( ret.size() == 0 ) return; String par = (String)ret.getFirst(); Interface ifc = null; switch ( par.charAt(0) ) { case 'P': if ( par.charAt(1) == 'i' ) ifc = new Parameter(thepeg, this, ret, true); else if ( par.charAt(1) == 's' ) ifc = new StringParameter(thepeg, this, ret, StringParameter.NOFILE); else if ( par.charAt(1) == 'D' ) ifc = new StringParameter(thepeg, this, ret, StringParameter.DIRECTORY); else if ( par.charAt(1) == 'F' ) ifc = new StringParameter(thepeg, this, ret, StringParameter.FILE); else ifc = new Parameter(thepeg, this, ret, false); break; case 'S': ifc = new Switch(thepeg, this, ret); break; case 'C': ifc = new Command(thepeg, this, ret); break; case 'R': ifc = new Reference(thepeg, this, ret); break; case 'V': if ( par.charAt(1) == '<' ) ifc = new RefVector(thepeg, this, ret); else if ( par.charAt(1) == 'i' ) ifc = new ParVector(thepeg, this, ret, true); else if ( par.charAt(1) != 's' ) ifc = new ParVector(thepeg, this, ret, false); break; } imap.put(name, ifc); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == close ) dispose(); else if ( e.getSource() == makerun ) showInterface("MakeRun"); else if ( e.getSource() == saverun ) showInterface("SaveRun"); } public void mouseClicked(MouseEvent e) { if (e.getClickCount() >= 2 ) { if ( e.getSource() == parameterList ) { showInterface((String)parameterList.getSelectedValue()); } else if ( e.getSource() == switchList ) { showInterface((String)switchList.getSelectedValue()); } else if ( e.getSource() == referenceList ) { showInterface((String)referenceList.getSelectedValue()); } else if ( e.getSource() == commandList ) { showInterface((String)commandList.getSelectedValue()); } else if ( e.getSource() == primaryList ) { showInterface((String)primaryList.getSelectedValue()); } else if ( e.getSource() == secondaryList ) { showInterface((String)secondaryList.getSelectedValue()); } } } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { String target = e.getDescription(); String type = target.substring(0, target.indexOf(':')); target = target.substring(target.indexOf(':') + 1, target.length()); showInterface(target); } } public static void classcheck() {} } thepeg-1.8.0.orig/java/RefVector.java0000644000175000017500000001623511747772425015641 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class RefVector extends Interface implements ActionListener, ListSelectionListener { boolean nullable; boolean defnull; Vector current; Vector values; String pclass; String dir; int size; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setnull = new JButton("Null"); JButton open = new JButton("Open"); JButton sel = new JButton("Select"); JButton insert = new JButton("Insert"); JButton erase = new JButton("Erase"); JList selector = new JList() { public String getToolTipText(MouseEvent e) { int i = locationToIndex(e.getPoint()); if ( i < 0 || i > current.size() - 2 ) return null; RefRef r = (RefRef)current.get(i); if ( r == null ) return null; return r.getFullName(); } }; public RefVector(SetupThePEG own, ObjectFrame obj, LinkedList input) { super(own, obj, input); if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Reference Vector view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); selector.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); selector.addListSelectionListener(this); selector.addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { int i = selector.locationToIndex(e.getPoint()); if ( i < 0 || i > current.size() - 2 ) return; RefRef r = (RefRef)current.get(i); if ( r == null ) return; if ( e.getClickCount() >= 2) owner.openObject(r.getFullName()); } }); getContentPane().add(new JScrollPane(selector), BorderLayout.NORTH); JPanel buttons = new JPanel(); buttons.add(cancel); if ( !isReadonly() ) buttons.add(reset); if ( !isReadonly() && nullable ) buttons.add(setnull); if ( !isReadonly() ) buttons.add(sel); if ( !isReadonly() && size <= 0 ) buttons.add(insert); if ( !isReadonly() && size <= 0 ) buttons.add(erase); buttons.add(open); if ( !isReadonly() ) buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); if ( !isReadonly() ) reset.addActionListener(this); if ( !isReadonly() ) sel.addActionListener(this); if ( !isReadonly() && size <= 0 ) insert.addActionListener(this); if ( !isReadonly() && size <= 0 ) erase.addActionListener(this); if ( !isReadonly() && nullable ) setnull.addActionListener(this); open.addActionListener(this); if ( !isReadonly() ) apply.addActionListener(this); ok.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); fixButtons(); setTitle("Reference Vector"); setupFrame(600,300); } protected boolean setup(LinkedList input) { String s = (String)input.getFirst(); pclass = s.substring(2, s.length() - 1); if ( !super.setup(input) ) return false; s = (String)input.remove(0); if ( s.equals("nullable") ) nullable = true; else if ( s.equals("nevernull") ) nullable = false; else return false; s = (String)input.remove(0); if ( s.equals("defnull") ) defnull = true; else if ( s.equals("nodefnull") ) defnull = false; else return false; size = Integer.parseInt((String)input.remove(0)); int nref = Integer.parseInt((String)input.remove(0)); if ( current == null ) current = new Vector(); else current.clear(); if ( values == null ) values = new Vector(); else values.clear(); for ( int iref = 0; iref < nref; ++iref ) { values.add(new RefRef(iref, (String)input.getFirst())); current.add(new RefRef(iref, (String)input.remove(0))); } current.add(new RefRef(nref, " - end - ", "NULL")); values.add(new RefRef(nref, " - end - ", "NULL")); int sel = selector.getSelectedIndex(); selector.setListData(current); if ( sel >= 0 && sel < current.size() ) selector.setSelectedIndex(sel); return true; } protected void setValue() { for ( int iref = 0; iref < current.size() - 1; ++iref ) { String cmd = "set " + getObject() + ":" + getName() + "[" + Long.toString(iref) + "] " + ((RefRef)current.get(iref)).getFullName(); exec(cmd); } reset(); } protected void insert() { if ( selector.getSelectedIndex() < 0 ) selector.setSelectedIndex(current.size() - 1); String newname = "NULL"; ObjectSelector ch = new ObjectSelector(owner, dir, pclass, this); if ( ch.selected() == null ) { if ( !nullable ) newname = ((RefRef)selector.getSelectedValue()).getFullName(); } else { newname = ch.selected().getFullName(); } if ( newname != "NULL" || nullable ) insert(selector.getSelectedIndex(), newname); } protected void erase() { if ( selector.getSelectedIndex() >= 0 ) erase(selector.getSelectedIndex()); } public String selectedValue() { RefRef sel = (RefRef)selector.getSelectedValue(); if ( sel == null ) return null; return sel.getFullName(); } public void fixButtons() { dir = ""; String val = selectedValue(); if ( val != null && val.lastIndexOf("/") >= 0 ) dir = val.substring(0, val.lastIndexOf("/") + 1); if ( dir.equals("") ) dir = object.substring(0,object.lastIndexOf("/") + 1); if ( dir.equals("") ) dir = "/"; if ( isReadonly() ) return; boolean changed = false; for ( int iref = 0; iref < current.size(); ++iref ) if ( !(((RefRef)current.get(iref)).getFullName(). equals(((RefRef)current.get(iref)).getFullName())) ) changed = true; apply.setEnabled(changed); reset.setEnabled(changed); sel.setEnabled(false); open.setEnabled(false); setnull.setEnabled(false); erase.setEnabled(false); insert.setEnabled(size <= 0 && !changed); if ( selector.getSelectedIndex() >= 0 && selector.getSelectedIndex() < current.size() - 1 ) { sel.setEnabled(true); open.setEnabled(selectedValue() != null && selectedValue() != "NULL"); setnull.setEnabled(nullable); erase.setEnabled(size <= 0 && !changed); } } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !isReadonly() ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setnull ) { ((RefRef)selector.getSelectedValue()).set("NULL", "NULL"); } else if ( e.getSource() == sel ) { ObjectSelector ch = new ObjectSelector(owner, dir, pclass, this); if ( ch.selected() != null ) ((RefRef)selector.getSelectedValue()).set(ch.selected().getFullName()); } else if ( e.getSource() == open ) { owner.openObject(((RefRef)selector.getSelectedValue()).getFullName()); } else if ( e.getSource() == reset ) { reset(); } else if ( e.getSource() == insert ) { insert(); } else if ( e.getSource() == erase ) { erase(); } fixButtons(); } public void valueChanged(ListSelectionEvent e) { fixButtons(); } } thepeg-1.8.0.orig/java/ObjectRef.java0000644000175000017500000000224311747772425015577 0ustar sunsunpackage ThePEG; import java.util.*; public class ObjectRef { SetupThePEG thepeg; String name; String fullName; boolean dir = false; String pclass; public ObjectRef(SetupThePEG tp, String nm, String fn, boolean isd) { thepeg = tp; name = nm; fullName = fn; dir = isd; } public ObjectRef(SetupThePEG tp, String f) { thepeg = tp; fullName = f; if ( f.charAt(f.length() - 1) == '/' ) { f = f.substring(0, f.length() - 1); dir = true; } name = f.substring(f.lastIndexOf('/') + 1); } public String toString() { return name; } public String getClassName() { if ( pclass != null ) return pclass; if ( isDir() ) return ""; LinkedList ret = thepeg.exec("fulldescribe " + getFullName()); if ( ret.size() > 0 ) ret.remove(0); if ( ret.size() > 0 ) pclass = (String)ret.remove(0); return pclass; } public String getName() { return name; } public String getFullName() { return fullName; } public boolean isDir() { return dir; } public void open() { if ( isDir() ) return; thepeg.openObject(getFullName()); } public static void classcheck() {} } thepeg-1.8.0.orig/java/Parameter.java0000644000175000017500000000650211747772425015656 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Parameter extends Interface implements ActionListener, ChangeListener { double def; double min; double max; double current; boolean integer; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setdef = new JButton("Default"); FullSlider slider; public Parameter(SetupThePEG own, ObjectFrame obj, LinkedList input, boolean in) { super(own, obj, input); integer = in; if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Parameter view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); if ( isReadonly() ) { JLabel lab = new JLabel(""); if ( integer ) lab.setText("Readonly value is " + slider.getInt()); else lab.setText("Readonly value is " + slider.getDouble()); lab.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); getContentPane().add(lab, BorderLayout.NORTH); ok.addActionListener(this); getContentPane().add(ok, BorderLayout.SOUTH); } else { JPanel buttons = new JPanel(); buttons.add(cancel); buttons.add(reset); buttons.add(setdef); buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); reset.addActionListener(this); setdef.addActionListener(this); apply.addActionListener(this); ok.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); getContentPane().add(slider, BorderLayout.NORTH); slider.addChangeListener(this); fixButtons(); } setTitle("Parameter"); setupFrame(500,150); } protected boolean setup(LinkedList input) { if ( !super.setup(input) ) return false; try { current = Double.parseDouble((String)input.remove(0)); String cmin = (String)input.remove(0); def = Double.parseDouble((String)input.remove(0)); String cmax = (String)input.remove(0); if ( slider == null ) slider = new FullSlider(cmin, current, cmax, def, integer); else slider.set(cmin, current, cmax, def); } catch ( NumberFormatException e ) { return false; } return true; } private void setValue() { setValue(integer? Long.toString(slider.getInt()): Double.toString(slider.getDouble())); reset(); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !readonly ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setdef ) { slider.set(min, def, max, def); } else if ( e.getSource() == reset ) { slider.set(min, current, max, def); } fixButtons(); } public void stateChanged(ChangeEvent e) { fixButtons(); } public void fixButtons() { double val = slider.getDouble(); setdef.setEnabled(val != def); reset.setEnabled(val != current); apply.setEnabled(val != current); } public static void classcheck() {} } thepeg-1.8.0.orig/java/SetupThePEG.java0000644000175000017500000004643711747772425016046 0ustar sunsunpackage ThePEG; import javax.swing.filechooser.FileFilter; import javax.swing.*; import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import java.awt.image.*; public class SetupThePEG extends JFrame implements ActionListener { Process theProcess; PrintWriter cmdStream; BufferedReader inStream; BufferedReader errStream; BufferedReader stdin; BrowserTree tree; HashSet allTrees = new HashSet(); JEditorPane helparea = new JEditorPane(); String inithelp; TreeMap objects = new TreeMap(); ButtonGroup showgroup = new ButtonGroup(); JMenu showmenu = new JMenu("Show"); Vector actions = new Vector(); File actionFile; boolean actionsPerformed = false; JMenuItem loadrepo = new JMenuItem("Load New Repository ..."); JMenuItem saverepo = new JMenuItem("Save Repository ..."); JMenuItem running = new JMenuItem("Run ..."); JMenuItem showonly = new JMenuItem("Show only class ..."); JMenuItem readActions = new JMenuItem("Read Actions ..."); JMenuItem saveActionsAs = new JMenuItem("Save Actions As ..."); JMenuItem saveActions = new JMenuItem("Save Actions"); JMenuItem appendpath = new JMenuItem("Append Library Path ..."); JMenuItem prependpath = new JMenuItem("Prepend Library Path ..."); JMenuItem loadlib = new JMenuItem("Load Dynamic Library ..."); JMenuItem quit = new JMenuItem("Quit"); boolean debug; static public final String ttt = ""; ObjectRef clip = null; boolean clipIsClone = false; ObjectRef dragged = null; Vector locations = new Vector(); JFileChooser fc = new JFileChooser("."); TreeMap runs = new TreeMap(); FileFilter sofilter = new FileFilter() { public boolean accept(File file) { if ( file.isDirectory() ) return true; String name = file.getName(); if ( name.lastIndexOf('.') < 0 ) return false; name = name.substring(name.lastIndexOf('.'), name.length()); return name.equals(".so") || name.equals(".dylib"); } public String getDescription() { return "Dynamic libraries"; } }; FileFilter infilter = new FileFilter() { public boolean accept(File file) { if ( file.isDirectory() ) return true; String name = file.getName(); if ( name.lastIndexOf('.') < 0 ) return false; name = name.substring(name.lastIndexOf('.'), name.length()); return name.equals(".in"); } public String getDescription() { return "Files containing ThePEG setup commands"; } }; FileFilter rpofilter = new FileFilter() { public boolean accept(File file) { if ( file.isDirectory() ) return true; String name = file.getName(); if ( name.lastIndexOf('.') < 0 ) return false; name = name.substring(name.lastIndexOf('.'), name.length()); return name.equals(".rpo"); } public String getDescription() { return "Files containing ThePEG repositories"; } }; protected static Image createImage() { //Create a 16x16 pixel image. BufferedImage bi = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB); //Draw into it. Graphics g = bi.getGraphics(); g.setColor(Color.DARK_GRAY); g.fillRect(0, 0, 16, 16); g.setColor(Color.LIGHT_GRAY); // T g.drawLine(1, 1, 3, 1); g.drawLine(2, 1, 2, 7); // h g.drawLine(5, 1, 5, 7); g.drawLine(5, 4, 7, 4); g.drawLine(7, 4, 7, 7); // e g.drawLine(9, 5, 9, 5); g.drawLine(10, 4, 10, 4); g.drawLine(10, 6, 11, 6); g.drawLine(11, 5, 11, 5); g.drawLine(10, 7, 11, 8); g.setColor(Color.RED); // P g.drawLine(1, 6, 1, 14); g.drawLine(1, 6, 3, 6); g.drawLine(1, 10, 3, 10); g.drawLine(4, 7, 4, 9); // E g.drawLine(6, 6, 6, 14); g.drawLine(6, 6, 9, 6); g.drawLine(6, 14, 9, 14); g.drawLine(6, 10, 8, 10); // G g.drawLine(11, 7, 11, 13); g.drawLine(12, 6, 13, 6); g.drawLine(14, 7, 14, 7); g.drawLine(12, 14, 13, 14); g.drawLine(13, 10, 14, 10); g.drawLine(14, 10, 14, 13); //Clean up. g.dispose(); //Return it. return bi; } public Image icon = createImage(); SetupThePEG(String [] args) { super("Setup ThePEG"); if ( args.length <= 0 ) System.exit(1); String [] cmdarray = new String[args.length + 1]; cmdarray[0] = args[0]; cmdarray[1] = "--java"; debug = false; for ( int i = 1; i < args.length; ++i ) { cmdarray[i + 1] = args[i]; if ( args[i].length() >= 2 && args[i].substring(0,2).equals("-d") ) debug = true; } setIconImage(icon); try { theProcess = Runtime.getRuntime().exec(cmdarray); cmdStream = new PrintWriter(new OutputStreamWriter(theProcess.getOutputStream())); inStream = new BufferedReader(new InputStreamReader(theProcess.getInputStream())); errStream = new BufferedReader(new InputStreamReader(theProcess.getErrorStream())); stdin = new BufferedReader(new InputStreamReader(System.in)); JMenuBar menubar = new JMenuBar(); JMenu file = new JMenu("File"); loadrepo.addActionListener(this); file.add(loadrepo); saverepo.addActionListener(this); file.add(saverepo); file.add(new JSeparator()); running.addActionListener(this); file.add(running); file.add(new JSeparator()); saveActions.addActionListener(this); saveActions.setEnabled(false); file.add(saveActions); saveActionsAs.addActionListener(this); file.add(saveActionsAs); readActions.addActionListener(this); file.add(readActions); file.add(new JSeparator()); loadlib.addActionListener(this); file.add(loadlib); appendpath.addActionListener(this); file.add(appendpath); prependpath.addActionListener(this); file.add(prependpath); file.add(new JSeparator()); quit.addActionListener(this); file.add(quit); menubar.add(file); setJMenuBar(menubar); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { safeQuit(); } }); inStream.readLine(); getContentPane().setLayout(new BorderLayout()); tree = new BrowserTree(this); JMenu edit = tree.getExternalMenu(); showonly.addActionListener(this); edit.add(new JSeparator(), 0); showmenu.add(showonly); JRadioButtonMenuItem cr = new JRadioButtonMenuItem("All classes", true); showgroup.add(cr); showmenu.add(cr); cr.addActionListener(this); cr = new JRadioButtonMenuItem("Event generators", true); showgroup.add(cr); showmenu.add(cr); cr.addActionListener(this); menubar.add(edit); menubar.add(showmenu); createHelpText(); helparea.setContentType("text/html"); helparea.setText(inithelp); helparea.setEditable(false); helparea.setCaretPosition(0); JScrollPane s = new JScrollPane(helparea); s.setMinimumSize(new Dimension(300,250)); tree.setMinimumSize(new Dimension(200,250)); JSplitPane split = new JSplitPane(); split.setLeftComponent(tree); split.setRightComponent(s); split.setOneTouchExpandable(true); getContentPane().add(split, BorderLayout.CENTER); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); setSize(600,450); setLocation(100,100); setVisible(true); } catch (IOException ex) { System.err.println("Could not start sub process. Exiting."); System.exit(1); } } public void lostProcess() { System.err.println("Lost contact with sub process. Exiting."); System.exit(2); } public synchronized LinkedList action(String cmd) { LinkedList ret = exec(cmd); if ( ret == null ) return ret; actions.add(cmd); actionsPerformed = true; saveActions.setEnabled(true); return ret; } public synchronized LinkedList exec(String cmd) { LinkedList ret = new LinkedList(); boolean error = false; try { if ( debug ) System.err.println("> " + cmd); cmdStream.println(cmd); cmdStream.flush(); String s; while ( ( s = inStream.readLine() ) != null && !s.equals("-*-ready-*-")) { if ( debug ) System.err.println("< " + s); if ( s.length() >= 6 && s.substring(0,6).equals("Error:") ) error = true; ret.add(s); } if ( s == null ) lostProcess(); } catch ( IOException ex ) { lostProcess(); } if ( error ) { String mess = ""; while ( ret.size() > 0 ) mess += (String)ret.remove(0) + "\n"; JOptionPane.showMessageDialog(this, mess, "Error", JOptionPane.ERROR_MESSAGE); return null; } return ret; } public void createHelpText() { inithelp = "

THEPEG

This is the java-based setup " + "program for THEPEG, the Toolkit for High Energy " + "Physics Event Generation. You can use it manipulate the objects in " + "the repository organized in a directory structure represented " + "by the tree view on the left.

If you double-click on an object you " + "will get a window representing it where you can modify its behavior " + "by manipulating its interfaces. These interfaces can be " + "parameters, switches or references to other objects.

In the end you " + "should end up with an event generator object which you can " + "initialize and save to a file from which it can be read into another " + "program and be used to generate events. The repository already " + "contains a number of ready-built event generators, and you are " + "probably better off modifying one of them, rather than trying to " + "build your own from scratch."; } public void setLocation(Component c) { for ( int i = 0; i < locations.size(); ++i ) if ( locations.get(i) == null ) { locations.set(i, c); setLocation(c, i); return; } locations.add(c); setLocation(c, locations.size() - 1); } public void setLocation(Component c, int i) { Point pos = getLocationOnScreen(); pos.translate(200 + i*50, 100 + i*50); c.setLocation(pos); } public void removeLocation(Component c) { for ( int i = 0; i < locations.size(); ++i ) if ( locations.get(i) == c ) locations.set(i, null); } public void openObject(String name) { if ( name == null ) return; Object o = objects.get(name); if ( o == null ) { ObjectFrame obj = new ObjectFrame(this, name); objects.put(name, obj); } else { ObjectFrame of = (ObjectFrame)o; if ( !of.isVisible() ) { setLocation(of); of.setState(JFrame.NORMAL); of.setVisible(true); } of.toFront(); } } public void run() { RunSelector r = new RunSelector(this); if ( r.selected() == null ) return; if ( r.selected().equals("Create a new run") ) { ObjectSelector os = new ObjectSelector(this, "/", "ThePEG::EventGenerator"); if ( os.selected() == null ) return; openObject(os.selected().getFullName()); return; } RunFrame run = (RunFrame)r.selected(); setLocation(run); run.setVisible(true); } public void remove(RunFrame r) { runs.remove(r.getName()); action("rmrun " + r.getName()); } public RunFrame getRun(String name) { RunFrame r = (RunFrame)runs.get(name); if ( r == null ) { r = new RunFrame(this, name); runs.put(name, r); return r; } return r; } public void remove(String obj) { objects.remove(obj); } public int confirm(String question, String title) { return JOptionPane.showConfirmDialog(this, question, title, JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE ); } public void maybeSaveActions(String question) { if ( actionsPerformed && confirm(question, "Save Actions?") == JOptionPane.CANCEL_OPTION ) saveChanges(); } public void safeQuit() { if ( actionsPerformed ) { switch ( confirm("Save actions before quitting?", "Really Quit?") ) { case JOptionPane.CANCEL_OPTION: return; case JOptionPane.YES_OPTION: saveChanges(); case JOptionPane.NO_OPTION: } } System.exit(0); } public void readFile() { fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Read file of commands"); fc.setDialogType(JFileChooser.OPEN_DIALOG); fc.setFileFilter(infilter); fc.setSelectedFile(new File("")); fc.setApproveButtonToolTipText("Read the selected file " + "containing ThePEG setup commands."); if ( fc.showDialog(this, "Load") != JFileChooser.APPROVE_OPTION ) return; action("read " + fc.getSelectedFile().getAbsolutePath()); updateTrees(); } public void saveRepository() { fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Save the current repository"); fc.setDialogType(JFileChooser.SAVE_DIALOG); fc.setFileFilter(rpofilter); fc.setSelectedFile(new File("")); fc.setApproveButtonToolTipText("Save the current repository to " + "the selected file"); if ( fc.showDialog(this, "Save") != JFileChooser.APPROVE_OPTION ) return; exec("save " + fc.getSelectedFile().getAbsolutePath()); } public void loadRepository() { maybeSaveActions("Save actions before loading new repository?"); fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Load a new repository"); fc.setDialogType(JFileChooser.OPEN_DIALOG); fc.setFileFilter(rpofilter); fc.setSelectedFile(new File("")); fc.setApproveButtonToolTipText("Load a new repository from the " + "selected file."); if ( fc.showDialog(this, "Load") != JFileChooser.APPROVE_OPTION ) return; exec("load " + fc.getSelectedFile().getAbsolutePath()); updateTrees(); actions.clear(); actionsPerformed = false; saveActions.setEnabled(false); } public void saveChanges() { if ( actionFile == null ) saveChangesAs(); else { try { PrintWriter out = new PrintWriter(new FileWriter(actionFile)); for ( Iterator it = actions.iterator(); it.hasNext(); ) { String cmd = (String)it.next(); out.println(cmd); } out.close(); actionsPerformed = false; } catch ( IOException ex ) { JOptionPane.showMessageDialog(this, "Save failed!", ex.getMessage(), JOptionPane.ERROR_MESSAGE); } } } public void loadLibrary() { fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Load Dynamic Library"); fc.setDialogType(JFileChooser.OPEN_DIALOG); fc.setSelectedFile(new File("")); fc.setFileFilter(sofilter); fc.setApproveButtonToolTipText(ttt + "Load the selected library. " + "Note that the directory must " + "be in the search path."); if ( fc.showDialog(this, "Load") != JFileChooser.APPROVE_OPTION ) return; action("library " + fc.getSelectedFile().getName()); } public void addLibraryPath(boolean prepend) { fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setDialogType(JFileChooser.OPEN_DIALOG); String action = "Append"; if ( prepend ) action = "Prepend"; fc.setDialogTitle(action + " directory to load path"); fc.setDialogType(JFileChooser.OPEN_DIALOG); fc.setApproveButtonToolTipText(ttt + action + " the delected directory to the list" + "of search paths for loading dynaic " + "libraries."); fc.setSelectedFile(new File("")); if ( fc.showDialog(this, action) != JFileChooser.APPROVE_OPTION ) return; if ( prepend ) action("prependpath " + fc.getSelectedFile().getAbsolutePath()); else action("appendpath " + fc.getSelectedFile().getAbsolutePath()); } public void saveChangesAs() { fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Save actions to file"); fc.setDialogType(JFileChooser.SAVE_DIALOG); fc.setFileFilter(infilter); fc.setSelectedFile(new File("")); fc.setApproveButtonToolTipText("Save the actions performed on the " + "repository to the selected file."); if ( fc.showSaveDialog(this) != JFileChooser.APPROVE_OPTION ) return; actionFile = fc.getSelectedFile(); if ( actionFile != null ) saveChanges(); } public void showOnly() { ClassSelector sel = new ClassSelector(this); String cl = sel.selected(); if ( cl == null ) return; Enumeration it = showgroup.getElements(); while ( it.hasMoreElements() ) { JRadioButtonMenuItem b = (JRadioButtonMenuItem)it.nextElement(); if ( b.getText().equals(cl) ) { showgroup.remove(b); showmenu.remove(b); } } JRadioButtonMenuItem b = new JRadioButtonMenuItem(cl, true); b.addActionListener(this); showgroup.add(b); showmenu.add(b); b.doClick(); } public void showOnly(String cl) { if ( cl.equals("All classes") ) tree.setClass(""); else if ( cl.equals("Event generators") ) tree.setClass("ThePEG::EventGenerator"); else tree.setClass(cl); tree.update(); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == quit ) safeQuit(); else if ( e.getSource() == saveActions ) saveChanges(); else if ( e.getSource() == saveActionsAs ) saveChangesAs(); else if ( e.getSource() == running ) run(); else if ( e.getSource() == readActions ) readFile(); else if ( e.getSource() == loadlib ) loadLibrary(); else if ( e.getSource() == loadrepo ) loadRepository(); else if ( e.getSource() == saverepo ) saveRepository(); else if ( e.getSource() == showonly ) showOnly(); else if ( e.getSource() == prependpath || e.getSource() == appendpath ) addLibraryPath(e.getSource() == prependpath); else if ( e.getSource() instanceof JRadioButtonMenuItem ) { JRadioButtonMenuItem b = (JRadioButtonMenuItem)e.getSource(); showOnly(b.getText()); } } public ObjectRef getClip() { return clip; } public ObjectRef getDragged() { return dragged; } public void setDragged(ObjectRef o) { dragged = o; } public boolean isClipClone() { return clipIsClone; } public void copy(ObjectRef obj) { clip = obj; clipIsClone = false; } public void clone(ObjectRef obj) { clip = obj; clipIsClone = true; } public void delete(ObjectRef obj) { if ( obj.isDir() ) action("rmdir " + obj.getFullName()); else action("rm " + obj.getFullName()); updateTrees(); } public void rename(ObjectRef obj, String newName) { if ( obj.isDir() ) return; action("mv " + obj.getFullName() + " " + newName); updateTrees(); } public void addTree(BrowserTree t) { allTrees.add(t); } public void removeTree(BrowserTree t) { allTrees.remove(t); } public void updateTrees() { for ( Iterator it = allTrees.iterator(); it.hasNext(); ) ((BrowserTree)it.next()).update(); } public static void main(String [] args) { for ( int iarg = 0; iarg < args.length; ++iarg ) if ( args[iarg].equals("--classcheck") ) { BrowserTree.classcheck(); ClassSelector.classcheck(); Command.classcheck(); FullSlider.classcheck(); Interface.classcheck(); ObjectFrame.classcheck(); ObjectNode.classcheck(); ObjectRef.classcheck(); ObjectSelector.classcheck(); ParVector.classcheck(); Parameter.classcheck(); PopCardPanel.classcheck(); RefRef.classcheck(); RefVector.classcheck(); Reference.classcheck(); RunSelector.classcheck(); RunFrame.classcheck(); StringParameter.classcheck(); Switch.classcheck(); SwitchOption.classcheck(); return; } SetupThePEG setup = new SetupThePEG(args); } } thepeg-1.8.0.orig/java/BrowserTree.java0000644000175000017500000003277011747772425016207 0ustar sunsunpackage ThePEG; import javax.swing.JEditorPane; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.UIManager; import javax.swing.*; import javax.swing.tree.*; import javax.swing.event.*; import java.net.URL; import java.io.IOException; import java.awt.*; import java.awt.event.*; import java.awt.dnd.*; import java.awt.datatransfer.*; import java.util.*; public class BrowserTree extends JPanel implements TreeSelectionListener, TreeWillExpandListener, ActionListener, MouseListener, TreeModelListener { private SetupThePEG thepeg; private JTree tree; private DefaultTreeModel treeModel; private ObjectNode top; private static boolean DEBUG = false; JPopupMenu edit = new JPopupMenu("Edit"); JMenuItem open; JMenuItem copy; JMenuItem clone; JMenuItem remove; JMenuItem create; JMenuItem newdir; JMenuItem paste; JMenu exedit = new JMenu("Edit"); JMenuItem exopen; JMenuItem excopy; JMenuItem exclone; JMenuItem exremove; JMenuItem excreate; JMenuItem exnewdir; JMenuItem expaste; DropTarget dropper; String pclass; boolean modal = false; public BrowserTree(SetupThePEG owner) { this(owner, ""); } public BrowserTree(SetupThePEG owner, String pc) { this(owner, pc, false); } public BrowserTree(SetupThePEG owner, String pc, boolean mod, String dir) { this(owner, pc, mod); expandToDir(top, dir); } public BrowserTree(SetupThePEG owner, String pc, boolean mod) { super(new GridLayout(1,0)); modal = mod; pclass = pc; thepeg = owner; thepeg.addTree(this); // Create the menus. open = createMenuItem("Open", edit); edit.addSeparator(); create = createMenuItem("New object", edit); newdir = createMenuItem("New directory", edit); remove = createMenuItem("Delete", edit); edit.addSeparator(); copy = createMenuItem("Copy", edit); clone = createMenuItem("Clone", edit); paste = createMenuItem("Paste", edit); exopen = createMenuItem("Open", exedit); exedit.addSeparator(); excreate = createMenuItem("New object", exedit); exnewdir = createMenuItem("New directory", exedit); exremove = createMenuItem("Delete", exedit); exedit.addSeparator(); excopy = createMenuItem("Copy", exedit); exclone = createMenuItem("Clone", exedit); expaste = createMenuItem("Paste", exedit); // Create the nodes. top = new ObjectNode(thepeg, "", "/", true); top.setExpanded(true); // Create a tree that allows one selection at a time. tree = new JTree(top) { public String getToolTipText(MouseEvent e) { TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); if ( selPath == null ) return ""; ObjectRef o = getLastObject(selPath); if ( o.isDir() ) return "Directory"; else if ( o.getFullName().equals("") ) return "Null object"; else return "Object of class " + o.getClassName(); } }; ToolTipManager.sharedInstance().registerComponent(tree); tree.getSelectionModel().setSelectionMode (TreeSelectionModel.SINGLE_TREE_SELECTION); tree.setEditable(true); tree.setDragEnabled(true); tree.getModel().addTreeModelListener(this); // Listen for when the selection changes. tree.addTreeSelectionListener(this); tree.addTreeWillExpandListener(this); tree.addMouseListener(this); treeModel = (DefaultTreeModel)tree.getModel(); updateNode(top); dropper = new DropTarget(tree, new DropTargetAdapter() { public void drop(DropTargetDropEvent e) { TreePath selPath = tree.getPathForLocation(e.getLocation().x, e.getLocation().y); ObjectRef dragged = thepeg.getDragged(); thepeg.setDragged(null); if ( selPath == null || dragged == null ) { e.rejectDrop(); return; } ObjectRef o = getLastObject(selPath); if ( !o.isDir() || dragged.isDir() ) { e.rejectDrop(); return; } tree.expandPath(selPath); thepeg.rename(dragged, o.getFullName() + dragged.getName()); } }); //Create the scroll pane and add the tree to it. JScrollPane treeView = new JScrollPane(tree); add(treeView); tree.expandRow(0); } public JMenuItem createMenuItem(String name, JMenu menu) { JMenuItem it = new JMenuItem(name); it.addActionListener(this); menu.add(it); it.setEnabled(false); return it; } public JMenuItem createMenuItem(String name, JPopupMenu menu) { JMenuItem it = new JMenuItem(name); it.addActionListener(this); menu.add(it); it.setEnabled(false); return it; } public JMenu getExternalMenu() { return exedit; } public void dispose() { thepeg.removeTree(this); } public void addMouseListener(MouseListener l) { tree.addMouseListener(l); } public void valueChanged(TreeSelectionEvent e) { updateNode((ObjectNode)tree.getLastSelectedPathComponent()); } public ObjectRef getObjectRef(ObjectNode node) { return node.getObject(); } public void update() { updateNode(top); } public void addNode(ObjectNode parent, ObjectNode child) { insertNode(parent, child, parent.getChildCount()); } public void insertNode(ObjectNode parent, ObjectNode child, int indx) { treeModel.insertNodeInto(child, parent, indx); } public void removeNode(ObjectNode child) { treeModel.removeNodeFromParent(child); } public void removeChildren(ObjectNode parent) { while ( parent.getChildCount() > 0 ) removeNode((ObjectNode)parent.getFirstChild()); } public void updateNode(ObjectNode node) { if ( node == null || !node.isDir() ) return; if ( !node.isExpanded() ) { if ( node.getChildCount() == 0 ) addNode(node, new ObjectNode(thepeg, "", "", false)); return; } if ( node.getChildCount() == 1 && ((ObjectNode)node.getFirstChild()).getFullName().equals("") ) removeNode((ObjectNode)node.getFirstChild()); LinkedList ret = thepeg.exec("ls " + node.getFullName() + " " + pclass); if ( ret.size() == 0 ) { removeChildren(node); addNode(node, new ObjectNode(thepeg, "", "", false)); return; } int nobj = ret.size(); HashSet names = new HashSet(ret); for ( int i = node.getChildCount() - 1; i >= 0; --i ) { ObjectNode n = (ObjectNode)node.getChildAt(i); if ( !names.contains(n.getFullName()) ) removeNode(n); } for ( int i = 0; i < nobj; ++i ) { String name = (String)ret.remove(0); if ( i >= node.getChildCount() || !((ObjectNode)node.getChildAt(i)).getFullName().equals(name) ) insertNode(node, new ObjectNode(thepeg, name), i); } for ( int i = node.getChildCount() - 1; i >= 0; --i ) updateNode((ObjectNode)node.getChildAt(i)); } public void setClass(String cl) { pclass = cl; } public boolean expandToDir(ObjectNode node, String name) { int l = node.getFullName().length(); if ( l > name.length() ) return false; if ( !name.substring(0, l).equals(node.getFullName()) ) return false; if ( !node.isDir() ) return true; expandNode(node); for ( int i = node.getChildCount() - 1; i >= 0; --i ) if ( expandToDir((ObjectNode)node.getChildAt(i), name) ) return true; return false; } public ObjectNode getLastNode(TreePath path) { if ( path == null ) return null; return (ObjectNode)(path.getLastPathComponent()); } public ObjectRef getLastObject(TreePath path) { return getLastNode(path).getObject(); } public ObjectRef getSelectedObject() { ObjectNode node = getSelectedNode(); if ( node == null ) return null; return node.getObject(); } public ObjectNode getSelectedNode() { return getLastNode(tree.getSelectionPath()); } public void openObject(TreePath path) { getLastObject(path).open(); } public TreePath getNodePath(ObjectNode node) { return new TreePath(node.getPath()); } public void expandNode(ObjectNode node) { tree.expandPath(getNodePath(node)); } public void collapseNode(ObjectNode node) { tree.collapsePath(getNodePath(node)); } public void checkSelection(ObjectRef node) { if ( node.isDir() ) { newdir.setEnabled(true); open.setEnabled(!modal); copy.setEnabled(false); remove.setEnabled(true); clone.setEnabled(false); create.setEnabled(true); paste.setEnabled(thepeg.getClip() != null); exnewdir.setEnabled(true); exopen.setEnabled(true); excopy.setEnabled(false); exremove.setEnabled(true); exclone.setEnabled(false); excreate.setEnabled(true); expaste.setEnabled(thepeg.getClip() != null); } else { newdir.setEnabled(false); open.setEnabled(!modal); copy.setEnabled(true); remove.setEnabled(true); clone.setEnabled(true); create.setEnabled(false); paste.setEnabled(false); exnewdir.setEnabled(false); exopen.setEnabled(true); excopy.setEnabled(true); exremove.setEnabled(true); exclone.setEnabled(true); excreate.setEnabled(false); expaste.setEnabled(false); } } public ObjectNode getVisibleNode(ObjectNode node, String name) { for ( int i = 0; i < node.getChildCount(); ++i ) { ObjectNode n = (ObjectNode)node.getChildAt(i); if ( name.equals(n.getFullName()) ) return n; if ( n.isDir() && n.isExpanded() ) { ObjectNode ret = getVisibleNode(n, name); if ( ret != null ) return ret; } } return null; } public void treeWillCollapse(TreeExpansionEvent event) { getLastNode(event.getPath()).setExpanded(false); } public void treeWillExpand(TreeExpansionEvent event) { ObjectNode node = getLastNode(event.getPath()); node.setExpanded(true); updateNode(node); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == open || e.getSource() == exopen ) { ObjectRef ref = getSelectedObject(); if ( ref.isDir() ) tree.expandPath(tree.getSelectionPath()); else ref.open(); } else if ( e.getSource() == copy || e.getSource() == excopy ) { thepeg.copy(getSelectedObject()); } else if ( e.getSource() == remove || e.getSource() == exremove ) { thepeg.delete(getSelectedObject()); } else if ( e.getSource() == clone || e.getSource() == exclone ) { thepeg.clone(getSelectedObject()); } else if ( e.getSource() == create || e.getSource() == excreate ) { ObjectNode dir = getSelectedNode(); if ( !dir.isDir() ) return; ClassSelector sel = new ClassSelector(thepeg); String cl = sel.selected(); if ( cl == null ) return; String newName = dir.getFullName() + "NewObject"; thepeg.action("create " + cl + " " + newName); expandNode(dir); update(); ObjectNode n = getVisibleNode(dir, newName); if ( n != null ) tree.startEditingAtPath(getNodePath(n)); } else if ( e.getSource() == newdir || e.getSource() == exnewdir ) { ObjectNode dir = getSelectedNode(); String newName = dir.getFullName() + "NewDir/"; thepeg.action("mkdir " + newName); expandNode(dir); update(); ObjectNode n = getVisibleNode(dir, newName); if ( n != null ) tree.startEditingAtPath(getNodePath(n)); } else if ( e.getSource() == paste || e.getSource() == expaste ) { ObjectNode dir = getSelectedNode(); if ( !dir.isDir() ) return; if ( thepeg.isClipClone() ) { String newName = dir.getFullName(); thepeg.action("rcp " + thepeg.getClip().getFullName() + " " + newName); } else { String newName = dir.getFullName() + thepeg.getClip().getName(); thepeg.action("cp " + thepeg.getClip().getFullName() + " " + newName); } expandNode(dir); thepeg.updateTrees(); } } public void mousePressed(MouseEvent e) { TreePath selPath = tree.getPathForLocation(e.getX(), e.getY()); if( selPath != null ) { tree.setSelectionPath(selPath); checkSelection(getLastObject(selPath)); if ( e.isPopupTrigger() ) { edit.show(e.getComponent(), e.getX(), e.getY()); } else if(e.getClickCount() == 2) { if ( !modal ) openObject(selPath); } else { ObjectRef dragged = getLastObject(selPath); if ( dragged.isDir() ) dragged = null; thepeg.setDragged(dragged); } } } public void mouseClicked(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void treeNodesChanged(TreeModelEvent e) { ObjectNode node = getSelectedNode(); if ( node.isRoot() ) return; if ( node.toString().equals(node.getObject().getName()) ) return; if ( node.isDir() ) { if ( node.getChildCount() > 1 ) node.setUserObject(node.getObject()); else if ( node.getChildCount() == 1 && !((ObjectNode)node.getFirstChild()).getFullName().equals("") ) node.setUserObject(node.getObject()); else { thepeg.action("rmdir " + node.getFullName()); String newName = node.getFullName(); newName = newName.substring(0, newName.length() - 1); newName = newName.substring(0, newName.lastIndexOf('/') + 1); newName += node.toString(); thepeg.action("mkdir " + newName); node.setUserObject(new ObjectRef(thepeg, newName)); thepeg.updateTrees(); } return; } ObjectNode par = (ObjectNode)node.getParent(); thepeg.rename(node.getObject(), par.getObject().getFullName() + node.toString()); } public void treeNodesInserted(TreeModelEvent e) {} public void treeNodesRemoved(TreeModelEvent e) {} public void treeStructureChanged(TreeModelEvent e) {} public static void classcheck() {} } thepeg-1.8.0.orig/java/ObjectNode.java0000644000175000017500000000151411747772425015750 0ustar sunsunpackage ThePEG; import javax.swing.tree.*; public class ObjectNode extends DefaultMutableTreeNode { ObjectRef ref; boolean expanded = false; public ObjectNode(SetupThePEG tp, String nm, String fn, boolean isd) { super(new ObjectRef(tp, nm, fn, isd)); ref = (ObjectRef)getUserObject(); setAllowsChildren(ref.isDir()); } public ObjectNode(SetupThePEG tp, String f) { super(new ObjectRef(tp, f)); ref = (ObjectRef)getUserObject(); setAllowsChildren(ref.isDir()); } public ObjectRef getObject() { return ref; } public boolean isDir() { return ref.isDir(); } public String getFullName() { return ref.getFullName(); } public void setExpanded(boolean ex) { expanded = ex; } public boolean isExpanded() { return expanded; } public static void classcheck() {} } thepeg-1.8.0.orig/java/Makefile.in0000644000175000017500000003705611756366735015153 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = java DIST_COMMON = $(dist_noinst_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SCRIPTS = $(noinst_SCRIPTS) AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(jardir)" DATA = $(dist_noinst_DATA) $(nodist_jar_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ JAVASOURCES = SetupThePEG.java ObjectFrame.java \ Parameter.java FullSlider.java \ PopCardPanel.java SwitchOption.java \ Switch.java RefRef.java Reference.java \ Interface.java RefVector.java \ BrowserTree.java ObjectNode.java \ ObjectRef.java ClassSelector.java \ ObjectSelector.java StringParameter.java \ Command.java ParVector.java RunSelector.java \ RunFrame.java CLEANFILES = ThePEG.jar thepeg.sh jardir = $(pkglibdir) nodist_jar_DATA = ThePEG.jar dist_noinst_DATA = $(JAVASOURCES) jar-manifest noinst_SCRIPTS = thepeg.sh EXTRA_DIST = thepeg.install all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu java/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu java/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_jarDATA: $(nodist_jar_DATA) @$(NORMAL_INSTALL) @list='$(nodist_jar_DATA)'; test -n "$(jardir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(jardir)'"; \ $(MKDIR_P) "$(DESTDIR)$(jardir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(jardir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(jardir)" || exit $$?; \ done uninstall-nodist_jarDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_jar_DATA)'; test -n "$(jardir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(jardir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(jardir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-nodist_jarDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-local maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-nodist_jarDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) uninstall-hook .MAKE: check-am install-am install-exec-am install-strip uninstall-am .PHONY: all all-am check check-am check-local clean clean-generic \ clean-libtool clean-local distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-exec-hook \ install-html install-html-am install-info install-info-am \ install-man install-nodist_jarDATA install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installcheck-local installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-hook uninstall-nodist_jarDATA clean-local: rm -rf ThePEG ThePEG: mkdir -p ThePEG for file in $(JAVASOURCES) jar-manifest; do \ cd ThePEG; $(LN_S) ../$(srcdir)/$$file $$file; cd ..; done ThePEG.jar: ThePEG $(JAVASOURCES) $(JAVAC) -source 1.4 `for file in $(JAVASOURCES); do echo ThePEG/$$file; done` $(JAR) cmf ThePEG/jar-manifest ThePEG.jar ThePEG/*.class thepeg.sh: thepeg.install Makefile sed -e s:@pkglibdir[@]:$(pkglibdir):g \ -e s:@bindir[@]:$(bindir):g \ -e s:@java[@]:$(JAVA):g $(srcdir)/thepeg.install > thepeg.sh chmod +x thepeg.sh test: ThePEG.jar $(JAVA) -jar ThePEG.jar ../src/setupThePEG -d 1 -L../lib \ -L../../Pythia7/lib -r ../../Pythia7/lib/Pythia7Defaults.rpo check-local: $(JAVA) -Djava.awt.headless=true -jar ThePEG.jar --classcheck install-exec-hook: thepeg.sh $(install_sh) thepeg.sh $(DESTDIR)$(bindir)/thepeg uninstall-hook: rm -f $(DESTDIR)$(bindir)/thepeg installcheck-local: $(DESTDIR)$(bindir)/thepeg --classcheck # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/java/Switch.java0000644000175000017500000000723211747772425015200 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Switch extends Interface implements ActionListener { long def; long current; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setdef = new JButton("Default"); JComboBox selector = new JComboBox(); HashMap options = new HashMap(); public Switch(SetupThePEG own, ObjectFrame obj, LinkedList input) { super(own, obj, input); if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Switch view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); if ( isReadonly() ) { SwitchOption sel = (SwitchOption)selector.getSelectedItem(); getContentPane().add(sel, BorderLayout.NORTH); ok.addActionListener(this); getContentPane().add(ok, BorderLayout.SOUTH); } else { JPanel buttons = new JPanel(); buttons.add(cancel); buttons.add(reset); buttons.add(setdef); buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); reset.addActionListener(this); setdef.addActionListener(this); apply.addActionListener(this); ok.addActionListener(this); selector.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); getContentPane().add(selector, BorderLayout.NORTH); fixButtons(); } setTitle("Switch"); setupFrame(500,150); } protected boolean setup(LinkedList input) { if ( !super.setup(input) ) return false; try { current = Long.parseLong((String)input.remove(0)); def = Long.parseLong((String)input.remove(0)); long nopt = Long.parseLong((String)input.remove(0)); options.clear(); selector.removeAllItems(); for ( long iopt = 0; iopt < nopt; ++iopt ) { long val = Long.parseLong((String)input.remove(0)); SwitchOption swopt = new SwitchOption(val, (String)input.remove(0), (String)input.remove(0)); selector.addItem(swopt); options.put(new Long(val), swopt); } SwitchOption sel = (SwitchOption)options.get(new Long(current)); selector.setSelectedItem(sel); selector.setToolTipText(SetupThePEG.ttt + sel.getComment()); } catch ( NumberFormatException e ) { return false; } return true; } public long getSelected() { SwitchOption opt = (SwitchOption)(selector.getSelectedItem()); return opt.getIndex(); } private void setValue() { setValue(Long.toString(getSelected())); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !readonly ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setdef ) { selector.setSelectedItem(options.get(new Long(def))); } else if ( e.getSource() == reset ) { selector.setSelectedItem(options.get(new Long(current))); } else if ( e.getSource() == selector ) { SwitchOption sel = (SwitchOption)selector.getSelectedItem(); if ( sel != null ) selector.setToolTipText(sel.getComment()); } fixButtons(); } public void fixButtons() { if ( selector.getSelectedIndex() < 0 ) return; apply.setEnabled(getSelected() != current); reset.setEnabled(getSelected() != current); setdef.setEnabled(getSelected() != def); } public static void classcheck() {} } thepeg-1.8.0.orig/java/jar-manifest0000644000175000017500000000003711747772425015373 0ustar sunsunMain-Class: ThePEG.SetupThePEG thepeg-1.8.0.orig/java/ClassSelector.java0000644000175000017500000000540711747772425016507 0ustar sunsunpackage ThePEG; import javax.swing.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class ClassSelector extends JDialog implements MouseListener, ActionListener { String selectedClass; boolean done = false; JList classList = new JList(); JButton cancelButton = new JButton("Cancel"); JButton okButton = new JButton("Select"); SetupThePEG thepeg; public ClassSelector(SetupThePEG thepeg) { super(thepeg, "Choose a class", true); init(thepeg, "ThePEG::Interfaced", null); } public ClassSelector(SetupThePEG thepeg, String cl) { super(thepeg, "Choose a class", true); init(thepeg, cl, null); } public ClassSelector(SetupThePEG thepeg, JDialog owner, String cl) { super(owner, "Choose a class", true); init(thepeg, cl, owner); } public void init(SetupThePEG thepeg, String cl, JDialog owner) { this.thepeg = thepeg; setDefaultCloseOperation(DISPOSE_ON_CLOSE); LinkedList ret = thepeg.exec("lsclass " + cl); if ( ret.size() <= 0 ) { JOptionPane.showMessageDialog(this, "No classes found.", "Error", JOptionPane.ERROR_MESSAGE); dispose(); return; } classList.setListData(ret.toArray()); classList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); classList.addMouseListener(this); getContentPane().setLayout(new BorderLayout()); getContentPane().add(new JScrollPane(classList), BorderLayout.CENTER); JPanel panel = new JPanel(); cancelButton.addActionListener(this); okButton.addActionListener(this); panel.add(cancelButton); panel.add(okButton); getContentPane().add(panel, BorderLayout.SOUTH); setSize(300,300); thepeg.setLocation(this); setVisible(true); } public String selected() { if ( selectedClass == null || !done ) return null; return selectedClass; } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancelButton ) { selectedClass = null; dispose(); } if ( e.getSource() == okButton ) { if ( selectedClass != null ) { done = true; dispose(); } else if ( classList.getSelectedValue() != null ) { selectedClass = (String)classList.getSelectedValue(); done = true; dispose(); } } } public void mouseClicked(MouseEvent e) { if ( e.getSource() == classList && e.getClickCount() >= 2 ) { selectedClass = (String)classList.getSelectedValue(); done = true; dispose(); } } public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) {} public void mouseReleased(MouseEvent e) {} public void dispose() { thepeg.removeLocation(this); super.dispose(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/thepeg.install0000644000175000017500000000060611747772425015736 0ustar sunsun#!/bin/sh pkglibdir=@pkglibdir@ bindir=@bindir@ ThePEG_CMD="${bindir}/setupThePEG" if [ $# -gt 1 ]; then if [ "$1" = "-v" ]; then VERSION="-$2" ThePEG_CMD="${pkglibdir}/setupThePEG${VERSION}" shift 2 fi fi HEADLESS="" if [ "$1" = "--classcheck" ]; then HEADLESS="-Djava.awt.headless=true" fi exec @java@ ${HEADLESS} -jar ${pkglibdir}/ThePEG.jar ${ThePEG_CMD} "$@" thepeg-1.8.0.orig/java/Makefile.am0000644000175000017500000000335111747772425015126 0ustar sunsunJAVASOURCES = SetupThePEG.java ObjectFrame.java \ Parameter.java FullSlider.java \ PopCardPanel.java SwitchOption.java \ Switch.java RefRef.java Reference.java \ Interface.java RefVector.java \ BrowserTree.java ObjectNode.java \ ObjectRef.java ClassSelector.java \ ObjectSelector.java StringParameter.java \ Command.java ParVector.java RunSelector.java \ RunFrame.java CLEANFILES = ThePEG.jar thepeg.sh jardir = $(pkglibdir) nodist_jar_DATA = ThePEG.jar dist_noinst_DATA = $(JAVASOURCES) jar-manifest ## .sh needed for OS X case-insensitive file systems ## to avoid confusion with ThePEG directory noinst_SCRIPTS = thepeg.sh EXTRA_DIST = thepeg.install clean-local: rm -rf ThePEG ThePEG: mkdir -p ThePEG for file in $(JAVASOURCES) jar-manifest; do \ cd ThePEG; $(LN_S) ../$(srcdir)/$$file $$file; cd ..; done ThePEG.jar: ThePEG $(JAVASOURCES) $(JAVAC) -source 1.4 `for file in $(JAVASOURCES); do echo ThePEG/$$file; done` $(JAR) cmf ThePEG/jar-manifest ThePEG.jar ThePEG/*.class thepeg.sh: thepeg.install Makefile sed -e s:@pkglibdir[@]:$(pkglibdir):g \ -e s:@bindir[@]:$(bindir):g \ -e s:@java[@]:$(JAVA):g $(srcdir)/thepeg.install > thepeg.sh chmod +x thepeg.sh test: ThePEG.jar $(JAVA) -jar ThePEG.jar ../src/setupThePEG -d 1 -L../lib \ -L../../Pythia7/lib -r ../../Pythia7/lib/Pythia7Defaults.rpo check-local: $(JAVA) -Djava.awt.headless=true -jar ThePEG.jar --classcheck install-exec-hook: thepeg.sh $(install_sh) thepeg.sh $(DESTDIR)$(bindir)/thepeg uninstall-hook: rm -f $(DESTDIR)$(bindir)/thepeg installcheck-local: $(DESTDIR)$(bindir)/thepeg --classcheck thepeg-1.8.0.orig/java/StringParameter.java0000644000175000017500000001001311747772425017035 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class StringParameter extends Interface implements ActionListener { String current; String def; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setdef = new JButton("Default"); JButton browse = new JButton("Browse"); JTextField text; static final int NOFILE = 0; static final int FILE = 1; static final int DIRECTORY = 2; int filetype = 0; public StringParameter(SetupThePEG own, ObjectFrame obj, LinkedList input, int filetype) { super(own, obj, input); this.filetype = filetype; if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Parameter view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); getContentPane().add(getDescriptionArea(), BorderLayout.CENTER); if ( isReadonly() ) { JLabel lab = new JLabel(""); lab.setText("Readonly value is '" + current + "'"); lab.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); getContentPane().add(lab, BorderLayout.NORTH); ok.addActionListener(this); getContentPane().add(ok, BorderLayout.SOUTH); } else { JPanel buttons = new JPanel(); buttons.add(cancel); buttons.add(reset); buttons.add(setdef); buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); reset.addActionListener(this); setdef.addActionListener(this); apply.addActionListener(this); ok.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); JPanel textpanel = new JPanel(); textpanel.add(new JLabel("Value: ")); textpanel.add(text); if ( filetype != NOFILE ) { browse.addActionListener(this); textpanel.add(browse); } getContentPane().add(textpanel, BorderLayout.NORTH); text.addActionListener(this); fixButtons(); } setTitle("Parameter"); setupFrame(500,150); } protected boolean setup(LinkedList input) { if ( !super.setup(input) ) return false; current = (String)input.remove(0); String next = (String)input.remove(0); while ( !next.equals("-inf") && input.size() > 0 ) { current += "\n" + next; next = (String)input.remove(0); } def = (String)input.remove(0); if ( text == null ) text = new JTextField(current, 30); else text.setText(current); text.setCaretPosition(0); return true; } private void setValue() { setValue(text.getText()); reset(); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !readonly ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setdef ) { text.setText(def); text.setCaretPosition(0); } else if ( e.getSource() == reset ) { text.setText(current); text.setCaretPosition(0); } else if ( e.getSource() == browse ) { if ( filetype == NOFILE ) return; JFileChooser fc = new JFileChooser("."); fc.setDialogType(JFileChooser.OPEN_DIALOG); if ( filetype == FILE ) { fc.setFileSelectionMode(JFileChooser.FILES_ONLY); fc.setDialogTitle("Select file"); } else if ( filetype == DIRECTORY ) { fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); fc.setDialogTitle("Select directory"); } if ( fc.showDialog(this, "Select") != JFileChooser.APPROVE_OPTION ) return; text.setText(fc.getSelectedFile().getAbsolutePath()); } fixButtons(); } public void fixButtons() { String val = text.getText(); setdef.setEnabled(!val.equals(def)); reset.setEnabled(!val.equals(current)); apply.setEnabled(!val.equals(current)); } public static void classcheck() {} } thepeg-1.8.0.orig/java/ParVector.java0000644000175000017500000001512611747772425015645 0ustar sunsunpackage ThePEG; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.math.*; import java.awt.*; import java.awt.event.*; public class ParVector extends Interface implements ActionListener, ListSelectionListener, ChangeListener { Vector def; Vector min; Vector max; Vector current; Vector val; int sel = -1; boolean integer; String defdef; int size; JButton ok = new JButton("Ok"); JButton cancel = new JButton("Cancel"); JButton apply = new JButton("Apply"); JButton reset = new JButton("Reset"); JButton setdef = new JButton("Default"); JButton insert = new JButton("Insert"); JButton erase = new JButton("Erase"); JList selector = new JList(); FullSlider slider; JLabel rolabel = new JLabel("No value selected"); class Entry { public String s; public Entry(String in) { s = in; } public String toString() { return s; } public void set(String in) { s = in; } } public ParVector(SetupThePEG own, ObjectFrame obj, LinkedList input, boolean isint) { super(own, obj, input); if ( !setup(input) ) { JOptionPane.showMessageDialog(own, "Could not create Parameter Vector view", "Error", JOptionPane.ERROR_MESSAGE); return; } getContentPane().setLayout(new BorderLayout()); JSplitPane split = new JSplitPane(); split.setRightComponent(getDescriptionArea()); selector.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); selector.addListSelectionListener(this); split.setLeftComponent(selector); getContentPane().add(split, BorderLayout.CENTER); rolabel.setBorder(BorderFactory.createEmptyBorder(2,2,2,2)); slider = new FullSlider(-1.0, 0.0, 1.0, 0.0, false); slider.setEnabled(false); slider.setOwner(this); getContentPane().add(slider, BorderLayout.NORTH); if ( isReadonly() ) { ok.addActionListener(this); getContentPane().add(ok, BorderLayout.SOUTH); } else { JPanel buttons = new JPanel(); buttons.add(cancel); buttons.add(reset); buttons.add(setdef); if ( size <= 0 ) buttons.add(insert); if ( size <= 0 ) buttons.add(erase); buttons.add(apply); buttons.add(ok); cancel.addActionListener(this); reset.addActionListener(this); setdef.addActionListener(this); if ( size <= 0 ) insert.addActionListener(this); if ( size <= 0 ) erase.addActionListener(this); apply.addActionListener(this); ok.addActionListener(this); getContentPane().add(buttons, BorderLayout.SOUTH); fixButtons(); } setTitle("Parameter Vector"); setupFrame(600,300); } protected boolean setup(LinkedList input) { if ( !super.setup(input) ) return false; try { size = Integer.parseInt((String)input.remove(0)); int nvals = Integer.parseInt((String)input.remove(0)); if ( current == null ) { current = new Vector(); def = new Vector(); min = new Vector(); max = new Vector(); val = new Vector(); } else { def.clear(); min.clear(); max.clear(); val.clear(); current.clear(); } for ( int i = 0; i < nvals; ++i ) { val.add(new Entry((String)input.getFirst())); current.add((String)input.remove(0)); min.add((String)input.remove(0)); def.add((String)input.remove(0)); max.add((String)input.remove(0)); } defdef = (String)input.remove(0); } catch ( NumberFormatException e ) { return false; } val.add(new Entry(" - end - ")); sel = -1; int ssel = selector.getSelectedIndex(); selector.setListData(val); if ( ssel >= 0 && ssel < current.size() ) selector.setSelectedIndex(ssel); return true; } public void pushValue() { if ( sel < 0 || sel >= current.size() ) return; ((Entry)val.get(sel)).set(integer? Long.toString(slider.getInt()): Double.toString(slider.getDouble())); fixButtons(); selector.repaint(); } protected void setValue() { for ( int i = 0; i < current.size(); ++i ) { String cmd = "set " + getObject() + ":" + getName() + "[" + Long.toString(i) + "] " + val.get(i); exec(cmd); } reset(); } protected void insert() { int ssel = selector.getSelectedIndex(); if ( ssel < 0 || ssel > current.size() ) { ssel = current.size(); selector.setSelectedIndex(ssel); } insert(ssel, defdef); } protected void erase() { int ssel = selector.getSelectedIndex(); if ( ssel >= 0 || ssel < current.size() ) erase(ssel); } public void fixButtons() { int ssel = selector.getSelectedIndex(); if ( isReadonly() ) return; boolean changed = false; for ( int i = 0; i < current.size(); ++i ) if ( !((String)current.get(i)).equals(((Entry)val.get(i)).toString()) ) changed = true; apply.setEnabled(changed); reset.setEnabled(changed); insert.setEnabled(ssel >= 0 && ssel < val.size() ); erase.setEnabled(ssel >= 0 && ssel < current.size() ); setdef.setEnabled(false); if ( ssel >= 0 && ssel < current.size() && !((String)def.get(ssel)).equals(((Entry)val.get(ssel)).toString()) ) setdef.setEnabled(true); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == cancel ) { dispose(); } else if ( e.getSource() == ok ) { if ( !readonly ) setValue(); dispose(); } else if ( e.getSource() == apply ) { setValue(); } else if ( e.getSource() == setdef ) { setDefault(selector.getSelectedIndex()); } else if ( e.getSource() == reset ) { reset(); } else if ( e.getSource() == insert ) { insert(); } else if ( e.getSource() == erase ) { erase(); } fixButtons(); } public void setDefault(int ssel) { if ( ssel < 0 || ssel >= current.size() ) return; ((Entry)val.get(ssel)).set((String)def.get(ssel)); selectSlider(ssel); } public void selectSlider(int ssel) { if ( ssel >= 0 && ssel < current.size() ) { try { double dval = Double.parseDouble(((Entry)val.get(ssel)).toString()); double ddef = Double.parseDouble((String)def.get(ssel)); String cmin = (String)min.get(ssel); String cmax = (String)max.get(ssel); sel = ssel; slider.set(cmin, dval, cmax, ddef); slider.setEnabled(!isReadonly()); } catch ( NumberFormatException ex ) { return; } } else { slider.setEnabled(false); sel = -1; } fixButtons(); } public void valueChanged(ListSelectionEvent e) { if ( e.getSource() == selector ) selectSlider(selector.getSelectedIndex()); } public void stateChanged(ChangeEvent e) { fixButtons(); } public static void classcheck() {} } thepeg-1.8.0.orig/java/RunFrame.java0000644000175000017500000002203111747772425015450 0ustar sunsunpackage ThePEG; import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class RunFrame extends JFrame implements ActionListener, Runnable { SetupThePEG thepeg; String name; JTextField dirfield = new JTextField(".", 25); JTextField hostfield = new JTextField("localhost", 25); JTextField nevefield = new JTextField("default", 25); JTextField argfield = new JTextField("", 25); JProgressBar progbar = new JProgressBar(0, 1000); JLabel progfield = new JLabel("Not running"); JLabel etcfield = new JLabel("Not running"); JPanel progpanel = new JPanel(); CardLayout progcards = new CardLayout(); JButton closebutton = new JButton("Close"); JButton removebutton = new JButton("Remove"); JButton runbutton = new JButton("Run"); File runfile = null; boolean running = false; boolean done = false; boolean stop = false; long progpercent; Thread runthread = null; Process runthepeg; String errors; GridBagConstraints gc = new GridBagConstraints(); public RunFrame(SetupThePEG thepeg, String name) { super("ThePEG run " + name); this.thepeg = thepeg; this.name = name; setIconImage(thepeg.icon); getContentPane().setLayout(new GridBagLayout()); gc.fill = GridBagConstraints.HORIZONTAL; gc.insets = new Insets(2, 10, 2, 10); progbar.setStringPainted(true); progpanel.setLayout(progcards); progpanel.add(progbar, "running"); progpanel.add(progfield, "stopped"); progcards.show(progpanel, "stopped"); add(new JLabel("Run name: ", JLabel.RIGHT), 0, 0, 1, 1.2); add(new JLabel("Run in directory: ", JLabel.RIGHT), 0, 1, 1, 1.2); add(new JLabel("Run on host: ", JLabel.RIGHT), 0, 2, 1, 1.2); add(new JLabel("Number of events: ", JLabel.RIGHT), 0, 3, 1, 1.2); add(new JLabel("Additional arguments: ", JLabel.RIGHT), 0, 4, 1, 1.2); add(new JLabel("Progress: ", JLabel.RIGHT), 0, 5, 1, 1.2); add(new JLabel("Estimated time left: ", JLabel.RIGHT), 0, 6, 1, 1.2); add(new JLabel(name, JLabel.LEFT), 1, 0, 1.99, 1); add(dirfield, 1, 1, 1.99, 1); add(hostfield, 1, 2, 1.99, 1); add(nevefield, 1, 3, 1.99, 1); add(argfield, 1, 4, 1.99, 1); add(progpanel, 1, 5, 1.99, 1); add(etcfield, 1, 6, 1.99, 1); dirfield.setToolTipText("The (existing) directory where the " + "run should be done."); hostfield.setToolTipText(SetupThePEG.ttt + "The host where the run should be done. " + "Must be reachable with ssh without " + "password and must have ThePEG installed."); nevefield.setToolTipText(SetupThePEG.ttt + "If not a number, the default number of events " + "of the EventGenerator object will be used."); argfield.setToolTipText("Eg. \"-d 2\" for debug level."); JPanel buttons = new JPanel(); buttons.add(closebutton); buttons.add(removebutton); buttons.add(runbutton); add(buttons, 0, 7, 2.99, 1.2); closebutton.addActionListener(this); removebutton.addActionListener(this); runbutton.addActionListener(this); pack(); } private void startRun() { runthread = new Thread(this); runthread.start(); } private void abortRun() { stop = true; if ( runthepeg != null ) runthepeg.destroy(); try { runthread.join(); } catch (InterruptedException e) {} setAborted(); } private void setAborted() { progcards.show(progpanel, "stopped"); etcfield.setText("Aborted"); progfield.setText("Aborted"); } public void showError(String mess) { JOptionPane.showMessageDialog(this, mess, "Error", JOptionPane.ERROR_MESSAGE); } public void run() { runbutton.setText("Abort"); dirfield.setEnabled(false); hostfield.setEnabled(false); argfield.setEnabled(false); nevefield.setEnabled(false); running = true; done = false; progcards.show(progpanel, "running"); etcfield.setText("Not known"); Vector args = new Vector(); args.add("runThePEG"); args.add("-cat"); try { runfile = File.createTempFile("thepeg-", ".run"); } catch (IOException e) { JOptionPane.showMessageDialog(this, "Could not save run file.", "Error", JOptionPane.ERROR_MESSAGE); return; } thepeg.exec("saverunfile " + getName() + " " + runfile.getPath()); args.add(runfile.getPath()); String host = hostfield.getText(); if ( host.matches("\\w+") && !host.equals("localhost") ) { args.add("-host"); args.add(host); } args.add("-dir"); args.add(dirfield.getText()); try { long i = Long.parseLong(nevefield.getText()); if ( i > 0 ) { args.add("-N"); args.add("" + i); } } catch ( NumberFormatException e) {} args.add("--tics"); StringTokenizer st = new StringTokenizer(argfield.getText()); while ( st.hasMoreTokens() ) args.add(st.nextToken()); if ( thepeg.debug ) System.err.print("> Starting: "); String [] arg = new String[args.size()]; for ( int i = 0; i < args.size(); ++i ) { arg[i] = args.get(i).toString(); if ( thepeg.debug ) System.err.print( " " + arg[i]); } if ( thepeg.debug ) System.err.println(); etcfield.setText("Unknown"); try { runthepeg = Runtime.getRuntime().exec(arg); BufferedReader outStream = new BufferedReader(new InputStreamReader(runthepeg.getInputStream())); BufferedReader errStream = new BufferedReader(new InputStreamReader(runthepeg.getErrorStream())); errors = ""; String s; Date t0 = null; Date tp = null; long ip = 0; long ieve = 0; long neve = 0; while ( ( s = errStream.readLine() ) != null ) { st = new StringTokenizer(s); if ( st.countTokens() >= 3 && st.nextToken().equals("tic>") ) { try { ieve = Long.parseLong(st.nextToken()); neve = Long.parseLong(st.nextToken()); progbar.setValue((int)((ieve*1000)/neve)); progpercent = (ieve*100)/neve; if ( t0 == null ) { t0 = new Date(); tp = t0; ip = ieve; } else if ( ieve != neve ) { Date t = new Date(); long tn = (t.getTime() - t0.getTime())*(neve - ieve)/ieve; long tnp = (t.getTime() - tp.getTime())*(neve - ieve)/(ieve - ip); tn = ((neve - ieve)*tn + ieve*tnp)/neve; setETC(tn); tp = t; ip = ieve; } } catch ( NumberFormatException e) { showError(s); } } else showError(s); } if ( ieve == neve ) { progfield.setText("Done"); progcards.show(progpanel, "stopped"); etcfield.setText("Done"); } else setAborted(); } catch ( IOException ex ) { setAborted(); } progbar.setValue(0); runbutton.setText("Rerun"); dirfield.setEnabled(true); hostfield.setEnabled(true); argfield.setEnabled(true); nevefield.setEnabled(true); running = false; if ( !stop ) done = true; stop = false; runfile.delete(); runfile = null; runthepeg = null; } public void setETC(long t) { String str; if ( t >= 3600000 ) { long h = t/3600000; str = "" + h + " hour"; if ( h > 1 ) str += "s"; long m = (t%3600000)/60000; if ( h < 10 && m > 0 ) { str += " and " + m + " minute"; if ( m > 1 ) str += "s"; } } else if ( t >= 60000 ) { long m = t/60000; str = "" + m + " minute"; if ( m > 1 ) str += "s"; long s = (t%60000)/1000; if ( m < 10 && s > 0 ) { str += " and " + s + " second"; if ( s > 1 ) str += "s"; } } else if ( t >= 1000 ) { long s = t/1000; str = "" + s + " second"; if ( s > 1 ) str += "s"; } else str = "0 seconds"; etcfield.setText(str); } public void actionPerformed(ActionEvent e) { if ( e.getSource() == closebutton ) { dispose(); } else if ( e.getSource() == removebutton ) { if ( running ) { if ( JOptionPane.showConfirmDialog (this, "This run is currently executing. Removing it will " + "abort the run. Really remove?", "Really Remove?", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE ) != JOptionPane.YES_OPTION ) return; abortRun(); } thepeg.remove(this); dispose(); } else if ( e.getSource() == runbutton ) { if ( running ) abortRun(); else startRun(); } } public String toString() { if ( done ) return name + " (done)"; else if ( running ) return name + " (" + progpercent + "%)"; else return name; } public String getName() { return name; } public void add(Component item, int x, int y, double dx, double dy) { int ox = gc.gridx; gc.gridx = x; int oy = gc.gridy; gc.gridy = y; int odx = gc.gridwidth; gc.gridwidth = (int)dx; int ody = gc.gridheight; gc.gridheight = (int)dy; double owx = gc.weightx; gc.weightx = dx - gc.gridwidth; double owy = gc.weighty; gc.weighty = dy - gc.gridheight; getContentPane().add(item, gc); gc.gridx = ox; gc.gridy = oy; gc.gridwidth = odx; gc.gridheight = ody; gc.weightx = owx; gc.weighty = owy; } public static void classcheck() {} } thepeg-1.8.0.orig/m4/0000755000175000017500000000000011756460365012464 5ustar sunsunthepeg-1.8.0.orig/m4/libtool.m40000644000175000017500000105721611756366730014407 0ustar sunsun# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ]) # serial 57 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_CC_BASENAME(CC) # ------------------- # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. m4_defun([_LT_CC_BASENAME], [for cc_temp in $1""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from `configure', and `config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # `config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain="$ac_aux_dir/ltmain.sh" ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the `libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to `config.status' so that its # declaration there will have the same value as in `configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags="_LT_TAGS"dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the `libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into `config.status', and then the shell code to quote escape them in # for loops in `config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ \`$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test $[#] != 0 do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try \`$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try \`$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test "$silent" = yes && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # _LT_COPYING _LT_LIBTOOL_TAGS # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS="$save_LDFLAGS" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[[012]]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" m4_if([$1], [CXX], [ if test "$lt_cv_apple_cc_single_mod" != "yes"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test x"[$]$2" = xyes; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" ]) if test x"[$]$2" = xyes; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n $lt_cv_sys_max_cmd_len ; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "$cross_compiling" = yes; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen="shl_load"], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen="dlopen"], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) ]) ]) ]) ]) ]) ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links="nottested" if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test "$hard_links" = no; then AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", [Define to the sub-directory in which libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then # We can hardcode non-existent directories. if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[[89]] | openbsd2.[[89]].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([], [sys_lib_dlsearch_path_spec], [2], [Run-time system search path for libraries]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program which can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$1; then lt_cv_path_MAGIC_CMD="$ac_dir/$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac]) MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program which can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi]) if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM="-lm") ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test "$GCC" = yes; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test "$GCC" = yes; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test "$with_gnu_ld" = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' else case $host_os in openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' ;; esac fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting ${shlibpath_var} if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC="$CC" AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report which library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC="$lt_save_CC" ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to `libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes # This is similar to how AIX traditionally builds its shared # libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; gnu*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd2*) # C++ shared libraries are fairly broken _LT_TAGVAR(ld_shlibs, $1)=no ;; openbsd*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no _LT_TAGVAR(GCC, $1)="$GXX" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)="${prev}${p}" else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)="$p" else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)="$p" else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' fi ;; esac ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_F77" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$G77" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC="$lt_save_CC" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_disable_FC" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" _LT_TAGVAR(LD, $1)="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test "$_lt_disable_FC" != yes AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code="$lt_simple_compile_test_code" # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC="$CC" lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f $lt_ac_sed && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test $lt_ac_count -gt 10 && break lt_ac_count=`expr $lt_ac_count + 1` if test $lt_ac_count -gt $lt_ac_max; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [AC_MSG_CHECKING([whether the shell understands some XSI constructs]) # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes AC_MSG_RESULT([$xsi_shell]) _LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) AC_MSG_CHECKING([whether the shell understands "+="]) lt_shell_append=no ( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes AC_MSG_RESULT([$lt_shell_append]) _LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary parameter first. func_stripname_result=${3} func_stripname_result=${func_stripname_result#"${1}"} func_stripname_result=${func_stripname_result%"${2}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS thepeg-1.8.0.orig/m4/thepeg.m40000644000175000017500000003576211747772425014222 0ustar sunsun# check for gcc bug http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34130 AC_DEFUN([THEPEG_CHECK_ABS_BUG], [ if test "$GCC" = "yes"; then AC_MSG_CHECKING([for gcc abs bug]) AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[ int foo (int i) { return -2 * __builtin_abs(i - 2); } ]], [[ if ( foo(1) != -2 || foo(3) != -2 ) return 1; ]] )], [ AC_MSG_RESULT([not found. Compiler is ok.]) ], [ AC_MSG_RESULT([found. Builtin abs() is buggy.]) AC_MSG_CHECKING([if -fno-builtin-abs works]) oldcxxflags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -fno-builtin-abs" AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[ #include int foo (int i) { return -2 * std::abs(i - 2); } ]], [[ if (foo(1) != -2 || foo(3) != -2) return 1; ]] )], [ AC_MSG_RESULT([yes. Setting -fno-builtin-abs.]) AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin-abs" AM_CFLAGS="$AM_CFLAGS -fno-builtin-abs" ], [ AC_MSG_RESULT([no. Setting -fno-builtin.]) AC_MSG_WARN([ ***************************************************************************** For this version of gcc, -fno-builtin-abs alone did not work to avoid the gcc abs() bug. Instead, all gcc builtin functions are now disabled. Update gcc if possible. *****************************************************************************]) AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin" AM_CFLAGS="$AM_CFLAGS -fno-builtin" ] ) CXXFLAGS=$oldcxxflags ] ) fi ]) # Search for LHAPDF and g77 compiler in standard directories AC_DEFUN([THEPEG_SEARCH_LHAPDF], [ AC_MSG_CHECKING([if LHAPDF is present and works]) HAS_LHAPDF="yes" LHAPDF_LIBDIR="" LOAD_LHAPDF="" AC_ARG_WITH(LHAPDF,[ --without-LHAPDF do not use LHAPDF package (requires g77 compiler) (included by default --with-LHAPDF=path to specify where the LHAPDF shared library is located)], [if test -n "$with_LHAPDF" -a "x$with_LHAPDF" != "xyes" -a "x$with_LHAPDF" != "xno"; then LHAPDF_LIBDIR="$with_LHAPDF"; elif test "x$with_LHAPDF" == "xno"; then HAS_LHAPDF="no"; fi]) LHAPDF_LDFLAGS="" if test -n "$LHAPDF_LIBDIR"; then if test -e $LHAPDF_LIBDIR/libLHAPDF.so -o -e $LHAPDF_LIBDIR/libLHAPDF.dylib then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR" elif test "${host_cpu}" == "x86_64" -a -e $LHAPDF_LIBDIR/lib64/libLHAPDF.so then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR/lib64" elif test -e $LHAPDF_LIBDIR/lib/libLHAPDF.so -o -e $LHAPDF_LIBDIR/lib/libLHAPDF.dylib then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR/lib" else HAS_LHAPDF="no" fi fi LHAPDF_LIBS="-lLHAPDF" oldLIB="$LIBS" oldLDFLAGS="$LDFLAGS" if test "$HAS_LHAPDF" == "yes"; then dnl Now lets see if the libraries work properly LIBS="$LIBS $LHAPDF_LIBS" LDFLAGS="$LDFLAGS $LHAPDF_LDFLAGS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[extern "C" { void initpdf_(int&); }]], [[int i = 1; initpdf_(i);]])], , HAS_LHAPDF="no") fi LIBS="$oldLIB" LDFLAGS="$oldLDFLAGS" if test "$HAS_LHAPDF" == "yes"; then AC_MSG_RESULT([yes]) LHAPDF_PKGDATADIR="$LHAPDF_LIBDIR/../share/lhapdf" LOAD_LHAPDF="library ThePEGLHAPDF.so" dnl don't need to check for existence of LHAPDF_PKGDATADIR dnl if this location is invalid, we'll use ThePEG's index file anyway elif test "x$with_LHAPDF" == "xno" -o "x$with_LHAPDF" == "x"; then AC_MSG_RESULT([no]) else AC_MSG_ERROR([LHAPDF was requested but the library was not found.]) fi AC_SUBST(LHAPDF_LIBS) AC_SUBST(LOAD_LHAPDF) AC_SUBST(LHAPDF_LDFLAGS) AC_SUBST(LHAPDF_PKGDATADIR) AM_CONDITIONAL([USELHAPDF], [test "x$HAS_LHAPDF" == "xyes"]) ]) # Check for ThePEG. AC_DEFUN([THEPEG_CHECK_THEPEG], [THEPEGBUILD="no" AC_MSG_CHECKING([if THEPEGPATH is set]) if test -z "$THEPEGPATH"; then if test -f "../ThePEG/Config/config.h"; then THEPEGPATH="\$(top_builddir)/../ThePEG" THEPEGBUILD="yes" AC_MSG_RESULT([no (using ../ThePEG)]) AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_builddir)/../ThePEG/include " SETUPTHEPEG="$THEPEGPATH/src/setupThePEG -L $THEPEGPATH/lib" RUNTHEPEG="$THEPEGPATH/src/runThePEG -L $THEPEGPATH/lib" THEPEGDOC="\$(top_builddir)/../ThePEG/Doc" THEPEGLIB="\$(top_builddir)/../ThePEG/lib" else if test "x$prefix" == "xNONE"; then THEPEGPATH=$ac_default_prefix else THEPEGPATH=$prefix fi AC_MSG_RESULT([no (using $THEPEGPATH)]) fi else AC_MSG_RESULT([yes ($THEPEGPATH)]) fi if test "$THEPEGBUILD" == "no"; then AM_CPPFLAGS="-I\$(top_builddir)/include -I$THEPEGPATH/include " SETUPTHEPEG="$THEPEGPATH/bin/setupThePEG" RUNTHEPEG="$THEPEGPATH/bin/runThePEG" THEPEGDOC="$THEPEGPATH/share/ThePEG/Doc" THEPEGLIB="$THEPEGPATH/lib/ThePEG" AC_MSG_CHECKING([if the installed ThePEG works]) if test -x $SETUPTHEPEG && $SETUPTHEPEG /dev/null; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR(ThePEG must be installed and THEPEGPATH set properly.) fi fi AC_ARG_VAR(THEPEGPATH,[The path to where ThePEG is installed. Default is $prefix unless we are working in a sister of the build directory of ThePEG.]) pkglibdir="\$(libdir)/ThePEG" AC_SUBST(pkglibdir) AC_SUBST(THEPEGPATH) AC_SUBST(THEPEGINCLUDE) AC_SUBST(THEPEGDOC) AC_SUBST(THEPEGLIB) AC_SUBST(SETUPTHEPEG) AC_SUBST(RUNTHEPEG) AC_SUBST(AM_CPPFLAGS) ]) # Search for ThePEG in standard places. AC_DEFUN([THEPEG_SEARCH_THEPEG], [THEPEGBUILD="no" AC_MSG_CHECKING([if THEPEGPATH is set]) if test -z "$THEPEGPATH"; then if test -f "../ThePEG/Config/config.h"; then THEPEGPATH="\$(top_builddir)/../ThePEG" THEPEGBUILD="yes" AC_MSG_RESULT([no (found ../ThePEG)]) AM_CPPFLAGS="-I\$(top_builddir)/include -I\$(top_builddir)/../ThePEG/include " SETUPTHEPEG="$THEPEGPATH/src/setupThePEG -L $THEPEGPATH/lib" RUNTHEPEG="$THEPEGPATH/src/runThePEG -L $THEPEGPATH/lib" THEPEGDOC="\$(top_builddir)/../ThePEG/Doc" THEPEGLIB="\$(top_builddir)/../ThePEG/lib" else for dirbase in / /usr $ac_default_prefix $prefix; do if test -f $dirbase/include/ThePEG/Config/config.h; then THEPEGPATH=$dirbase fi done if test -z "$THEPEGPATH"; then AC_MSG_RESULT([no]) AC_MSG_ERROR(Could not find a valid ThePEG installation or build directory) else AC_MSG_RESULT([no (found $THEPEGPATH)]) fi fi else AC_MSG_RESULT([yes ($THEPEGPATH)]) fi if test "$THEPEGBUILD" == "no"; then AM_CPPFLAGS="-I\$(top_builddir)/include -I$THEPEGPATH/include " SETUPTHEPEG="$THEPEGPATH/bin/setupThePEG" RUNTHEPEG="$THEPEGPATH/bin/runThePEG" THEPEGDOC="$THEPEGPATH/share/ThePEG/Doc" THEPEGLIB="$THEPEGPATH/lib/ThePEG" AC_MSG_CHECKING([if the installed ThePEG works]) if test -x $SETUPTHEPEG && $SETUPTHEPEG /dev/null; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR(ThePEG must be installed and THEPEGPATH set properly.) fi fi AC_ARG_VAR(THEPEGPATH,[The path to where ThePEG is installed. Default is $prefix unless we are working in a sister of the build directory of ThePEG.]) pkglibdir="\$(libdir)/ThePEG" AC_SUBST(pkglibdir) AC_SUBST(THEPEGPATH) AC_SUBST(THEPEGINCLUDE) AC_SUBST(THEPEGDOC) AC_SUBST(THEPEGLIB) AC_SUBST(SETUPTHEPEG) AC_SUBST(RUNTHEPEG) AC_SUBST(AM_CPPFLAGS) ]) AC_DEFUN([THEPEG_EMPTY_SUBST], [EMPTY="" AC_SUBST(EMPTY) ]) AC_DEFUN([THEPEG_SEARCH_PREFIXDIR_FILES], [AC_MSG_CHECKING([if $1 and $2 is set]) if test -z "$$1"; then for dirbase in / /usr $ac_default_prefix $prefix; do if test -z "$$2"; then for filename in $4; do if test -f $dirbase/$3/$filename; then $1=$dirbase/$3 $2=$filename fi done else if test -f $dirbase/$3/$$2; then $1=$dirbase/$3 fi fi done if test -z "$$1" -o -z "$$2"; then AC_MSG_ERROR(no. Could not guess appropriate value for $1 and $2) else AC_MSG_RESULT([no (found $$1 and $$2)]) fi else if test -z "$$2"; then for filename in $4; do if test -f $$1/$filename; then $2=$filename fi done AC_MSG_RESULT([no (found $$1 and $$2)]) else if test -f $$1/$$2; then AC_MSG_RESULT([yes ($$1 and $$2)]) else AC_MSG_ERROR(no. Could not guess appropriate value for $1 and $2) fi fi fi AC_ARG_VAR($1,[$5]) AC_ARG_VAR($2,[$6]) ]) AC_DEFUN([THEPEG_CHECK_PREFIXDIR], [AC_MSG_CHECKING([if $1 is set]) if test -z "$$1"; then if test -d $prefix/$2; then $1=$prefix/$2 elif test -d $ac_default_prefix/$2; then $1=$ac_default_prefix/$2 elif test -d /usr/$2; then $1=/usr/$2 elif test -d /$2; then $1=/$2 else AC_MSG_ERROR(no. Could not guess appropriate value for $1) fi AC_MSG_RESULT([no (using $$1)]) else AC_MSG_RESULT([yes ($$1)]) fi AC_ARG_VAR($1,[$3]) ]) AC_DEFUN([THEPEG_CHECK_ENVDEFAULT], [AC_MSG_CHECKING([if $1 is set]) if test -z "$$1"; then $1="$2" AC_MSG_RESULT([no (using $$1)]) else AC_MSG_RESULT([yes ($$1)]) fi AC_ARG_VAR($1,[$3]) ]) AC_DEFUN([THEPEG_DEFINE_ENVDEFAULT], [AC_MSG_CHECKING([if $2 is set]) if test -z "$$2"; then $2="$3" AC_MSG_RESULT([no (using $$2)]) else AC_MSG_RESULT([yes ($$2)]) fi AC_ARG_VAR($2,[$4]) AC_DEFINE_UNQUOTED($1,"$$2",[$4]) ]) AC_DEFUN([THEPEG_CHECK_EXPM1], [echo $ECHO_N "checking for expm1... $ECHO_C" 1>&6 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[expm1(1.0); ]])],[AC_DEFINE(ThePEG_HAS_EXPM1,1,define if expm1 is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_CHECK_LOG1P], [echo $ECHO_N "checking for log1p... $ECHO_C" 1>&6 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[log1p(1.0); ]])],[AC_DEFINE(ThePEG_HAS_LOG1P,1,define if log1p is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_CHECK_AIDA], [ AC_REQUIRE([THEPEG_CHECK_RIVET]) echo $ECHO_N "checking for installed AIDA headers... $ECHO_C" 1>&6 dnl if test "x$with_rivet" != "xno"; then dnl echo "using rivet aida" dnl LWHINCLUDE="\$(RIVETINCLUDE)/LWH" dnl else LWHINCLUDE="-I\$(top_builddir)/include/ThePEG/Analysis/LWH" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include "AIDA/IAnalysisFactory.h" ]], [[AIDA::IAnalysisFactory * af; ]])],[AC_DEFINE(LWH_USING_AIDA,1,define if AIDA headers are installed) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6]) dnl fi AC_SUBST([LWHINCLUDE]) ]) AC_DEFUN([THEPEG_CHECK_DLOPEN], [echo $ECHO_N "checking for dlopen... $ECHO_C" 1>&6 # do this with libtool! AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[dlopen("", 1); ]])],[AC_DEFINE(ThePEG_HAS_DLOPEN,1,define if dlopen is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_CHECK_SSTREAM], [echo $ECHO_N "checking for ... $ECHO_C" 1>&6 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[std::ostringstream os; ]])],[AC_DEFINE(ThePEG_HAS_SSTREAM,1,define if sstream is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_CHECK_FPUCONTROL], [echo $ECHO_N "checking for ... $ECHO_C" 1>&6 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_IM|_FPU_MASK_DM|_FPU_MASK_ZM|_FPU_MASK_OM); _FPU_SETCW(cw); ]])],[AC_DEFINE(ThePEG_HAS_FPU_CONTROL,1,define if fpucontrol is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_CHECK_FENV], [echo $ECHO_N "checking for ... $ECHO_C" 1>&6 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[feenableexcept(FE_DIVBYZERO|FE_OVERFLOW|FE_INVALID);]])],[AC_DEFINE(ThePEG_HAS_FENV,1,define if fenv is available) echo "${ECHO_T}yes" 1>&6 ],[echo "${ECHO_T}no" 1>&6])]) AC_DEFUN([THEPEG_ADD_THEPEG_PATH], [if test "$THEPEGBUILD" == "yes"; then if test -f "../$2/Config/config.h"; then $1="\$(top_builddir)/../$2/lib" SETUPTHEPEG="$SETUPTHEPEG -L\$(top_builddir)/../$2/lib" RUNTHEPEG="$RUNTHEPEG -L\$(top_builddir)/../$2/lib" AM_CPPFLAGS="$AM_CPPFLAGS -I\$(top_builddir)/../$2/include" fi else $1="$THEPEGLIB" fi AC_SUBST($1) ]) AC_DEFUN([THEPEG_HAS_JAVA], [ hasjava=yes AC_PATH_PROG(JAVAC, javac) AC_PATH_PROG(JAVA, java) AC_PATH_PROG(JAR, jar) if test -z "$JAR" -o -z "$JAVA" -o -z "$JAVAC"; then hasjava=no; else AC_MSG_CHECKING([if java works]) echo 'public class conftest { public static void main(String[[]]arg){}}' > conftest.java $JAVAC -source $1 conftest.java 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi echo "Main-Class: conftest" > conftest.manifest $JAR cmf conftest.manifest conftest.jar conftest.class 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi $JAVA -jar conftest.jar 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi rm -f conftest.java conftest.err conftest.class conftest.manifest conftest.jar fi if test "x$hasjava" != "xno"; then AC_MSG_RESULT([yes]) $2 else AC_MSG_RESULT([no]) $3 fi ]) AC_DEFUN([THEPEG_LIBTOOL_VERSION_INFO], [ LIBTOOLVERSIONINFO="-version-info $1:$2:$3" AC_SUBST(LIBTOOLVERSIONINFO)]) AC_DEFUN([THEPEG_UNIT_CHECKING], [ AC_MSG_CHECKING([whether to include dimension checking]) AC_ARG_ENABLE(unitchecks, AC_HELP_STRING([--enable-unitchecks],[turns on dimension checking for physical quantities.]), [], [enable_unitchecks=no] ) AC_MSG_RESULT([$enable_unitchecks]) if test "x$enable_unitchecks" = "xyes"; then AC_DEFINE([ThePEG_HAS_UNITS_CHECKING],[1],[define if units should be checked]) fi ]) AC_DEFUN([THEPEG_CHECK_GSL], [ AC_MSG_CHECKING([for gsl location]) GSLINCLUDE="" GSLLIBS="" AC_ARG_WITH(gsl, AC_HELP_STRING([--with-gsl=path],[location of gsl installation. Default: system lib]), [], [with_gsl=system]) if test "x$with_gsl" = "xno"; then AC_MSG_ERROR([libgsl is required. Please install the GNU scientific library and header files.]) fi if test "x$with_gsl" = "xsystem"; then AC_MSG_RESULT([in system libraries]) oldlibs="$LIBS" AC_CHECK_LIB(m,sqrt) AC_CHECK_LIB(gslcblas,cblas_srot) AC_CHECK_LIB(gsl,gsl_ran_poisson,[], [ AC_MSG_ERROR([Cannot find libgsl. Please install the GNU scientific library.]) ] ) GSLLIBS="$LIBS" LIBS=$oldlibs else if test "`uname -m`" = "x86_64" -a -e "$with_gsl/lib64/libgsl.a" -a -d "$with_gsl/include/gsl"; then AC_MSG_RESULT([found in $with_gsl]) GSLLIBS="-L$with_gsl/lib64 -R$with_gsl/lib64 -lgsl -lgslcblas" GSLINCLUDE="-I$with_gsl/include" elif test -e "$with_gsl/lib/libgsl.a" -a -d "$with_gsl/include/gsl"; then AC_MSG_RESULT([found in $with_gsl]) GSLLIBS="-L$with_gsl/lib -R$with_gsl/lib -lgsl -lgslcblas" GSLINCLUDE="-I$with_gsl/include" else AC_MSG_RESULT([not found]) AC_MSG_ERROR([Can't find $with_gsl/lib/libgsl.a or the headers in $with_gsl/include]) fi fi dnl AM_CONDITIONAL(HAVE_GSL,[test "x$with_HepMC" != "xno"]) AC_SUBST(GSLINCLUDE) AC_SUBST(GSLLIBS) ]) AC_DEFUN([THEPEG_OVERVIEW], [ CXXSTRING=`$CXX --version | head -1` cat << _THEPEG_EOF_ > config.thepeg ***************************************************** *** $PACKAGE_STRING configuration summary *** Please include this information in bug reports! ***-------------------------------------------------- *** Prefix: $prefix *** *** Dimension checks: $enable_unitchecks *** *** GSL: $with_gsl *** *** LHAPDF: $with_LHAPDF *** HepMC: $with_hepmc *** Rivet: $with_rivet *** *** Host: $host *** CXX: $CXXSTRING ***************************************************** _THEPEG_EOF_ ]) thepeg-1.8.0.orig/m4/hepmc.m40000644000175000017500000000420111747772425014022 0ustar sunsundnl ##### HEPMC ##### AC_DEFUN([THEPEG_CHECK_HEPMC], [ AC_MSG_CHECKING([for HepMC location]) HEPMCINCLUDE="" HEPMCLIBS="-lHepMC" AC_ARG_WITH(hepmc, AC_HELP_STRING([--with-hepmc=DIR],[Location of HepMC installation @<:@default=system libs@:>@]), [], [with_hepmc=system]) if test "x$with_hepmc" = "xno"; then AC_MSG_RESULT([HepMC support disabled.]) elif test "x$with_hepmc" = "xsystem"; then AC_MSG_RESULT([in system libraries]) oldlibs="$LIBS" AC_CHECK_LIB(HepMC,main, [], [with_hepmc=no AC_MSG_WARN([HepMC not found in system libraries]) ]) HEPMCLIBS="$LIBS" LIBS=$oldlibs else AC_MSG_RESULT([$with_hepmc]) HEPMCINCLUDE=-I$with_hepmc/include HEPMCLIBS="-L$with_hepmc/lib -R$with_hepmc/lib -lHepMC" if test "${host_cpu}" == "x86_64" -a -e $with_hepmc/lib64/libHepMC.so ; then HEPMCLIBS="-L$with_hepmc/lib64 -R$with_hepmc/lib64 -lHepMC" fi fi if test "x$with_hepmc" != "xno"; then # Now lets see if the libraries work properly oldLIBS="$LIBS" oldLDFLAGS="$LDFLAGS" oldCPPFLAGS="$CPPFLAGS" LIBS="$LIBS `echo $HEPMCLIBS | sed -e 's!-R.* ! !'`" LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $HEPMCINCLUDE" AC_CHECK_HEADERS([HepMC/HepMCDefs.h],[],[AC_MSG_WARN([ ********************************************************************* * HepMC versions before 2.05 may still work, but are not supported. * ********************************************************************* ])]) # check HepMC AC_MSG_CHECKING([that HepMC works]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[HepMC::GenEvent();]])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no]) AC_MSG_ERROR([Use '--with-hepmc=' to set a path or use '--without-hepmc'.]) ]) AC_CHECK_HEADERS([HepMC/PdfInfo.h],[],[AC_MSG_ERROR([Need HepMC with PdfInfo support.])],[ #include #include #include ]) AC_CHECK_HEADERS([HepMC/IO_GenEvent.h],[],[AC_MSG_ERROR([Need HepMC with GenEvent support.])]) LIBS="$oldLIBS" LDFLAGS="$oldLDFLAGS" CPPFLAGS="$oldCPPFLAGS" fi AM_CONDITIONAL(HAVE_HEPMC,[test "x$with_hepmc" != "xno"]) AC_SUBST(HEPMCINCLUDE) AC_SUBST(HEPMCLIBS) AC_SUBST(CREATE_HEPMC) AC_SUBST(LOAD_HEPMC) ]) thepeg-1.8.0.orig/m4/ax_compiler_vendor.m40000644000175000017500000000604611747772425016616 0ustar sunsun# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_compiler_vendor.html # =========================================================================== # # SYNOPSIS # # AX_COMPILER_VENDOR # # DESCRIPTION # # Determine the vendor of the C/C++ compiler, e.g., gnu, intel, ibm, sun, # hp, borland, comeau, dec, cray, kai, lcc, metrowerks, sgi, microsoft, # watcom, etc. The vendor is returned in the cache variable # $ax_cv_c_compiler_vendor for C and $ax_cv_cxx_compiler_vendor for C++. # # LICENSE # # Copyright (c) 2008 Steven G. Johnson # Copyright (c) 2008 Matteo Frigo # # This program is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation, either version 3 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 9 AC_DEFUN([AX_COMPILER_VENDOR], [ AC_CACHE_CHECK([for _AC_LANG compiler vendor], ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor, [ax_cv_[]_AC_LANG_ABBREV[]_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" AC_COMPILE_IFELSE([AC_LANG_PROGRAM(,[ #if !($vencpp) thisisanerror; #endif ])], [ax_cv_]_AC_LANG_ABBREV[_compiler_vendor=`echo $ventest | cut -d: -f1`; break]) done ]) ]) thepeg-1.8.0.orig/m4/rivet.m40000644000175000017500000000371711747772425014072 0ustar sunsundnl ##### RIVET ##### AC_DEFUN([THEPEG_CHECK_RIVET], [ AC_REQUIRE([THEPEG_CHECK_HEPMC]) AC_REQUIRE([THEPEG_CHECK_GSL]) AC_MSG_CHECKING([for Rivet location]) RIVETINCLUDE="" LOAD_RIVET="" RIVETLIBS="-lRivet" AC_ARG_WITH(rivet, AC_HELP_STRING([--with-rivet=DIR],[Location of Rivet installation @<:@default=system libs@:>@]), [], [with_rivet=system]) if test "x$with_hepmc" = "xno"; then with_rivet=no fi if test "x$with_rivet" = "xno"; then AC_MSG_RESULT([Rivet support disabled.]) elif test "x$with_rivet" = "xsystem"; then AC_MSG_RESULT([in system libraries]) oldlibs="$LIBS" LIBS="$LIBS $HEPMCLIBS" AC_CHECK_LIB(Rivet,main, [], [with_rivet=no AC_MSG_WARN([Rivet >= 1.3 not found in system libraries]) ]) RIVETLIBS="$LIBS" LIBS=$oldlibs else AC_MSG_RESULT([$with_rivet]) RIVETINCLUDE="$( $with_rivet/bin/rivet-config --cppflags )" RIVETLIBS="-L$with_rivet/lib -R$with_rivet/lib -lRivet" if test "${host_cpu}" == "x86_64" -a -e $with_rivet/lib64/libRivet.so ; then RIVETLIBS="-L$with_rivet/lib64 -R$with_rivet/lib64 -lRivet" fi fi if test "x$with_rivet" != "xno"; then LOAD_RIVET="library RivetAnalysis.so" # Now lets see if the libraries work properly oldLIBS="$LIBS" oldLDFLAGS="$LDFLAGS" oldCPPFLAGS="$CPPFLAGS" LIBS="$LIBS `echo $HEPMCLIBS | sed -e 's!-R.* ! !'` `echo $RIVETLIBS | sed -e 's!-R.* ! !'` $GSLLIBS" LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $HEPMCINCLUDE $RIVETINCLUDE $GSLINCLUDE" # check Rivet AC_MSG_CHECKING([that Rivet works]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[Rivet::AnalysisHandler foo; foo.writeData("foo");]])],[AC_MSG_RESULT([yes])],[AC_MSG_RESULT([no]) AC_MSG_RESULT([No. Use '--with-rivet=' to set a path to Rivet >= 1.3'.]) with_rivet="no" LOAD_RIVET="" ]) LIBS="$oldLIBS" LDFLAGS="$oldLDFLAGS" CPPFLAGS="$oldCPPFLAGS" fi AM_CONDITIONAL(HAVE_RIVET,[test "x$with_rivet" != "xno"]) AC_SUBST(RIVETINCLUDE) AC_SUBST(RIVETLIBS) AC_SUBST(LOAD_RIVET) ]) thepeg-1.8.0.orig/m4/ltsugar.m40000644000175000017500000001042411756366730014411 0ustar sunsun# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59 which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) thepeg-1.8.0.orig/m4/zlib.m40000644000175000017500000001064111747772425013673 0ustar sunsun# =========================================================================== # http://www.nongnu.org/autoconf-archive/ax_check_zlib.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_ZLIB() # # DESCRIPTION # # This macro searches for an installed zlib library. If nothing was # specified when calling configure, it searches first in /usr/local and # then in /usr. If the --with-zlib=DIR is specified, it will try to find # it in DIR/include/zlib.h and DIR/lib/libz.a. If --without-zlib is # specified, the library is not searched at all. # # If either the header file (zlib.h) or the library (libz) is not found, # the configuration exits on error, asking for a valid zlib installation # directory or --without-zlib. # # The macro defines the symbol HAVE_LIBZ if the library is found. You # should use autoheader to include a definition for this symbol in a # config.h file. Sample usage in a C/C++ source is as follows: # # #ifdef HAVE_LIBZ # #include # #endif /* HAVE_LIBZ */ # # LICENSE # # Copyright (c) 2008 Loic Dachary # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General # Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 4 AU_ALIAS([CHECK_ZLIB], [AX_CHECK_ZLIB]) AC_DEFUN([AX_CHECK_ZLIB], # # Handle user hints # [AC_MSG_CHECKING(if zlib is wanted) AC_ARG_WITH(zlib, [ --with-zlib=DIR root directory path of zlib installation [defaults to /usr/local or /usr if not found in /usr/local] --without-zlib to disable zlib usage completely], [if test "$withval" != no ; then AC_MSG_RESULT(yes) if test -d "$withval" then ZLIB_HOME="$withval" else AC_MSG_WARN([Sorry, $withval does not exist, checking usual places]) fi else AC_MSG_RESULT(no) fi]) ZLIB_HOME=/usr/local if test ! -f "${ZLIB_HOME}/include/zlib.h" then ZLIB_HOME=/usr fi # # Locate zlib, if wanted # if test -n "${ZLIB_HOME}" then ZLIB_OLD_LDFLAGS=$LDFLAGS ZLIB_OLD_CPPFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" AC_LANG_SAVE AC_LANG_C AC_CHECK_LIB(z, inflateEnd, [zlib_cv_libz=yes], [zlib_cv_libz=no]) AC_CHECK_HEADER(zlib.h, [zlib_cv_zlib_h=yes], [zlib_cv_zlib_h=no]) AC_LANG_RESTORE if test "$zlib_cv_libz" = "yes" -a "$zlib_cv_zlib_h" = "yes" then # # If both library and header were found, use them # AC_CHECK_LIB(z, inflateEnd) AC_MSG_CHECKING(zlib in ${ZLIB_HOME}) AC_MSG_RESULT(ok) else # # If either header or library was not found, revert and bomb # AC_MSG_CHECKING(zlib in ${ZLIB_HOME}) LDFLAGS="$ZLIB_OLD_LDFLAGS" CPPFLAGS="$ZLIB_OLD_CPPFLAGS" AC_MSG_RESULT(failed) AC_MSG_ERROR(either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib) fi fi ]) thepeg-1.8.0.orig/m4/ltoptions.m40000644000175000017500000003007311756366730014765 0ustar sunsun# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, # Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 7 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option `$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl `shared' nor `disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the `shared' and # `disable-shared' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the `static' and # `disable-static' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the `fast-install' # and `disable-fast-install' LT_INIT options. # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the `pic-only' and `no-pic' # LT_INIT options. # MODE is either `yes' or `no'. If omitted, it defaults to `both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [pic_mode=default]) test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the `pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) thepeg-1.8.0.orig/m4/lt~obsolete.m40000644000175000017500000001375611756366730015315 0ustar sunsun# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) thepeg-1.8.0.orig/m4/vl_readline.m40000644000175000017500000000377411747772425015230 0ustar sunsundnl http://autoconf-archive.cryp.to/vl_lib_readline.html dnl dnl Copyright © 2008 Ville Laurikari dnl dnl Modifications for ThePEG: dnl Copyright © 2009 D.Grellscheid dnl dnl Copying and distribution of this file, with or without modification, dnl are permitted in any medium without royalty provided the copyright dnl notice and this notice are preserved. dnl AC_DEFUN([VL_LIB_READLINE], [ AC_ARG_ENABLE(readline, AC_HELP_STRING([--disable-readline],[turns off readline support.]), [], [enable_readline=yes] ) if test "$enable_readline" = "yes"; then AC_CACHE_CHECK([for a readline compatible library], vl_cv_lib_readline, [ ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB") if test -n "$vl_cv_lib_readline"; then break fi done if test -n "$vl_cv_lib_readline"; then break fi done if test -z "$vl_cv_lib_readline"; then vl_cv_lib_readline="no" LIBS="$ORIG_LIBS" fi ]) if test "$vl_cv_lib_readline" != "no"; then AC_DEFINE(HAVE_LIBREADLINE, 1, [Define if you have a readline compatible library]) AC_CHECK_HEADERS(readline.h readline/readline.h) AC_CACHE_CHECK([whether readline supports history], vl_cv_lib_readline_history, [ vl_cv_lib_readline_history="no" AC_TRY_LINK_FUNC(add_history, vl_cv_lib_readline_history="yes") ]) if test "$vl_cv_lib_readline_history" = "yes"; then AC_DEFINE(HAVE_READLINE_HISTORY, 1, [Define if your readline library has \`add_history']) AC_CHECK_HEADERS(history.h readline/history.h) fi fi fi ])dnl thepeg-1.8.0.orig/m4/ltversion.m40000644000175000017500000000126211756366730014755 0ustar sunsun# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) thepeg-1.8.0.orig/Interface/0000755000175000017500000000000011756460366014045 5ustar sunsunthepeg-1.8.0.orig/Interface/ParVector.xh0000644000175000017500000000410011747772425016310 0ustar sunsun// -*- C++ -*- // // ParVector.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ParVector_XH #define ThePEG_ParVector_XH // // This is the declarations of the exception classes used by the // ParVector class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by ParVector if a value is set outside the * given limits. */ struct ParVExLimit: public InterfaceException { /** Standard constructor. */ template ParVExLimit(const InterfaceBase & i, const InterfacedBase & o, T v); }; /** Exception class used by ParVector if an unknown error was encountered. */ struct ParVExUnknown: public InterfaceException { /** Standard constructor. */ template ParVExUnknown(const InterfaceBase & i, const InterfacedBase & o, T v, int j, const char * s); }; /** Exception class used by ParVector if an index is outside the given * limits. */ struct ParVExIndex: public InterfaceException { /** Standard constructor. */ ParVExIndex(const InterfaceBase & i, const InterfacedBase & o, int index); }; /** Exception class used by ParVector if the size of a fixed-size * container is changed. */ struct ParVExFixed: public InterfaceException { /** Standard constructor. */ ParVExFixed(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by ParVector if an unknown error was encountered. */ struct ParVExDelUnknown: public InterfaceException { /** Standard constructor. */ ParVExDelUnknown(const InterfaceBase & i, const InterfacedBase & o, int j); }; /** Exception class used by ParVector if an unknown error was encountered. */ struct ParVExGetUnknown: public InterfaceException { /** Standard constructor. */ ParVExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char * s); }; /** @endcond */ } #endif /* ThePEG_ParVector_XH */ thepeg-1.8.0.orig/Interface/Command.fh0000644000175000017500000000040211747772425015740 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Command_FH #define ThePEG_Command_FH // // This is the forward declaration of the Command and CommandBase classes. // namespace ThePEG { class CommandBase; template class Command; } #endif /* ThePEG_Command_FH */ thepeg-1.8.0.orig/Interface/Reference.xh0000644000175000017500000000340411747772425016307 0ustar sunsun// -*- C++ -*- // // Reference.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Reference_XH #define ThePEG_Reference_XH // // This is the declarations of the exception classes used by the // Reference class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by Reference if trying to set a pointer of * the wrong type. */ struct RefExSetRefClass: public InterfaceException { /** Standard constructor. */ RefExSetRefClass(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r); }; /** Exception class used by Referenceif an unknown error occurs. */ struct RefExSetUnknown: public InterfaceException { /** Standard constructor. */ RefExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, cIBPtr r); }; /** Exception class used by Reference if an unknown error occurs. */ struct RefExGetUnknown: public InterfaceException { /** Standard constructor. */ RefExGetUnknown(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by Reference of a specified object was not * found. */ struct RefExSetNoobj: public InterfaceException { /** Standard constructor. */ RefExSetNoobj(const InterfaceBase & i, const InterfacedBase & o, string); }; /** Exception class used by Reference for issuing warnings. */ struct RefExSetMessage: public InterfaceException { /** Standard constructor. */ RefExSetMessage(string ref, const InterfacedBase & o, const InterfacedBase & o2, string); }; /** @endcond */ } #endif /* ThePEG_Reference_XH */ thepeg-1.8.0.orig/Interface/Parameter.xh0000644000175000017500000000251611747772425016334 0ustar sunsun// -*- C++ -*- // // Parameter.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Parameter_XH #define ThePEG_Parameter_XH // // This is the declarations of the exception classes used by the // Parameter class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by Parameter if variable is set outside the * specified limits. */ struct ParExSetLimit: public InterfaceException { /** Standard constructor. */ template ParExSetLimit(const InterfaceBase & i, const InterfacedBase & o, T v); }; /** Exception class used by Parameter if an unkown error * occurs. */ struct ParExSetUnknown: public InterfaceException { /** Standard constructor. */ template ParExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, T val); }; /** Exception class used by Parameter if an unkown error * occurs. */ struct ParExGetUnknown: public InterfaceException { /** Standard constructor. */ ParExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char *); }; /** @endcond */ } #endif /* ThePEG_Parameter_XH */ thepeg-1.8.0.orig/Interface/Command.h0000644000175000017500000001354611747772425015607 0ustar sunsun// -*- C++ -*- // // Command.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Command_H #define ThePEG_Command_H // This is the declaration of the Command and CommandBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" #include "Command.fh" #include "Command.xh" namespace ThePEG { /** * The CommandBase and its templated Command sub-class defines an * interface to a class derived from the InterfacedBase, through which * arbitratry command strings can be sent and * received. Command is templated and is derived from the * InterfaceBase class via CommandBase. * * For each command interface to be defined for a class * T, exactly one static object of the Command must be * created and initialized as follows: * * Command comint(name, description, &T::memberfn, * depsafe); * * Where name is an identifier std::string which * should only contain letters [a-zA-z0-9_], description is * an arbitrary std::string, memberfn should be * a non-static member function of T and defined as * std::string T::memberfn(std::string). Finally if * depsafe is true it can be assumed that a call to the * memberfn for an object does not influence other objects * which may depend on the first. * * The Command class, as all other * InterfaceBase classes are mainly used in the * BaseRepository class. * * * @see InterfacedBase * @see InterfaceBase * @see BaseRepository * */ class CommandBase: public InterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. */ CommandBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, depSafe, false) { hasDefault = false; } /** * The general interface method overriding the one in * InterfaceBase. For this class, the \a action and \a argument * arguments are concatenated (with a space character inserted) and * sent to the cmd() function. */ virtual string exec(InterfacedBase &ib, string action, string arguments) const ; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Return a code for the type of this interface. */ virtual string type() const; /** * Execute the member function. For the object \a ib execute the * memberfunction (defined in the derived class) with \a c as * argument and return the return value. */ virtual string cmd(InterfacedBase & ib, string c) const = 0; }; /** * The CommandBase and its templated Command sub-class defines an * interface to a class derived from the InterfacedBase, through which * arbitratry command strings can be sent and * received. Command is templated and is derived from the * InterfaceBase class via CommandBase. * * For each command interface to be defined for a class * T, exactly one static object of the Command must be * created and initialized as follows: * * Command comint(name, description, &T::memberfn, * depsafe); * * Where name is an identifier std::string which * should only contain letters [a-zA-z0-9_], description is * an arbitrary std::string, memberfn should be * a non-static member function of T and defined as * std::string T::memberfn(std::string). Finally if * depsafe is true it can be assumed that a call to the * memberfn for an object does not influence other objects * which may depend on the first. * * The Command class, as all other * InterfaceBase classes are mainly used in the * BaseRepository class. * * * @see InterfacedBase * @see InterfaceBase * @see BaseRepository * */ template class Command: public CommandBase { public: /** * The declaration of member functions which can be used by this * Command interface. */ typedef string (T::*ExeFn)(string); public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newExeFn pointer to the function to be called in the * corresponding class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. */ Command(string newName, string newDescription, ExeFn newExeFn, bool depSafe = false) : CommandBase(newName, newDescription, ClassTraits::className(), typeid(T), depSafe), theExeFn(newExeFn) {} /** * Execute the member function. For the object \a ib execute the * memberfunction with \a c as argument and return the return value. */ virtual string cmd(InterfacedBase & ib, string) const; private: /** * The pointer to the member function. */ ExeFn theExeFn; }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Command.tcc" #endif #endif /* ThePEG_Command_H */ thepeg-1.8.0.orig/Interface/RefVector.h0000644000175000017500000003144511747772425016126 0ustar sunsun// -*- C++ -*- // // RefVector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RefVector_H #define ThePEG_RefVector_H // This is the declaration of the RefVector and RefVectorBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" #include "RefVector.xh" #include "RefVector.fh" namespace ThePEG { /** * The RefVector and its base class RefVectorBase defines an interface * to a class derived from the InterfacedBase, through which vectors * (or any other container) of pointers to other InterfacedBase * objects may be manipulated. RefVector is templated on the type of * the class and the class of the objects pointed to, and is derived * from the InterfaceBase class via RefVectorBase and * RefInterfaceBase. * * For each InterfacedBase class exactly one static RefVector object * should created for each member variable of container type which * should be interfaced. This object will automatically register * itself with the BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ class RefVectorBase: public RefInterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newRefClassName the name of the class pointed to. * * @param newRefTypeInfo the type_info object of the class pointed * to. * * @param newSize the size of the container or -1 if varying. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param norebind if set to true, this interface is not responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param defnull if set to true and a corresponding reference is * null it may be given a a default value in the initialization of * an EventGenerator. */ RefVectorBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, int newSize, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull); /** * The general interface method overriding the one in * InterfaceBase. For this class, \a action can be any of "set", * "get", "erase" and "insert" and \a argument should be a something * which can be read into an integer while the rest of \a argument * should correspond to the name of an InterfacedBase object in the * BaseRepository. */ virtual string exec(InterfacedBase & ib, string action, string arguments) const; /** * Return a complete description of this reference vector. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Return a code for the type of this reference. */ virtual string type() const; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Set the \a i'th element of a container of pointers of \a ib * to \a ip. */ virtual void set(InterfacedBase & ib, IBPtr ip, int i, bool chk = true) const = 0; /** * Insert a new pointer before the \a i'th element of a container of * pointers of \a ib and set it to \a ip. */ virtual void insert(InterfacedBase & ib, IBPtr ip, int i, bool chk = true) const = 0; /** * Remove the \a i'th element of a container of pointers of \a ib. */ virtual void erase(InterfacedBase & ib, int i) const = 0; /** * Return a vector of pointers corresponding to the container of * pointers of \a ib. */ virtual IVector get(const InterfacedBase & ib) const = 0; /** * Check if set(ib, ip, i) will be successfull but do not do * anything. */ virtual bool check(const InterfacedBase & ib, cIBPtr ip, int i) const = 0; /** * In the object \a ib, replace all pointers to objects in this * interface with the translated ones provided by \a trans. If a * pointer is null, and defaultIfNull() is true, replace it with * the first alowed object found in \a defs. */ virtual void rebind(InterfacedBase & ib, const TranslationMap & trans, const IVector & defs) const; /** * Return pointers to other objects in \a ib. */ virtual IVector getReferences(const InterfacedBase & ib) const; /** * Get the size of the container being interfaced. If the size() is * less than 0, the size is allowed to vary. */ int size() const { return theSize; } /** * Set the size of the container being interfaced. If the size is * less than 0, the size is allowed to vary. */ void setSize(int sz) { theSize = sz; } /** * Set the size of the container being interfaced to -1, i.e. the * size is allowed to vary. */ void setVariableSize() { theSize = 0; } private: /** * The size of the container being interfaced. */ int theSize; }; /** * The RefVector and its base class RefVectorBase defines an interface * to a class derived from the InterfacedBase, through which vectors * (or any other container) of pointers to other InterfacedBase * objects may be manipulated. RefVector is templated on the type of * the class and the class of the objects pointed to, and is derived * from the InterfaceBase class via RefVectorBase and * RefInterfaceBase. * * For each InterfacedBase class exactly one static RefVector object * should created for each member variable of container type which * should be interfaced. This object will automatically register * itself with the BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ template class RefVector: public RefVectorBase { public: /** A pointer to the class of objects referred to. */ typedef typename Ptr::pointer RefPtr; /** A const pointer to the class of objects referred to. */ typedef typename Ptr::const_pointer cRefPtr; /** A pointer to a menberfunction to be used for the 'set' action. */ typedef void (T::*SetFn)(RefPtr, int); /** A pointer to a menberfunction to be used for the 'insert' action. */ typedef void (T::*InsFn)(RefPtr, int); /** A pointer to a menberfunction to be used for the 'erase' action. */ typedef void (T::*DelFn)(int); /** A pointer to a menberfunction to be used for the 'check' action. */ typedef bool (T::*CheckFn)(cRefPtr, int) const; /** A pointer to a menberfunction to be used for the 'get' action. */ typedef vector (T::*GetFn)() const; /** * Declaration of a direct pointer to the member variable in case it * is a vector. */ typedef vector T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newSize the size of the container or -1 if varying. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param rebind if set to true, this interface is responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newCheckFn optional pointer to member function for the * 'check' action. */ RefVector(string newName, string newDescription, Member newMember, int newSize, bool depSafe = false, bool readonly = false, bool rebind = true, bool nullable = true, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, CheckFn newCheckFn = 0); /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newSize the size of the container or -1 if varying. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param rebind if set to true, this interface is responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param defnull if set to true and a corresponding reference is * null it may be given a a default value in the initialization of * an EventGenerator. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newCheckFn optional pointer to member function for the * 'check' action. */ RefVector(string newName, string newDescription, Member newMember, int newSize, bool depSafe, bool readonly, bool rebind, bool nullable, bool defnull, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, CheckFn newCheckFn = 0); /** * Set the \a i'th element of a container of pointers of \a ib * to \a ip. */ virtual void set(InterfacedBase & ib, IBPtr ip, int i, bool chk = true) const; /** * Insert a new pointer before the \a i'th element of a container of * pointers of \a ib and set it to \a ip. */ virtual void insert(InterfacedBase & ib, IBPtr ip, int i, bool chk = true) const; /** * Remove the \a i'th element of a container of pointers of \a ib. */ virtual void erase(InterfacedBase & ib, int i) const; /** * Return a vector of pointers corresponding to the container of * pointers of \a ib. */ virtual IVector get(const InterfacedBase & ib) const ; /** * Check if set(ib, ip, i) will be successfull but do not do * anything. */ virtual bool check(const InterfacedBase & ib, cIBPtr, int i) const ; /** * Give a pointer to a member function to be used by 'set()'. */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by 'insert()'. */ void setInsertFunction(InsFn ifn) { theInsFn = ifn; } /** * Give a pointer to a member function to be used by 'get()'. */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by 'erase()'. */ void setEraseFunction(DelFn df) { theDelFn = df; } /** * Give a pointer to a member function to be used by 'check()'. */ void setCheckFunction(CheckFn cf) { theCheckFn = cf; } private: /** * The pointer to the member variable. */ Member theMember; /** * A pointer to a member function to be used by 'set()'. */ SetFn theSetFn; /** * Give a pointer to a member function to be used by 'insert()'. */ InsFn theInsFn; /** * Give a pointer to a member function to be used by 'erase()'. */ DelFn theDelFn; /** * Give a pointer to a member function to be used by 'get()'. */ GetFn theGetFn; /** * Give a pointer to a member function to be used by 'check()'. */ CheckFn theCheckFn; }; } #include "RefVector.tcc" #endif /* ThePEG_RefVector_H */ thepeg-1.8.0.orig/Interface/ClassDocumentation.fh0000644000175000017500000000040411747772425020163 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_ClassDocumentation_FH #define ThePEG_ClassDocumentation_FH // // This is the forward declaration of the ClassDocumentation class. // namespace ThePEG { class ClassDocumentationBase; } #endif /* ThePEG_ClassDocumentation_FH */ thepeg-1.8.0.orig/Interface/ParVector.cc0000644000175000017500000001010611747772425016261 0ustar sunsun// -*- C++ -*- // // ParVector.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ParVectorBase class. // #include "InterfacedBase.h" #include "ParVector.h" #include "ParVector.xh" #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "ParVector.tcc" #endif namespace ThePEG { string ParVectorBase:: exec(InterfacedBase & i, string action, string arguments) const { istringstream arg(arguments.c_str()); int place = 0; if ( !(arg >> place) ) place = -1; ostringstream ret; if ( action == "get" ) { StringVector v = get(i); if ( place >= 0 ) return v[place]; for ( StringVector::const_iterator it = v.begin(); it != v.end(); ++it ) { if ( it != v.begin() ) ret << ", "; ret << *it; } } else if ( action == "erase" ) { erase(i, place); } else if ( action == "min" ) { return minimum(i, place); } else if ( action == "max" ) { return maximum(i, place); } else if ( action == "def" ) { return def(i, place); } else if ( action == "setdef" ) { if ( objectDefaults(i).find(tag(place)) == objectDefaults(i).end() ) setDef(i, place); else set(i, objectDefaults(i)[tag(place)], place); } else if ( action == "set" || action == "insert" || action == "newdef") { string val; arg >> val; if ( action == "insert" ) insert(i, val, place); else set(i, val, place); if ( action == "newdef" ) objectDefaults(i)[tag(place)] = get(i)[place]; } else if ( action == "notdef" ) { StringVector v = get(i); for ( place = 0; unsigned(place) < v.size(); ++place ) { string deflt = def(i, place); if ( objectDefaults(i).find(tag(place)) != objectDefaults(i).end() ) deflt = objectDefaults(i)[tag(place)]; else if ( !hasDefault ) continue; if ( v[place] == deflt ) continue; ret << "[" << place << "] " << v[place] << " (" << deflt << ") "; } } else throw InterExUnknown(*this, i); return ret.str(); } string ParVectorBase::fullDescription(const InterfacedBase & ib) const { ostringstream os; StringVector vals = get(ib); os << InterfaceBase::fullDescription(ib) << size() << "\n" << vals.size() << "\n"; for ( int i = 0, N = vals.size(); i < N; ++i ) { string min = minimum(ib, i); if ( min.empty() ) min = "-inf"; string max = maximum(ib, i); if ( max.empty() ) max = "inf"; os << vals[i] << "\n" << min << "\n" << def(ib, i) << "\n" << max << "\n"; } return os.str(); } ParVExIndex::ParVExIndex(const InterfaceBase & i, const InterfacedBase & o, int j) { theMessage << "Could not access element " << j << " of the parameter vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the index was outside of the allowed range."; severity(setuperror); } ParVExFixed::ParVExFixed(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Cannot insert or delete in the parameter vector \"" << i.name() << "\" for the object \"" << o.name() << "\" since the vector is of fixed size."; severity(setuperror); } ParVExDelUnknown::ParVExDelUnknown(const InterfaceBase & i, const InterfacedBase & o, int j) { theMessage << "Could not delete the value at position " << j << " from the parameter vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the delete function threw an unknown exception."; severity(setuperror); } ParVExGetUnknown::ParVExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char * s) { theMessage << "Could not get the " << s << " values from the parameter vector\"" << i.name() << "\" for the object \"" << o.name() << "\" because the get function threw an unknown exception."; severity(setuperror); } } #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "ParVector.tcc" #endif thepeg-1.8.0.orig/Interface/RefVector.fh0000644000175000017500000000043411747772425016266 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_RefVector_FH #define ThePEG_RefVector_FH // // This is the forward declaration of the RefVector and RefVectorBase // classes. // namespace ThePEG { class RefVectorBase; template class RefVector; } #endif /* ThePEG_RefVector_FH */ thepeg-1.8.0.orig/Interface/Reference.tcc0000644000175000017500000000374611747772425016452 0ustar sunsun// -*- C++ -*- // // Reference.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Reference class. // namespace ThePEG { template void Reference::set(InterfacedBase & i, IBPtr newRef, bool chk) const { if ( readOnly() ) throw InterExReadOnly(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( noNull() && !newRef ) throw InterExNoNull(*this, i); RefPtr r = dynamic_ptr_cast(newRef); if ( !r && newRef) throw RefExSetRefClass(*this, i, newRef); RefPtr oldRef = dynamic_ptr_cast(get(i)); if ( theSetFn && ( chk || !theMember ) ) { try { (t->*theSetFn)(r); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefExSetUnknown(*this, i, r); } } else { if ( theMember ) t->*theMember = r; else throw InterExSetup(*this, i); } if ( !InterfaceBase::dependencySafe() && oldRef != get(i) ) i.touch(); } template IBPtr Reference::get(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { return (t->*theGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefExGetUnknown(*this, i); } } if ( theMember ) return t->*theMember; throw InterExSetup(*this, i); } template bool Reference::check(const InterfacedBase & i, cIBPtr ir) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( noNull() && !ir ) return false; cRefPtr r = dynamic_ptr_cast(ir); if ( !r && ir ) return false; if ( !theCheckFn ) return true; return (t->*theCheckFn)(r); } } thepeg-1.8.0.orig/Interface/RefVector.cc0000644000175000017500000002100211747772425016250 0ustar sunsun// -*- C++ -*- // // RefVector.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RefVector class. // #include "InterfacedBase.h" #include "RefVector.h" #include "RefVector.xh" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Repository/BaseRepository.h" #include "ThePEG/Repository/EventGenerator.h" using namespace ThePEG; RefVectorBase:: RefVectorBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, int newSize, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull) : RefInterfaceBase(newName, newDescription, newClassName, newTypeInfo, newRefClassName, newRefTypeInfo, depSafe, readonly, norebind, nullable, defnull), theSize(newSize) {} IVector RefVectorBase::getReferences(const InterfacedBase & i) const { return get(i); } string RefVectorBase::exec(InterfacedBase & i, string action, string arguments) const { istringstream arg(arguments.c_str()); int place = -1; if ( !( arg >> place ) ) place = -1; ostringstream ret; if ( action == "get" ) { IVector refvec = get(i); if ( place >= 0 && unsigned(place) < refvec.size() ) { if ( refvec[place] ) return refvec[place]->fullName(); else return "*** NULL Reference ***"; } for ( IVector::size_type j = 0; j < refvec.size(); ++j ) { if ( j != 0 ) ret << ", "; if ( refvec[j] ) ret << refvec[j]->fullName(); else ret << "*** NULL Reference ***"; } } else if ( action == "erase" ) { erase(i, place); } else if ( action == "set" || action == "insert" || action == "newdef" || action == "setdef" ) { string refname; arg >> refname; if ( action == "setdef" ) { if ( objectDefaults(i).find(tag(place)) == objectDefaults(i).end() ) return "Error: No default value defined for this object."; refname = objectDefaults(i)[tag(place)]; } IBPtr ip; if ( refname.size() && refname != "NULL") { Interfaced * ii = dynamic_cast(&i); if ( ii && ii->generator() ) ip = ii->generator()->getObject(refname); else ip = BaseRepository::TraceObject(refname); } if ( action == "insert" ) insert(i, ip, place); else set(i, ip, place); if ( action == "newdef" ) { IVector refvec = get(i); if ( place >= 0 && unsigned(place) < refvec.size() ) objectDefaults(i)[tag(place)] = refvec[place]? refvec[place]->fullName(): string("NULL"); } } else if ( action == "notdef" ) { IVector refvec = get(i); for ( place = 0; unsigned(place) < refvec.size(); ++place ) { if ( objectDefaults(i).find(tag(place)) == objectDefaults(i).end() ) continue; string refname = refvec[place]? refvec[place]->fullName(): string("NULL"); if ( refname == objectDefaults(i)[tag(place)] ) continue; ret << "[" << place << "] " << refname << " (" << objectDefaults(i)[tag(place)] << ") "; } } else throw InterExUnknown(*this, i); return ret.str(); } string RefVectorBase::fullDescription(const InterfacedBase & ib) const { ostringstream os; os << InterfaceBase::fullDescription(ib) << ( noNull()? "nevernull\n": "nullable\n" ) << ( defaultIfNull()? "defnull\n": "nodefnull\n" ); IVector refs = get(ib); os << size() << '\n' << refs.size() << '\n'; for ( int i = 0, N = refs.size(); i < N; ++i ) if ( !refs[i] ) os << "NULL\n"; else os << refs[i]->fullName() << '\n'; return os.str(); } string RefVectorBase::type() const { return string("V<") + refClassName() + ">"; } string RefVectorBase::doxygenType() const { ostringstream os; if ( size() <= 0 ) os << "Varying size "; else os << "Fixed size (" << size() << ") "; os << "vector of references to objects of class " << refClassName(); return os.str(); } void RefVectorBase:: rebind(InterfacedBase & i, const TranslationMap & trans, const IVector & defs) const { if ( noRebind() ) return; IVector oldrefs = get(i); IVector newRefs; for ( unsigned int ir = 0; ir < oldrefs.size(); ++ir ) { IBPtr oldref = oldrefs[ir];; IBPtr newref; if ( oldref ) { newref = trans.translate(oldref); if ( !dependencySafe() && newref->fullName() != oldref->fullName() ) i.touch(); } else if ( defaultIfNull() ) { for ( IVector::const_iterator p = defs.begin(); p != defs.end(); ++p ) { try { if ( *p && check(i, *p, ir) ) { newref = *p; i.touch(); break; } } catch ( ... ) {} } } newRefs.push_back(newref); } HoldFlag<> depflag(isDependencySafe); HoldFlag<> roflag(isReadOnly, false); if ( size() <= 0 ) for ( IVector::size_type j = oldrefs.size(); j > 0; --j ) erase(i, j - 1); for ( IVector::size_type j = 0; j < oldrefs.size(); ++j ) if ( size() > 0 ) set(i, newRefs[j], j, false); else insert(i, newRefs[j], j, false); } RefVExRefClass::RefVExRefClass(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r, const char * s) { theMessage << "Could not " << s << " the object \"" << (r? r->name().c_str(): "") << "\" in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because it is not of the required class (" << i.refClassName() << ")."; severity(setuperror); } RefVExSetUnknown::RefVExSetUnknown(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r, int j, const char * s) { theMessage << "Could not " << s << " the object \"" << (r? r->name().c_str(): "") << " at position " << j << " in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the " << s << " function threw an unknown exception."; severity(setuperror); } RefVExSetUnfound::RefVExSetUnfound(const InterfaceBase & i, const InterfacedBase & o, string n) { theMessage << "Could not set the object named \"" << n << " in the reference vector \"" << i.name() << "\" of \"" << o.name() << "\"because the object was not found."; severity(setuperror); } RefVExIndex::RefVExIndex(const InterfaceBase & i, const InterfacedBase & o, int j) { theMessage << "Could not access element " << j << " of the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the index was outside of the allowed range."; severity(setuperror); } RefVExFixed::RefVExFixed(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Cannot insert or delete in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" since the vector is of fixed size."; severity(setuperror); } RefVExDelUnknown::RefVExDelUnknown(const InterfaceBase & i, const InterfacedBase & o, int j) { theMessage << "Could not delete the value at position " << j << " from the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the delete function threw an unknown exception."; severity(setuperror); } RefVExGetUnknown::RefVExGetUnknown(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not get the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the get function threw an unknown exception."; severity(setuperror); } RefVExNoSet::RefVExNoSet(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not set an object in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because no set function has been specified."; severity(setuperror); } RefVExNoIns::RefVExNoIns(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not insert an object in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because no insert function has been specified."; severity(setuperror); } RefVExNoDel::RefVExNoDel(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not erase an object in the reference vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because no erase function has been specified."; severity(setuperror); } thepeg-1.8.0.orig/Interface/Command.xh0000644000175000017500000000144411747772425015771 0ustar sunsun// -*- C++ -*- // // Command.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Command_XH #define ThePEG_Command_XH // // This is the declarations of the exception classes used by the // Command class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by the Command class if something unexpected * happens. */ struct CmdExUnknown: public InterfaceException { /** Standard constructor. */ CmdExUnknown(const InterfaceBase & i, const InterfacedBase & o, string); }; /** @endcond */ } #endif /* ThePEG_Command_XH */ thepeg-1.8.0.orig/Interface/InterfacedBase.h0000644000175000017500000003564111747772425017070 0ustar sunsun// -*- C++ -*- // // InterfacedBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_InterfacedBase_H #define ThePEG_InterfacedBase_H // This is the declaration of the InterfacedBase class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Named.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/HoldFlag.h" #include "InterfacedBase.xh" namespace ThePEG { /** * InterfacedBase is the base class of all Interfaced objects to be * handled by the BaseRepository class. InterfacedBase * objects can be manipulated through objects of the InterfaceBase * class dealing with setting parameters, switches and pointers to * other InterfacedBase objects. * * The InterfacedBase has a number of virtual methods to be * implemented by sub classes for checking the state of the object, * initializing the object etc. * * The InterfacedBase is derived from the PersistentBase class to * allow for persistent I/O, and from the Named for handling the name * of the object. The full name of the object is of the form * /dir/subdir/name analogous to the file name in a Unix * file system. * * It is possible to lock an InterfacedBase object in which case the * BaseRepository will not do anything that will change the state of * this object. * * @see BaseRepository * @see InterfaceBase */ class InterfacedBase: public PersistentBase, public Named { /** The BaseRepository is a close friend. */ friend class BaseRepository; /** The InterfaceBase is a close friend. */ friend class InterfaceBase; /** The EventGenerator is a friend. */ friend class EventGenerator; public: /** * Enumeration reflecting the state of an InterfacedBase object. */ enum InitState { initializing = -1, /**< The object is currently being initialized. I.e. either of update(), init(), initrun() or finish() are being run. */ uninitialized = 0, /**< The object has not been initialized. */ initialized = 1, /**< The object has been initialized. */ runready = 2 /**< The object is initialized and the initrun() method has been called. */ }; public: /** * The virtual (empty) destructor; */ virtual ~InterfacedBase(); /** * Returns the full name of this object including its path, e.g. * /directory/subdirectory/name. */ string fullName() const { return Named::name(); } /** * Returns the name of this object, without the path. */ string name() const { return Named::name().substr(Named::name().rfind('/')+1); } /** * Returns the path to this object including the trailing * '/'. fullName() = path() + name(). */ string path() const { string::size_type slash = Named::name().rfind('/'); string ret; if ( slash != string::npos ) ret = Named::name().substr(0,slash); return ret; } /** * Returns a comment assigned to this object. */ string comment() const { return theComment; } /** * Read setup info from a standard istream \a is. May be called by * the Repository to initialize an object. This function first calls * the virtual readSetup() function to allow the sub classes the * part \a is to initialize themselves. What ever is left in \a is * after that will be assigned to the comment() of the object. */ void setup(istream & is) { readSetup(is); getline(is, theComment); } protected: /** @name Standard InterfacedBase virtual functions. */ //@{ /** * Read setup info from a standard istream \a is. May be called by * the Repository to initialize an object. This function is called * by the non virtual setup() function. A sub-class implementing it * should first call the base class version before parsing the \a * is. If the \a is is not empty after readSetup is called the * remaining string will be assigned to the comment() of the object. */ virtual void readSetup(istream & is); /** * Check sanity of the object during the setup phase. This function * is called everytime the object is changed through an interface * during the setup phase. Also if the setup is changed for an * object on which this is dependent. Note that the generator() is * not available when this method is called. * * This method may be called by the user interface during the setup phase * through the update() method after manipulating objects to check * the sanity of the object. When implemented by a sub class it is * important that the doupdate() method of the base class is called, * then if the sanity of this object depend on other objects, the * update() method of these should be called. Then if touched() is * true for this object or for the ones on which this depends, it is * an indication that some things have changed since last time * doupdate() was called, and the actual checking of the state of * this object is called for. To avoid circular loops, it is * important that the doupdate() method is called for the base * class, while the update() method is called for other objects. * @throws UpdateException if the setup is such that the object * would not work properly. */ virtual void doupdate() {} /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. Nothing should have changed since the * last update() call. * * This method is called after the setup * phase through the init() method to indicate that the setup of a * run is finished. This is typpically done in a setup program * before this object has been saved to a run file. It must * therefore be made sure that the state of this object after this * method has been executed will not be changed if it is written to * a file and read in again. When implemented by a sub class it is * important that the doinit() method of the base class is called * first and then, if the initialization of this object depends on * other objects, that the init() method of these objects are * called. Only then should the class-local initialization * proceed. To avoid circular loops, it is important that the * doinit() method is called for the base class, while the init() * method is called for other objects. * @throws InitException if object could not be initialized properly. */ virtual void doinit() {} /** * Initialize this object. Called in the run phase just before * a run begins. * * This method is called just before * running starts through the initrun() method to indicate that the * actual running is to start. When implemented by a sub class it is * important that the doinitrun() method of the base class is called * first and then, if the initialization of this object depends on * other objects, that the initrun() method of these objects are * called. Only then should the class-local initialization * proceed. To avoid circular loops, it is important that the * doinitrun() method is called for the base class, while the * initrun() method is called for other objects. */ virtual void doinitrun() {} /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. * * This method is called after the running * phase through the finish() and can eg. be used to write out * statistics. When implemented by a sub class it is important that * the dofinish() method of the base class is called while the * finish() methd is called for other objects. */ virtual void dofinish() {} /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences() { return IVector(); } /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap &) {} //@} public: /** @name Inlined access function. */ //@{ /** * Calls the doupdate() function with recursion prevention. */ void update() { if ( initState ) return; HoldFlag hold(initState, initializing, initialized); doupdate(); } /** * Calls the doinit() function with recursion prevention. */ void init() { if ( initState ) return; HoldFlag hold(initState, initializing, initialized); doinit(); } /** * Return true if this object needs to be initialized before all * other objects (except those for which this function also returns * true). This default version always returns false, but subclasses * may override it to return true. */ virtual bool preInitialize() const; /** * Calls the doinitrun() function with recursion prevention. */ void initrun() { if ( initState == runready || initState == initializing ) return; HoldFlag hold(initState, initializing, runready); doinitrun(); } /** * Calls the dofinish() function with recursion prevention. */ void finish() { if ( initState == uninitialized || initState == initializing ) return; HoldFlag hold(initState, initializing, uninitialized); dofinish(); } /** * This function should be called every time something in this * object has changed in a way that a sanity check with update() is * needed */ void touch() { isTouched = true; } /** * Set the state of this object to uninitialized. */ void reset() { initState = uninitialized; } /** * Calls reset() and unTouch(). */ void clear() { reset(); untouch(); } /** * Return the state of initialization of this object. */ InitState state() const { return initState; } /** * Return true if the BaseRepository is not allowed to change the * state of this object. */ bool locked() const { return isLocked; } /** * Return true if the state of this object has been changed since * the last call to update(). */ bool touched() const { return isTouched; } //@} /** * Return a full clone of this object possibly doing things to the * clone to make it sane. */ virtual IBPtr fullclone() const { return clone(); } /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function. */ static void Init(); protected: /** * Return a simple clone of this object. Should be implemented as * return new_ptr(*this); by a derived class. */ virtual IBPtr clone() const = 0; /** * Protected default constructor. */ InterfacedBase() : Named(""), isLocked(false), isTouched(true), initState(uninitialized) {} /** * Protected constructor with the name given as argument. */ InterfacedBase(string newName) : Named(newName), isLocked(false), isTouched(true), initState(uninitialized) {} /** * Protected copy-constructor. */ InterfacedBase(const InterfacedBase & i) : Base(i), Named(i), isLocked(false), isTouched(true), initState(uninitialized), theComment(i.theComment), objectDefaults(i.objectDefaults) {} private: /** * Set a new name (full name including path). */ void name(string newName) { Named::name(newName); } /** * Lock this object. */ void lock() { isLocked = true; } /** * Unlock this object. */ void unlock() { isLocked = false; } /** * Clear the isTouched flag. */ void untouch() { isTouched = false; } private: /** * Used by the interface to add comments. */ string addComment(string); private: /** * True if this object is not to be changed by the user interface. */ bool isLocked; /** * True if this object has been chaged since the last call to * update(). */ bool isTouched; /** * Indicate if this object has been initialized or not, or if it is * being initialized. */ InitState initState; /** * A comment assigned to this object. */ string theComment; /** * A map listing object-specific defaults set for the given interfaces. */ map objectDefaults; public: /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; private: /** * Standard Initialization object. */ static AbstractClassDescription initInterfacedBase; /** * Private and non-existent assignment operator. */ InterfacedBase & operator=(const InterfacedBase &); protected: /** * Functor class to be used to update a range of dependent object. */ struct UpdateChecker { /** Constructor. */ UpdateChecker(bool & touched) : isTouched(touched) {} /** Constructor. */ UpdateChecker(const UpdateChecker & uc) : isTouched(uc.isTouched) {} /** Call the check function for an object. */ static void check(tIBPtr, bool &); /** Function call operator. */ template void operator()(const ptr & i) { check(i, isTouched); } /** set to false if any check() call fails. */ bool & isTouched; }; /** * Functor class to be used to update a range of dependent object in a map. */ struct UpdateMapChecker { /** Constructor. */ UpdateMapChecker(bool & touched) : isTouched(touched) {} /** Constructor. */ UpdateMapChecker(const UpdateMapChecker & uc) : isTouched(uc.isTouched) {} /** Function call operator. */ template void operator()(const ref & i) { UpdateChecker::check(i.second, isTouched); } /** Reference to the bool variable to be set. */ bool & isTouched; }; }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of InterfacedBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of InterfacedBase. */ typedef PersistentBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * InterfacedBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::InterfacedBase"; } }; /** @endcond */ } #endif /* ThePEG_InterfacedBase_H */ thepeg-1.8.0.orig/Interface/ClassDocumentation.cc0000644000175000017500000000171611754473543020157 0ustar sunsun// -*- C++ -*- // // ClassDocumentation.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ClassDocumentation class. // #include "ClassDocumentation.h" #include "ThePEG/Repository/BaseRepository.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "ClassDocumentation.tcc" #endif using namespace ThePEG; ClassDocumentationBase:: ClassDocumentationBase(string newDocumentation, string newModelDescription, string newModelReferences, const type_info & newTypeInfo) : theDocumentation(newDocumentation), theModelDescription(newModelDescription), theModelReferences(newModelReferences) { BaseRepository::Register(*this, newTypeInfo); } thepeg-1.8.0.orig/Interface/ClassDocumentation.h0000644000175000017500000001327511754473543020024 0ustar sunsun// -*- C++ -*- // // ClassDocumentation.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ClassDocumentation_H #define ThePEG_ClassDocumentation_H // This is the declaration of the ClassDocumentation class. #include "ThePEG/Config/ThePEG.h" #include "ClassDocumentation.fh" namespace ThePEG { /** * The ClassDocumentationBase class is used to communicate * documetation about an Interfaced class to the Repository. * Similarly to classes inheriting from InterfaceBase, only one static * object of the templated ClassDocumentation, which inherits from * ClassDocumentationBase, should be created for each Interfaced * class. This object will then automatically register itself with the * static Repository. * * The ClassDocumentationBase contains three strings with information * which are all specified in the constructor: * * The documentation contains a brief description of the * corresponding class which can be displayed by the Repository (or * user interfaces derived from it). * * The model description contains a very brief description of * the model of the process implemented in the step handler, given in * the form of a LaTeX \\item. This is written to a file after a run * by an EventGenerator. * * The model references contains possible LaTeX \\bibitems * corresponding to \\cite commands in the model * description. This is also written to a file after a run by an * EventGenerator. * * @see Interfaced * @see Repository * */ class ClassDocumentationBase { protected: /** * The standard constructor can only be used from subclasses. * @param newDocumentation the documentation for the * corresponding class. * @param newModelDescription the model description for the * corresponding class. * @param newModelReferences the model references of the * corresponding class.. * @param newTypeInfo the type_info object of the corresponding * class. */ ClassDocumentationBase(string newDocumentation, string newModelDescription, string newModelReferences, const type_info & newTypeInfo); public: /** * The destructor. */ virtual ~ClassDocumentationBase() {} public: /** * Return the brief documentation of the corresponding class. */ string documentation() const { return theDocumentation; } /** * Return the model description of the corresponding class. */ string modelDescription() const { return theModelDescription; } /** * Return the model references of the corresponding class. */ string modelReferences() const { return theModelReferences; } private: /** * The brief documentation of the corresponding class. */ string theDocumentation; /** * The model description of the corresponding class. */ string theModelDescription; /** * The model references of the corresponding class. */ string theModelReferences; private: /** * Private and unimplemented default constructor. */ ClassDocumentationBase(); /** * Private and unimplemented copy constructor. */ ClassDocumentationBase(const ClassDocumentationBase &); /** * Private and unimplemented assignment operator. */ ClassDocumentationBase & operator=(const ClassDocumentationBase &); }; /** * The ClassDocumentation class is used to communicate * documetation about an Interfaced class to the Repository. * Similarly to classes inheriting from InterfaceBase, only one static * object of the templated ClassDocumentation, which inherits from * ClassDocumentationBase, should be created for each Interfaced * class. This object will then automatically register itself with * the static Repository. * * The ClassDocumentation should in the constructor specify three * strings with information: * * The documentation contains a brief description of the * corresponding class which can be displayed by the Repository (or * user interfaces derived from it). * * The model description contains a very brief description of * the model of the process implemented in the step handler, given in * the form of a LaTeX \\item. This is written to a file after a run * by an EventGenerator. * * The model references contains possible LaTeX \\bibitems * corresponding to \\cite commands in the model * description. This is also written to a file after a run by an * EventGenerator. * * @see Interfaced * @see Repository * */ template class ClassDocumentation: public ClassDocumentationBase { public: /** * The standard constructor. All other constructors are private. * @param newDocumentation the documentation for the * corresponding class. * @param newModelDescription the model description for the * corresponding class. * @param newModelReferences the model references of the * corresponding class.. */ ClassDocumentation(string newDocumentation, string newModelDescription = "", string newModelReferences = "") : ClassDocumentationBase(newDocumentation, newModelDescription, newModelReferences, typeid(T)) {} private: /** * Private and unimplemented default constructor. */ ClassDocumentation(); /** * Private and unimplemented copy constructor. */ ClassDocumentation(const ClassDocumentation &); /** * Private and unimplemented assignment operator. */ ClassDocumentation & operator=(const ClassDocumentation &); }; } #endif /* ThePEG_ClassDocumentation_H */ thepeg-1.8.0.orig/Interface/Reference.h0000644000175000017500000002435711747772425016131 0ustar sunsun// -*- C++ -*- // // Reference.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Reference_H #define ThePEG_Reference_H // This is the declaration of the Reference and ReferenceBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" #include "Reference.xh" #include "Reference.fh" namespace ThePEG { /** * The Reference class and its base class ReferenceBase defines an * interface to a class derived from the InterfacedBase, through which * pointers to other InterfacedBase objects may be manipulated. * Reference is templated on the type of the class and the class of * the objects pointed to, and is derived from the InterfaceBase class * via ReferenceBase and RefInterfaceBase. * * For each InterfacedBase class exactly one static Reference object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ class ReferenceBase: public RefInterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newRefClassName the name of the class pointed to. * * @param newRefTypeInfo the type_info object of the class pointed * to. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param norebind if set to true, this interface is not responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param defnull if set to true and a corresponding reference is * null it may be given a a default value in the initialization of * an EventGenerator. */ ReferenceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull); /** * The general interface method overriding the one in * InterfaceBase. For this class, \a action can be any of "set" and * "get" and \a argument should correspond to the name of an * InterfacedBase object in the BaseRepository. */ virtual string exec(InterfacedBase & ib, string action, string arguments) const; /** * Return a complete description of this reference. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Return a code for the type of this reference. */ virtual string type() const; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Set the pointer of \a ib to \a ip. */ virtual void set(InterfacedBase & ib, IBPtr ip, bool chk = true) const = 0; /** * Return the pointer of \a ib. */ virtual IBPtr get(const InterfacedBase & ib) const = 0; /** * Check if set(ib, ip) will be successfull but do not do * anything. */ virtual bool check(const InterfacedBase & ib, cIBPtr ip) const = 0; /** * In the object \a ib, replace the pointer in this interface with one * of the translated ones provided by trans. If the pointer is null, * and defaultIfNull() is true, replace it with the first allowed * object found in \a defs. */ virtual void rebind(InterfacedBase & ib, const TranslationMap & trans, const IVector & defs) const; /** * Return the pointer to another object in \a ib (in a vector). */ virtual IVector getReferences(const InterfacedBase & ib) const; }; /** * The Reference and its base class ReferenceBase defines an interface * to a class derived from the InterfacedBase, through which pointers * to other InterfacedBase objects may be manipulated. Reference is * templated on the type of the class and the class of the objects * pointed to, and is derived from the InterfaceBase class via * ReferenceBase and RefInterfaceBase. * * For each InterfacedBase class exactly one static Reference object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ template class Reference: public ReferenceBase { public: /** A pointer to the class of objects referred to. */ typedef typename Ptr::pointer RefPtr; /** A const pointer to the class of objects referred to. */ typedef typename Ptr::const_pointer cRefPtr; /** A pointer to a menberfunction to be used for the 'set' action. */ typedef void (T::*SetFn)(RefPtr); /** A pointer to a menberfunction to be used for the 'check' action. */ typedef bool (T::*CheckFn)(cRefPtr) const; /** A pointer to a menberfunction to be used for the 'get' action. */ typedef RefPtr (T::*GetFn)() const; /** Declaration of a direct pointer to the member variable. */ typedef RefPtr T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param rebind if set to true, this interface is responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newCheckFn optional pointer to member function for the * 'check' action. */ Reference(string newName, string newDescription, Member newMember, bool depSafe = false, bool readonly = false, bool rebind = true, bool nullable = true, SetFn newSetFn = 0, GetFn newGetFn = 0, CheckFn newCheckFn = 0) : ReferenceBase(newName, newDescription, ClassTraits::className(), typeid(T), ClassTraits::className(), typeid(R), depSafe, readonly, !rebind, nullable, false), theMember(newMember), theSetFn(newSetFn), theGetFn(newGetFn), theCheckFn(newCheckFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param rebind if set to true, this interface is responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param defnull if set to true and a corresponding reference is * null it may be given a a default value in the initialization of * an EventGenerator. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newCheckFn optional pointer to member function for the * 'check' action. */ Reference(string newName, string newDescription, Member newMember, bool depSafe, bool readonly, bool rebind, bool nullable, bool defnull, SetFn newSetFn = 0, GetFn newGetFn = 0, CheckFn newCheckFn = 0) : ReferenceBase(newName, newDescription, ClassTraits::className(), typeid(T), ClassTraits::className(), typeid(R), depSafe, readonly, !rebind, nullable, defnull), theMember(newMember), theSetFn(newSetFn), theGetFn(newGetFn), theCheckFn(newCheckFn) {} /** * Set the pointer of \a ib to \a ip. */ virtual void set(InterfacedBase & ib, IBPtr ip, bool chk = true) const ; /** * Return the pointer of \a ib. */ virtual IBPtr get(const InterfacedBase & ib) const ; /** * Check if set(ib, ip) will be successfull but do not do * anything. */ virtual bool check(const InterfacedBase & ib, cIBPtr newRef) const ; /** * Give a pointer to a member function to be used by 'set()'. */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by 'get()'. */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by 'check()'. */ void setCheckFunction(CheckFn cf) { theCheckFn = cf; } private: /** * The pointer to the member variable. */ Member theMember; /** * A pointer to a member function to be used by 'set()'. */ SetFn theSetFn; /** * Give a pointer to a member function to be used by 'get()'. */ GetFn theGetFn; /** * Give a pointer to a member function to be used by 'check()'. */ CheckFn theCheckFn; }; } #include "Reference.tcc" #endif /* ThePEG_Reference_H */ thepeg-1.8.0.orig/Interface/Deleted.cc0000644000175000017500000000152711747772425015731 0ustar sunsun// -*- C++ -*- // // Deleted.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DeletedBase class. // #include "InterfacedBase.h" #include "Deleted.h" #include "ThePEG/Utilities/Throw.h" using namespace ThePEG; string DeletedBase::exec(InterfacedBase &, string, string) const { Throw() << "The interface '" << name() << "' has been removed. " << description() << Exception::runerror; return ""; } string DeletedBase::type() const { return "Dd"; } string DeletedBase::doxygenType() const { return "Deleted"; } thepeg-1.8.0.orig/Interface/Switch.h0000644000175000017500000002474311747772425015473 0ustar sunsun// -*- C++ -*- // // Switch.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Switch_H #define ThePEG_Switch_H // This is the declaration of the Switch, SwitchBase and SwitchOption classes. #include "ThePEG/Config/ThePEG.h" #include "Switch.fh" #include "Switch.xh" #include "InterfaceBase.h" namespace ThePEG { /** * SwitchOption is used by the Switch class and its base class * SwitchBase to define valid options in a switch. * * For each InterfacedBase class exactly one static Switch object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. Also for each Switch object exactly one * static SwitchOption object should be created for each valid integer * option. * * @see InterfacedBase * @see InterfacedBase * @see Named * */ class SwitchOption: public Named { public: /** * Standard constructor. * * @param theSwitch the Switch object for which this option is * defined. Note thet the static Switch object must be created * before this is created. * * @param newName the name of the option, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the option. * * @param newValue the integer value corresponding to this option. */ SwitchOption(SwitchBase & theSwitch, string newName, string newDescription, long newValue); /** * Default constructor. */ SwitchOption() : theValue(-999) {} /** * The description of this option */ const string & description() const { return theDescription; } /** * The value of this option. */ long value() const { return theValue; } /** * The value of this option. */ operator long () const; protected: private: /** * The description of this option */ string theDescription; /** * The value of this option. */ long theValue; }; /** * The Switch class and its base class SwitchBase defines an interface * to a class derived from the InterfacedBase, through which simple * integer member variables can be manuipulated and set to a * pre-defined set of values (options). Switch is * templated on the type of the integer member variable and the type * of the class, and is derived from the InterfaceBase class via * SwitchBase. * * The Switch class has a set of Named SwitchOptions, * which limits the values possible to set. * * For each InterfacedBase class exactly one static Switch object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. Also for each Switch object exactly one * static SwitchOption object should be created for each valid integer * option. * * @see InterfacedBase * @see InterfacedBase * @see Named * */ class SwitchBase: public InterfaceBase { public: /** A map with SwitchOptions indexed by their values. */ typedef map OptionMap; /** A map with SwitchOptions indexed by their names. */ typedef map StringMap; /** SwitchOption is a friend. */ friend class SwitchOption; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. */ SwitchBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe, bool readonly) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly) {} /** * The general interface method overriding the one in * InterfaceBase. For this class, \a action can be any of "set", * "get", "def" and "setdef" and \a argument should be a something * which can be read into an integer variable through a stringstream * with the standard '>>' operator. */ virtual string exec(InterfacedBase & ib, string action, string arguments) const; /** * Return a complete description of this switch. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Return a code for the type of this switch. */ virtual string type() const; /** * Set the member variable of \a ib to \a val. */ virtual void set(InterfacedBase & ib, long val) const = 0; /** * Return the value of the member variable of \a ib. */ virtual long get(const InterfacedBase & ib) const = 0; /** * Return the default value for the member variable of \a ib. */ virtual long def(const InterfacedBase & ib) const = 0; /** * Set the member variable of \a ib to its default value. */ void setDef(InterfacedBase & i) const { set(i, def(i)); } /** * Check if \a val is among the listed options. */ bool check(long newValue) const { return member(theOptions, newValue); } /** * Return the map relating options to their values */ const OptionMap & options() const { return theOptions; } /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Return a string with the option index and its associated tag. */ string opttag(long opt) const; protected: /** * Register a new option. */ void registerOption(const SwitchOption & o) { theOptions[o.value()] = o; theOptionNames[o.name()] = o; } private: /** * The map relating options to their values */ OptionMap theOptions; /** * The map relating options to their names */ StringMap theOptionNames; }; /** * The Switch class and its base class SwitchBase defines an interface * to a class derived from the InterfacedBase, through which simple * integer member variables can be manuipulated and set to a * pre-defined set of values (options). Switch is templated on the * type of the integer member variable (also enums and bool are * allowed) and the type of the class, and is derived from the * InterfaceBase class via SwitchBase. * * The Switch class has a set of Named SwitchOptions, * which limits the values possible to set. * * For each InterfacedBase class exactly one static Switch object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. Also for each Switch object exactly one * static SwitchOption object should be created for each valid integer * option. * * @see InterfacedBase * @see InterfacedBase * @see Named * */ template class Switch: public SwitchBase { public: /** * The declaration of member functions which can be used by this * Switch interface for the 'set' action. */ typedef void (T::*SetFn)(Int); /** * The declaration of member functions which can be used by this * Switch interface for the 'get' action. */ typedef Int (T::*GetFn)() const; /** * Declaration of a direct pointer to the member variable. */ typedef Int T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newDef the default value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Switch(string newName, string newDescription, Member newMember, Int newDef, bool depSafe = false, bool readonly = false, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newDefFn = 0) : SwitchBase(newName, newDescription, ClassTraits::className(), typeid(T), depSafe, readonly), theMember(newMember), theDef(newDef), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn) {} /** * Set the member variable of \a ib to \a val. */ virtual void set(InterfacedBase & ib, long val) const ; /** * Return the value of the member variable of \a ib. */ virtual long get(const InterfacedBase & ib) const; /** * Return the default value for the member variable of \a ib. */ virtual long def(const InterfacedBase & ib) const; /** * Give a pointer to a member function to be used by 'set()'. */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by 'get()'. */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by 'def()'. */ void setDefaultFunction(GetFn df) { theDefFn = df; } /** * Print a description to be included in the Doxygen documentation * to the given \a stream. */ virtual void doxygenDescription(ostream & stream) const; private: /** * The pointer to the member variable. */ Member theMember; /** * Default value to be used if no corresponding member function * pointers are given. */ Int theDef; /** * A pointer to a member function to be used by 'set()'. */ SetFn theSetFn; /** * Pointer to member function to be used by get(). */ GetFn theGetFn; /** * Pointer to member function to be used by def(). */ GetFn theDefFn; }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Switch.tcc" #endif #endif /* ThePEG_Switch_H */ thepeg-1.8.0.orig/Interface/Interface.h0000644000175000017500000000447211747772425016127 0ustar sunsun// -*- C++ -*- // // Interface.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_Interface_H #define THEPEG_Interface_H // // This is the declaration of the Interface namespace. // namespace ThePEG { /** * The Interface namespace declares a number of enums to set options * for subclasses of InteracedBase. */ namespace Interface { /** * Determine whether an interface is dependency safe or * not. Dependency safe means that other objects do not depend on the * variable being interfaced. */ enum DepSafe { unsafe = false, /**< The interface is not dependency safe. */ safe = true /**< The interface is dependency safe. */ }; /** * Determine whether an interface is read-only or not. */ enum ReadOnly { readwrite = false, /**< The interface is mutable. */ readonly = true /**< The interface is read-only. */ }; /** * Determine whether a Parameter or ParVector is limited, either * upper, lower or both. */ enum Limits { nolimits = 0, /**< The parameter is not limited. */ limited = 1, /**< The parameter is limited (both up- and downwards. */ upperlim = 2, /**< The parameter has only an upper limit. */ lowerlim = 3 /**< The parameter has only an lower limit. */ }; /** * Determine whether a the objects referred to by a Reference or a * RefVector should be automaticlly rebound (i.e. do not need to be * explicitly rebound in the rebind() function). */ enum Rebind { norebind = true, /**< The reference is not automatically rebound. */ rebind = false /**< The reference is automatically rebound. */ }; /** * Determine whether a Reference or RefVector object may be null. */ enum Nullable { nonull = false, /**< The reference may not be null. */ nullok = true /**< The reference may be null. */ }; /** * Determine whether a null reference should be given a default value * if suitable object is registered as default in the Strategy object * of a run. */ enum NullDefault { nodefnull = false, /**< The reference will not be set to default if null. */ defnull = true /**< The reference will be set to default if null. */ }; } } #endif /* THEPEG_Interface_H */ thepeg-1.8.0.orig/Interface/Command.tcc0000644000175000017500000000151511747772425016122 0ustar sunsun// -*- C++ -*- // // Command.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Command class. // namespace ThePEG { template string Command::cmd(InterfacedBase & i, string arg) const { T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theExeFn ) { try { string r = (t->*theExeFn)(arg); if ( r != "" ) i.touch(); return r; } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw CmdExUnknown(*this, i, arg); } } else throw InterExSetup(*this, i); } } thepeg-1.8.0.orig/Interface/Interfaced.h0000644000175000017500000001471611747772425016275 0ustar sunsun// -*- C++ -*- // // Interfaced.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Interfaced_H #define ThePEG_Interfaced_H // This is the declaration of the Interfaced class. #include "ThePEG/Config/ThePEG.h" #include "InterfacedBase.h" #include "ThePEG/PDT/PID.h" namespace ThePEG { /** * The Interfaced class is derived from the InterfacedBase class * adding a couple of things particular to ThePEG, in an attempt to * keep the InterfacedBase class as generic as possible. * * The main addition is that the Interfaced class has a pointer to an * EventGenerator object. During the run-phase this points to the * EventGenerator controlling the run in which the Interfaced object * is used. Through this EventGenerator there is quick access to * eg. the set of ParticleData objects used, and the default * RandomGenerator for the run. Note that no EventGenerator object is * available to the Interfaced object during the setup * phase. * * @see InterfacedBase * @see EventGenerator * @see ParticleData * @see RandomGenerator */ class Interfaced: public InterfacedBase { /** Repository is a friend. */ friend class Repository; /** EventGenerator is a friend. */ friend class EventGenerator; public: /** * Empty virtual destructor */ virtual ~Interfaced(); /** * Functions which are to be used during the actual event * generation, after the setup is complete. */ public: /** * A sub class can implement this function to implement some default * initialization for this object during the setup phase. A typical * example is if this object need some references to other objects * and if these can be easily created. In this case the objects can * be added to the repository in a sub-directory with the same name * as this object. * @return false if the initialization failed. */ virtual bool defaultInit(); /** @name Functions used during the actual event generation, after the setup is complete. */ //@{ /** * Create a new Particle instance given a id number. */ PPtr getParticle(PID) const; /** * Return a pointer to the ParticleData object corresponding to the * given id number. */ PDPtr getParticleData(PID) const; /** * Returns true if this object has actally been used. */ bool used() const { return theUseFlag; } /** * Should be called to indicate that this object has actually been * used. */ void useMe() const { if ( !used() ) setUsed(); } /** * Return a pointer to the EventGenerator controlling the run. * During the setup phase this returns a null pointer. */ tEGPtr generator() const { return theGenerator; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function. */ static void Init(); protected: /** * Register an Interfaced object with the Repository. */ static void registerRepository(IBPtr); /** * Register an Interfaced object with the Repository, giving it a * name. */ static void registerRepository(IBPtr, string newName); /** * Register the given \a object in the Repository with the given \a * name in a subdirectory with the same name as this object. If an * object with that name already exists it will be removed unless * there are other objects referring to it, in which case it will be * renamed. */ void reporeg(IBPtr object, string name) const; /** * If the pointer, \a ptr, to an object is not set, create an object * of class \a classname and register it with the Repository with * the given \a objectname in a sib-directory with the same name as * this object. */ template bool setDefaultReference(PtrT & ptr, string classname, string objectname) { if ( ptr ) return true; const ClassDescriptionBase * db = DescriptionList::find(classname); if ( !db ) return false; ptr = dynamic_ptr_cast(db->create()); if ( !ptr ) return false; reporeg(ptr, objectname); if ( !ptr->defaultInit() ) return false; return true; } /** * Protected default constructor. */ Interfaced() : theUseFlag(false) {} /** * Protected constructor taking a name as argument. */ Interfaced(const string & newName) : InterfacedBase(newName), theUseFlag(false) {} /** * Protected copy-constructor. */ Interfaced(const Interfaced & i) : InterfacedBase(i), theGenerator(i.theGenerator), theUseFlag(false) {} protected: /** * Protected function to reset the generator pointer, required * for automatic decayer generation in Herwig++ BSM models */ void setGenerator(tEGPtr generator) { theGenerator=generator; } private: /** * Used internally by 'useMe' */ void setUsed() const; /** * A pointer to the EventGenerator controlling the run. */ tEGPtr theGenerator; /** * Flag to tell whether this object has been used or not. */ mutable bool theUseFlag; /** * Command interface function which calls defaultInit(). */ string doDefaultInit(string); private: /** * Standard Initialization object. */ static AbstractClassDescription initInterfaced; /** * Private and non-existent assignment operator. */ Interfaced & operator=(const Interfaced &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of Interfaced. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of Interfaced. */ typedef InterfacedBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * Interfaced class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::Interfaced"; } }; /** @endcond */ } #endif /* ThePEG_Interfaced_H */ thepeg-1.8.0.orig/Interface/Parameter.fh0000644000175000017500000000055611747772425016314 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Parameter_FH #define ThePEG_Parameter_FH // // This is the forward declaration of the Parameter, ParameterTBase // and ParameterBase classes. // namespace ThePEG { class ParameterBase; template class ParameterTBase; template class Parameter; } #endif /* ThePEG_Parameter_FH */ thepeg-1.8.0.orig/Interface/InterfaceBase.h0000644000175000017500000002755111747772425016725 0ustar sunsun// -*- C++ -*- // // InterfaceBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_InterfaceBase_H #define ThePEG_InterfaceBase_H // This is the declaration of the InterfaceBase and RefInterfaceBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.fh" #include "InterfaceBase.xh" #include "ThePEG/Utilities/Named.h" #include "ThePEG/Utilities/ClassTraits.h" #include "Interface.h" namespace ThePEG { /** * The InterfaceBase class defines a generic interface to any class * derived from the InterfacedBase class. Using the pure virtual * exec() function, it is possible to manipulate any InterfacedBase * object. InterfaceBase is an abstract base class for derived classes * such as Command, Parameter and Reference. * * InterfaceBase objects are managed by the BaseRepository. * * InterfaceBase is derived from the Named to manage the name of the * interface. * * From the Repository it is possible to generate a file with doxygen * comments which can be included in the documentation describing the * InterfaceBase objects defined for a class. For each class, * ClassName, there will be produced a file called * ClassNameInterfaces.html which can be referred to with * a standard html href anchor. Also a specific * interface, InterfaceName can be referred to with * ClassNameInterfaces.html#InterfaceName. The file can * also be referred to with the doxygen \\ref * command. Inside the description of an interface, other interfaces * in the same class can be tagged with * \InterfaceName\ or, if the interface * belongs to another class, * \ClassName::InterfaceName\. By running the * script in ThePEG/Doc/fixinterfaces.pl these tags will * be converted to proper href anchors. * * @see InterfacedBase * @see Command * @see Parameter * @see Reference * @see BaseRepository * @see Named * */ class InterfaceBase: public Named { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. */ InterfaceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe, bool readonly); /** * The destructor. */ virtual ~InterfaceBase() {} /** * Create a tag for this interface using its name and optional * poisitional argument. */ string tag(int pos = -1) const; /** * Manipulate an object of the corresponding class. Execute the \a * action command with the given \a arguments for the given object * \a ib. */ virtual string exec(InterfacedBase & ib, string action, string arguments) const = 0; /** * Return a code for the type of this interface. */ virtual string type() const = 0; /** * Returns true if the setting for this interface has been changed * from its default value. */ virtual bool notDefault(InterfacedBase &) const; /** * Returns the map of objectDefaults of the given object. */ map & objectDefaults(InterfacedBase &) const; /** * Rebind all references in ib according to the translation * map. Only used by derived classed interfacing references. */ virtual void rebind(InterfacedBase &, const TranslationMap &, const IVector & = IVector()) const {} /** * For derived classes interfacing references between Interfaced * objects, return the references for this interface. */ virtual IVector getReferences(const InterfacedBase &) const { return IVector(); } /** * Return the description of this interface. */ string description() const { return theDescription; } /** * Return a complete description of this interface. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Print a description to be included in the Doxygen documentation * to the given \a stream. */ virtual void doxygenDescription(ostream & stream) const; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const = 0; /** * Return the class name for the class this interface is defined * for. */ string className() const { return theClassName; } /** * Get the flag saying whether changing an object with this * interface may change the state of a dependent object . */ bool dependencySafe() const { return isDependencySafe; } /** * Set the flag saying whether changing an object with this * interface may change the state of a dependent object . */ void setDependencySafe() { isDependencySafe = true; } /** * Set the flag saying whether changing an object with this * interface may change the state of a dependent object . */ void setDependencySensitive() { isDependencySafe = false; } /** * Get the flag saying whether this interface is allowed to change * an object. */ bool readOnly() const { return isReadOnly && (!NoReadOnly); } /** * Set the flag saying that this interface is allowed to * change an object. */ void setReadOnly() { isReadOnly = true; } /** * Unset the flag saying that this interface is allowed to change an * object. */ void setReadWrite() { isReadOnly = false; } /** * Return true if this interface is anonyous, ie. invisible for the * user interface. */ bool anonymous() const { return description().empty(); } /** * Get the rank for this interface. Used for sorting by user * interface. */ double rank() const { return theRank; } /** * Set the rank for this interface. Used for sorting by user * interface. */ void rank(double r) { theRank = r; } /** * Indicate that this interface has a default value. */ void setHasDefault(bool b) { hasDefault = b; } /** * If set to true, all read-only interfaces can be changed. */ static bool NoReadOnly; private: /** * The description of this interface. */ string theDescription; /** * The class name and for the class this interface is defined for. */ string theClassName; /** * A rank assigned to this interface. Used for sorting by user * interface. */ double theRank; protected: /** * A flag indicating whether this interface has a default setting. */ bool hasDefault; /** * The flag saying whether changing an object with this interface * may change the state of a dependent object . */ mutable bool isDependencySafe; /** * The flag saying whether this interface is allowed to change an * object. */ mutable bool isReadOnly; }; /** * RefInterfaceBase is an abstract base class inheriting from * InterfaceBase used for subclasses dealing with interfaces to do * with references in one Interfaced object to another. */ class RefInterfaceBase: public InterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newRefClassName the name of the class referred to by the * corresponding class.. * * @param newRefTypeInfo the type_info object of the class referred * to by the corresponding class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param norebind if set to true, this interface is not responsible * for the rebinding of corresponding objects. * * @param nullable if set to true this corresponding references may * be null. * * @param defnull if set to true and a corresponding reference is * null it may be given a a default value in the initialization of * an EventGenerator. */ RefInterfaceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull); /** * Return the class name of the class referred to by * this interface. */ string refClassName() const { return theRefClassName; } /** * Return the type_info object of the class referred to by this * interface. */ const type_info & refTypeInfo() const { return theRefTypeInfo; } /** * Get the flag saying whether the interface is responsible for * rebinding of the corresponding refenerces. */ bool noRebind() const { return dontRebind; } /** * Set the flag saying that the interface is not responsible for * rebinding refenerces. */ void setNoRebind() { dontRebind = true; } /** * Set the flag saying that the interface is responsible for * rebinding refenerces. */ void setRebind() { dontRebind = false; } /** * Get the flag saying whether the interface is allowed to set the * reference to null. */ bool noNull() const { return !isNullable; } /** * Set the flag saying that the interface it is allowed to set the * reference to null. */ void setNullable() { isNullable = true; } /** * Set the flag saying that the interface it is not allowed to set * the reference to null. */ void setNotNullable() { isNullable = false; } /** * Get the flag saying wether a null pointer should be replaced by a * default of suitable class when rebind is called. */ bool defaultIfNull() const { return theDefaultIfNull; } /** * Set the flag saying that a null pointer should be replaced by a * default of suitable class when rebind is called. */ void setDefaultIfNull() { theDefaultIfNull = true; } /** * Set the flag saying that a null pointer should not be replaced by * a default of suitable class when rebind is called. */ void setNoDefaultIfNull() { theDefaultIfNull = false; } private: /** * The class name of the class referred to by this * interface. */ string theRefClassName; /** * The type_info object of the class referred to by this interface. */ const type_info & theRefTypeInfo; /** * The flag saying whether the interface is responsible for * rebinding refenerces. */ bool dontRebind; /** * The flag saying whether the interface is allowed to set a * reference to null. */ bool isNullable; /** * The flag saying wether a null pointer should be replaced * by a default of suitable class when rebind is called. */ bool theDefaultIfNull; }; /** Dummy function to ensure that strings can be used as arguments * also where numbers are assumed. */ inline double operator/(string,string) { return 0.0; } /** Dummy function to ensure that strings can be used as arguments * also where numbers are assumed. */ inline string operator*(double,string) { return ""; } } #endif /* ThePEG_InterfaceBaseH */ thepeg-1.8.0.orig/Interface/Reference.fh0000644000175000017500000000043411747772425016265 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Reference_FH #define ThePEG_Reference_FH // // This is the forward declaration of the Reference and ReferenceBase // classes. // namespace ThePEG { class ReferenceBase; template class Reference; } #endif /* ThePEG_Reference_FH */ thepeg-1.8.0.orig/Interface/Reference.cc0000644000175000017500000001261211747772425016256 0ustar sunsun// -*- C++ -*- // // Reference.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ReferenceBase class. // #include "InterfacedBase.h" #include "Reference.h" #include "Reference.xh" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Repository/BaseRepository.h" #include "ThePEG/Repository/EventGenerator.h" using namespace ThePEG; ReferenceBase:: ReferenceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull) : RefInterfaceBase(newName, newDescription, newClassName, newTypeInfo, newRefClassName, newRefTypeInfo, depSafe, readonly, norebind, nullable, defnull) {} IVector ReferenceBase::getReferences(const InterfacedBase & i) const { IVector r; r.push_back(get(i)); return r; } string ReferenceBase::exec(InterfacedBase & i, string action, string arguments) const { ostringstream ret; istringstream arg(arguments.c_str()); if ( action == "get" ) { cIBPtr ref = get(i); if ( ref ) ret << ref->fullName(); else ret << "*** NULL Reference ***"; } else if ( action == "set" || action == "newdef" || action == "setdef" ) { string refname; arg >> refname; if ( action == "setdef" ) { if ( objectDefaults(i).find(name()) == objectDefaults(i).end() ) return "Error: No default value defined for this object."; refname = objectDefaults(i)[name()]; } IBPtr ip; if ( refname.size() && refname != "NULL") { Interfaced * ii = dynamic_cast(&i); if ( ii && ii->generator() ) ip = ii->generator()->getObject(refname); else ip = BaseRepository::TraceObject(refname); } set(i, ip); if ( action == "newdef" ) objectDefaults(i)[name()] = get(i)? get(i)->fullName(): string("NULL"); } else if ( action == "notdef" ) { if ( objectDefaults(i).find(name()) == objectDefaults(i).end() ) return ""; string curr = get(i)? get(i)->fullName(): string("NULL"); if ( curr == objectDefaults(i)[name()] ) return ""; return curr + " (" + objectDefaults(i)[name()] + ")"; } else throw InterExUnknown(*this, i); return ret.str(); } string ReferenceBase::fullDescription(const InterfacedBase & ib) const { string ret = InterfaceBase::fullDescription(ib) + ( noNull()? "nevernull\n": "nullable\n" ) + ( defaultIfNull()? "defnull\n": "nodefnull\n" ); tIBPtr ref = get(ib); if ( !ref ) ret += "NULL\n"; else ret += ref->fullName() + '\n'; return ret; } string ReferenceBase::type() const { return string("R<") + refClassName() + ">"; } string ReferenceBase::doxygenType() const { return "Reference to objects of class " + refClassName(); } void ReferenceBase:: rebind(InterfacedBase & i, const TranslationMap & trans, const IVector & defs) const { if ( noRebind() ) return; IBPtr oldref = get(i); IBPtr newref; if ( oldref ) { newref = trans.translate(oldref); if ( !dependencySafe() && oldref && newref && newref->fullName() != oldref->fullName() ) i.touch(); } else if ( defaultIfNull() ) { try { for ( IVector::const_iterator p = defs.begin(); p != defs.end(); ++p ) { if ( *p && check(i, *p) ) { newref = *p; i.touch(); break; } } } catch ( ... ) {} } HoldFlag<> depflag(isDependencySafe); HoldFlag<> roflag(isReadOnly, false); set(i, newref, false); } RefExSetRefClass::RefExSetRefClass(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r) { theMessage << "Could not set the reference \"" << i.name() << "\" for the object \"" << o.name() << "\" to the object \"" << (r? r->name().c_str(): "") << "\" because it is not of the required class (" << i.refClassName() << ")."; severity(setuperror); } RefExSetUnknown::RefExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, cIBPtr r) { theMessage << "Could not set the reference \"" << i.name() << "\" for the object \"" << o.name() << "\" to the object \"" << (r? r->name().c_str(): "") << "\" because the set function threw an unknown exception."; severity(setuperror); } RefExGetUnknown::RefExGetUnknown(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not get the reference \"" << i.name() << "\" for the object \"" << o.name() << "\" because the get function threw an unknown exception."; severity(setuperror); } RefExSetNoobj::RefExSetNoobj(const InterfaceBase & i, const InterfacedBase & o, string n) { theMessage << "Could not set the reference \"" << i.name() << "\" for the object \"" << o.name() << "\" because the specified object \"" << n << "\" does not exist."; severity(setuperror); } RefExSetMessage:: RefExSetMessage(string ref, const InterfacedBase & o, const InterfacedBase & o2, string m) { theMessage << "Could not set the reference \"" << ref << "\" for the object \"" << o.name() << "\" to \"" << o2.name() << "\"." << m; severity(setuperror); } thepeg-1.8.0.orig/Interface/Interfaced.cc0000644000175000017500000000502611747772425016425 0ustar sunsun// -*- C++ -*- // // Interfaced.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Interfaced class. // #include "Interfaced.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Interface/Command.h" using namespace ThePEG; Interfaced::~Interfaced() {} void Interfaced::registerRepository(IBPtr i) { Repository::Register(i); } void Interfaced::registerRepository(IBPtr i, string newName) { Repository::Register(i, newName); } void Interfaced::reporeg(IBPtr object, string name) const { Repository::CreateDirectory(fullName()); string full = fullName() + "/" + name; IBPtr old = Repository::GetPointer(full); if ( old ) { if ( Repository::GetObjectsReferringTo(old).empty() ) Repository::remove(old); else Repository::rename(old, fullName() + "/old-" + name); } Repository::Register(object, full); } bool Interfaced::defaultInit() { return true; } void Interfaced::setUsed() const { theUseFlag = true; if ( generator() ) generator()->use(*this); } PPtr Interfaced::getParticle(PID newId) const { PPtr p(generator()? generator()->getParticle(newId): PPtr()); return p; } PDPtr Interfaced::getParticleData(PID newId) const { PDPtr p(generator()? generator()->getParticleData(newId): Repository::defaultParticle(newId)); return p; } void Interfaced::persistentOutput(PersistentOStream & os) const { os << theGenerator << theUseFlag; } void Interfaced::persistentInput(PersistentIStream & is , int) { is >> theGenerator >> theUseFlag; } AbstractClassDescription Interfaced::initInterfaced; string Interfaced::doDefaultInit(string) { if ( !defaultInit() ) return "Default initialization failed."; return ""; } void Interfaced::Init() { static Command interfaceDefaultInit ("DefaultInit", "Perform a default initialization of this object. This typically " "involves creating sub-objects which are needed. In this case the " "objects can be added to the repository in a sub-directory with the " "same name as this object.", &Interfaced::doDefaultInit, true); } thepeg-1.8.0.orig/Interface/Command.cc0000644000175000017500000000216211747772425015735 0ustar sunsun// -*- C++ -*- // // Command.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CommandBase class. // #include "InterfacedBase.h" #include "Command.h" using namespace ThePEG; string CommandBase::exec(InterfacedBase & i, string action, string arguments) const { if ( action != "do" ) return ""; return cmd(i, arguments); } string CommandBase::type() const { return "Cm"; } string CommandBase::doxygenType() const { return "Command"; } CmdExUnknown::CmdExUnknown(const InterfaceBase & i, const InterfacedBase & o, string c) { theMessage << "Could execute the command \"" << i.name() << "\" for the object \"" << o.name() << "\" with argument " << c << "because the command function threw an unknown exception."; severity(warning); } #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Command.tcc" #endif thepeg-1.8.0.orig/Interface/InterfaceBase.xh0000644000175000017500000000402611754473543017102 0ustar sunsun// -*- C++ -*- // // InterfaceBase.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_InterfaceBase_XH #define ThePEG_InterfaceBase_XH // // This is the declarations of the exception classes used by the // InterfaceBase class. // #include "InterfaceBase.fh" #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used as base class for errors detected by * interface classes. */ struct InterfaceException: public Exception { /** Standard constructor. */ InterfaceException() {}; }; /** Exception class used when an interface is called for an object of * the wrong class. */ struct InterExClass: public InterfaceException { /** Standard constructor. */ InterExClass(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used in case an interface is not properly * setup. */ struct InterExSetup: public InterfaceException { /** Standard constructor. */ InterExSetup(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used in case of an unkown error whenn accessing an * object via an interface. */ struct InterExUnknown: public InterfaceException { /** Standard constructor. */ InterExUnknown(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used in case an a read-only interface is used to * try to change an object. */ struct InterExReadOnly: public InterfaceException { /** Standard constructor. */ InterExReadOnly(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used when a reference non-nullable interface tries to set a reference to null. */ struct InterExNoNull: public InterfaceException { /** Standard constructor. */ InterExNoNull(const InterfaceBase & i, const InterfacedBase & o); }; /** @endcond */ } #endif /* ThePEG_InterfaceBase_XH */ thepeg-1.8.0.orig/Interface/Switch.cc0000644000175000017500000001123111747772425015615 0ustar sunsun// -*- C++ -*- // // Switch.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SwitchBase class. // #include "InterfacedBase.h" #include "Switch.h" #include "ThePEG/Utilities/StringUtils.h" namespace ThePEG { SwitchOption::SwitchOption(SwitchBase & theSwitch, string newName, string newDescription, long newValue) : Named(newName), theDescription(newDescription), theValue(newValue) { theSwitch.registerOption(*this); } string SwitchBase::opttag(long opt) const { ostringstream ret; ret << opt; OptionMap::const_iterator oit = theOptions.find(opt); if ( oit == theOptions.end() ) ret << " [Not a registered option] "; else ret << " [" << (oit->second).name() << "]"; return ret.str(); } string SwitchBase::exec(InterfacedBase & i, string action, string arguments) const { ostringstream ret; if ( action == "get" ) { return opttag(get(i)); } else if ( action == "def" ) { return opttag(def(i)); } else if ( action == "setdef" && objectDefaults(i).find(name()) == objectDefaults(i).end() ) { setDef(i); } else if ( action == "set" || action == "newdef" || action == "setdef" ) { if ( action == "setdef" ) arguments = objectDefaults(i)[name()]; istringstream arg(arguments); long val; arg >> val; if ( !arg || theOptions.find(val) == theOptions.end() ) { string sval = StringUtils::car(arguments); StringMap::const_iterator sit = theOptionNames.find(sval); if ( sit == theOptionNames.end() ) { if ( sval == "true" && theOptions.find(1) != theOptions.end() ) val = 1; else if ( sval == "false" && theOptions.find(0) != theOptions.end() ) val = 0; else { string errortext = "Error: no option '" + StringUtils::car(arguments) + "' found for switch\n'" + i.fullName() + ":" +name() + "'\nValid options are: "; for (StringMap::const_iterator it = theOptionNames.begin(); it != theOptionNames.end(); ++it ) errortext += it->first + ' '; return errortext + '\n'; } } else val = sit->second.value(); } try { set(i, val); if ( action == "newdef" ) objectDefaults(i)[name()] = opttag(val); return ret.str(); } catch ( Exception & ex ) { ex.handle(); } istringstream arg2(arguments.c_str()); string sval; arg2 >> sval; StringMap::const_iterator optit = theOptionNames.find(sval); if ( optit != theOptionNames.end() ) val = optit->second.value(); set(i, val); if ( action == "newdef" ) objectDefaults(i)[name()] = opttag(val); } else if ( action == "notdef" ) { string deflt = opttag(def(i)); if ( objectDefaults(i).find(name()) != objectDefaults(i).end() ) deflt = objectDefaults(i)[name()]; else if ( !hasDefault ) return ""; if ( deflt != opttag(get(i)) ) return opttag(get(i)) + " (" + deflt + ")"; } else throw InterExUnknown(*this, i); return ret.str(); } string SwitchBase::type() const { return "Sw"; } string SwitchBase::doxygenType() const { return "Switch"; } string SwitchBase::fullDescription(const InterfacedBase & ib) const { ostringstream os; os << InterfaceBase::fullDescription(ib) << get(ib) << '\n' << def(ib) << '\n' << options().size() << '\n'; for ( OptionMap::const_iterator it = options().begin(); it != options().end(); ++it ) os << it->second.value() << '\n' << it->second.name() << '\n' << it->second.description() << endl; return os .str(); } SwExSetOpt::SwExSetOpt(const InterfaceBase & i, const InterfacedBase & o, long v) { theMessage << "Could not set the switch \"" << i.name() << "\" for the object \"" << o.name() << "\" to " << v << "because it is not a registered option."; severity(setuperror); } SwExSetUnknown::SwExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, long v) { theMessage << "Could not set the switch \"" << i.name() << "\" for the object \"" << o.name() << "\" to " << v << " because the set function threw an unknown exception."; severity(setuperror); } SwExGetUnknown::SwExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char * s) { theMessage << "Could not get the " << s << " value of switch \"" << i.name() << "\" for the object \"" << o.name() << "\" because the get function threw an unknown exception."; severity(setuperror); } } #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Switch.tcc" #endif thepeg-1.8.0.orig/Interface/RefVector.xh0000644000175000017500000000574611747772425016323 0ustar sunsun// -*- C++ -*- // // RefVector.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RefVector_XH #define ThePEG_RefVector_XH // // This is the declarations of the exception classes used by the // RefVector class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by RefVector if trying to set a pointer of * the wrong type. */ struct RefVExRefClass: public InterfaceException { /** Standard constructor. */ RefVExRefClass(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r, const char *); }; /** Exception class used by RefVector if an unknown error occurs. */ struct RefVExSetUnknown: public InterfaceException { /** Standard constructor. */ RefVExSetUnknown(const RefInterfaceBase & i, const InterfacedBase & o, cIBPtr r, int j, const char *); }; /** Exception class used by RefVector of a specified object was not * found. */ struct RefVExSetUnfound: public InterfaceException { /** Standard constructor. */ RefVExSetUnfound(const InterfaceBase & i, const InterfacedBase & o, string); }; /** Exception class used by RefVector if a given index was out of * bounds. */ struct RefVExIndex: public InterfaceException { /** Standard constructor. */ RefVExIndex(const InterfaceBase & i, const InterfacedBase & o, int j); }; /** Exception class used by RefVector if trying to change the size of * a fixed size container. */ struct RefVExFixed: public InterfaceException { /** Standard constructor. */ RefVExFixed(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by RefVector if an unknown error occurs. */ struct RefVExDelUnknown: public InterfaceException { /** Standard constructor. */ RefVExDelUnknown(const InterfaceBase & i, const InterfacedBase & o, int j); }; /** Exception class used by RefVector if an unknown error occurs. */ struct RefVExGetUnknown: public InterfaceException { /** Standard constructor. */ RefVExGetUnknown(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by RefVector if manipulating through a null * member function */ struct RefVExNoSet: public InterfaceException { /** Standard constructor. */ RefVExNoSet(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by RefVector if manipulating through a null * member function */ struct RefVExNoIns: public InterfaceException { /** Standard constructor. */ RefVExNoIns(const InterfaceBase & i, const InterfacedBase & o); }; /** Exception class used by RefVector if manipulating through a null * member function */ struct RefVExNoDel: public InterfaceException { /** Standard constructor. */ RefVExNoDel(const InterfaceBase & i, const InterfacedBase & o); }; /** @endcond */ } #endif /* ThePEG_RefVector_XH */ thepeg-1.8.0.orig/Interface/ParVector.h0000644000175000017500000007630211747772425016135 0ustar sunsun// -*- C++ -*- // // ParVector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ParVector_H #define ThePEG_ParVector_H // This is the declaration of the ParVector, ParVectorTBase and // ParVectorBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" #include "ParVector.fh" #include namespace ThePEG { /// Helper functions for putUnit namespace { template /** * Helper function for putUnit */ inline void putUnitImpl2(ostream & os, T v, T u, DimensionT) { os << v/u; } template /** * Helper function for putUnit */ inline void putUnitImpl2(ostream & os, T v, T u, StandardT) { if ( u > T() ) os << v/u; else os << v; } } /** * The ParVector and its base classes ParVectorTBase and ParVectorBase * defines an interface to a class derived from the InterfacedBase, * through which vectors (or any other container) of simple member * variables can be manuipulated. ParVector is templated on the type * of the member variable and the type of the InterfacedBase class, * and is derived from the InterfaceBase class via * ParVectorTBase (which is templated only on the class * of the member variable) and ParVectorBase. * * For each InterfacedBase class exactly one static ParVector object * should created for each member variable of container type which * should be interfaced. This object will automatically register * itself with the BaseRepository class. * * @see Parameter * @see InterfacedBase * @see InterfaceBase * */ class ParVectorBase: public InterfaceBase { public: /** A vector of strings. */ typedef vector StringVector; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newSize the size of the container or -1 if varying. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. */ ParVectorBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, int newSize, bool depSafe, bool readonly, int limits) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly), limit(limits), theSize(newSize) { hasDefault = false; } /** * Destructor. */ virtual ~ParVectorBase() {} /** * The general interface method overriding the one in * InterfaceBase. For this class, \a action can be any of "set", * "insert", "erase", "get", "min", "max", "def" and "setdef" and \a * argument should be a something which can be read into an integer * and into a variable through a stringstream with the standard '>>' * operator. */ virtual string exec(InterfacedBase &, string action, string arguments) const; /** * Return a complete description of this parameter vector. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Set the \a i'th element of a container of member variables of \a * ib to \a val. \a val should be able to be read into the * corresponding variable type through a stringstream with the * standard '>>' operator. */ virtual void set(InterfacedBase & ib, string val, int i) const = 0; /** * Insert a new object before the \a i'th element of a container of * member variables of \a ib and set it to \a val. \a val should be * able to be read into the corresponding variable type through a * stringstream with the standard '>>' operator. */ virtual void insert(InterfacedBase & ib, string val, int i) const = 0; /** * Remove the \a i'th element of a container of member variables of * \a ib. */ virtual void erase(InterfacedBase & ib, int i) const = 0; /** * Return the values of a container of member variables of \a ib. */ virtual StringVector get(const InterfacedBase & ib) const = 0; /** * Return the minimum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual string minimum(const InterfacedBase & ib, int i) const = 0; /** * Return the maximum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual string maximum(const InterfacedBase & ib, int i) const = 0; /** * Return the default value for the \a i'th element of a container * of member variables of \a ib. */ virtual string def(const InterfacedBase & ib, int i) const = 0; /** * Return the general default value for this parameter vector. */ virtual string def() const = 0; /** * Set the \a i'th element of a container of member variables of \a * ib to its default value. */ virtual void setDef(InterfacedBase & ib, int i) const = 0; /** * True if there the variable is limited from above and below. */ bool limited() const { return limit != Interface::nolimits; } /** * True if there the variable is limited from abovew. */ bool upperLimit() const { return limit == Interface::limited || limit == Interface::upperlim; } /** * True if there the variable is limited from below. */ bool lowerLimit() const { return limit == Interface::limited || limit == Interface::lowerlim; } /** * Set a flag indicating that there are limits associated with the * variables. */ void setLimited() { limit = Interface::limited; } /** * Set a flag indicating if there are no limits associated with the * variables. */ void setUnlimited() { limit = Interface::nolimits; } /** * Get the size of the container being interfaced. If the size() is * less than 0, the size is allowed to vary. */ int size() const { return theSize; } /** * Set the size of the container being interfaced. If the size is * less than 0, the size is allowed to vary. */ void setSize(int sz) { theSize = sz; } /** * Set the size of the container being interfaced to -1, i.e. the * size is allowed to vary. */ void setVariableSize() { theSize = 0; } private: /** * True if there are limits associated with the * variables. */ int limit; /** * The size of the container being interfaced. */ int theSize; }; /** * The ParVector and its base classes ParVectorTBase and ParVectorBase * defines an interface to a class derived from the InterfacedBase, * through which vectors (or any other container) of simple member * variables can be manuipulated. ParVector is templated on the type * of the member variable and the type of the InterfacedBase class, * and is derived from the InterfaceBase class via * ParVectorTBase (which is templated only on the class * of the member variable) and ParVectorBase. * * For each InterfacedBase class exactly one static ParVector object * should created for each member variable of container type which * should be interfaced. This object will automatically register * itself with the BaseRepository class. * * @see Parameter * @see InterfacedBase * @see InterfaceBase * */ template class ParVectorTBase: public ParVectorBase { public: /** A vector of objects of the template argument type. */ typedef vector TypeVector; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param newSize the size of the container or -1 if varying. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. */ ParVectorTBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, Type newUnit, int newSize, bool depSafe, bool readonly, int limits) : ParVectorBase(newName, newDescription, newClassName, newTypeInfo, newSize, depSafe, readonly, limits), theUnit(newUnit) {} /** * Destructor. */ virtual ~ParVectorTBase() {} /** * Return a code for the type of this parameter. */ virtual string type() const; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Return a complete description of this parameter vector. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Set the \a i'th element of a container of member variables of \a * ib to val. Uses a stringstream to read the \a val into a Type * object and then calls tset(InterfacedBase &, Type, int). */ virtual void set(InterfacedBase & ib, string val, int i) const ; /** * Set the \a i'th element of a container of member variables of \a * ib to \a val. */ virtual void tset(InterfacedBase & ib, Type val, int i) const = 0; /** * Insert a new object before the \a i'th element of a container of * member variables of \a ib and set it to \a val. Uses a * stringstream to read the \a val into a Type object and then calls * tinsert(InterfacedBase &, Type, int). */ virtual void insert(InterfacedBase & ib, string val, int i) const ; private: /// Implementation of set() for standard types. void setImpl(InterfacedBase & ib, string val, int i, StandardT) const; /// Implementation of set() for dimensioned types. void setImpl(InterfacedBase & ib, string val, int i, DimensionT) const; /// Implementation of insert() for standard types. void insertImpl(InterfacedBase & ib, string val, int i, StandardT) const; /// Implementation of insert() for dimensioned types. void insertImpl(InterfacedBase & ib, string val, int i, DimensionT) const; public: /** * Insert a new object before the \a i'th element of a container of * member variables of \a ib and set it to \a val. */ virtual void tinsert(InterfacedBase & ib, Type val, int i) const = 0; /** * Return the values of a container of member variables of \a ib in * a vector of strings. Calls the The tget(const InterfacedBase &) * and returns a vector of strings converted with ostringstreams. */ virtual StringVector get(const InterfacedBase & ib) const ; /** * Return the values of a container of member variables of \a ib in a * vector of Type. */ virtual TypeVector tget(const InterfacedBase & ib) const = 0; /** * Return the minimum value allowed for the \a i'th element of a * container of member variables of \a ib. Calls tminimum(const * InterfacedBase &, int) and converts the returned value with an * ostringstream. * */ virtual string minimum(const InterfacedBase & ib, int i) const ; /** * Return the minimum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual Type tminimum(const InterfacedBase & ib, int i) const = 0; /** * Return the maximum value allowed for the \a i'th element of a * container of member variables of \a ib. Calls tmaximum(const * InterfacedBase &, int) and converts the returned value with an * ostringstream. */ virtual string maximum(const InterfacedBase & ib, int i) const ; /** * Return the maximum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual Type tmaximum(const InterfacedBase & ib, int i) const = 0; /** * Return the default value for the \a i'th element of a container * of member variables of \a ib. Calls tdef(const InterfacedBase &, * int) and converts the returned value with an ostringstream. */ virtual string def(const InterfacedBase & ib, int i) const ; /** * Return the default value for the \a i'th element of a container of * member variables of \a ib. */ virtual Type tdef(const InterfacedBase & ib, int i) const = 0; /** * Return the general default value for this parameter vector. Calls * tdef() and converts the returned value with an ostringstream. */ virtual string def() const; /** * Return the general default value for this parameter vector. */ virtual Type tdef() const = 0; /** * set the \a i'th element of a container of member variables of \a ib to * its default value. */ virtual void setDef(InterfacedBase & ib, int i) const ; /** * Get the unit which an Type object is divided (multiplied) by when * written to (read from) a stream via a double. If unit() is zero, * the Type object is written/read directly. */ Type unit() const { return theUnit; } /** * Set the unit which an Type object is divided (multiplied) by when * written to (read from) a stream via a double. If unit() is zero, * the Type object is written/read directly. */ void unit(Type u) { theUnit = u; } protected: /** * Write a numer to a stream with the unit specified with unit(). */ void putUnit(ostream & os, Type val) const { putUnitImpl2(os, val, unit(), typename TypeTraits::DimType()); } private: /** * The unit which an Type object is divided (multiplied) by * when written to (read from) a stream via a double. If unit() is * zero, the Type object is written/read directly. */ Type theUnit; }; /** * The ParVector and its base classes ParVectorTBase and ParVectorBase * defines an interface to a class derived from the InterfacedBase, * through which vectors (or any other container) of simple member * variables can be manuipulated. ParVector is templated on the type * of the member variable and the type of the InterfacedBase class, * and is derived from the InterfaceBase class via * ParVectorTBase (which is templated only on the class * of the member variable) and ParVectorBase. * * For each InterfacedBase class exactly one static ParVector object * should created for each member variable of container type which * should be interfaced. This object will automatically register * itself with the BaseRepository class. * * @see Parameter * @see InterfacedBase * @see InterfaceBase * */ template class ParVector: public ParVectorTBase { public: /** * The declaration of member functions which can be used by this * ParVector interface for 'set' actions. */ typedef void (T::*SetFn)(Type, int); /** * The declaration of member functions which can be used by this * ParVector interface for 'insert' actions. */ typedef void (T::*InsFn)(Type, int); /** * The declaration of member functions which can be used by this * ParVector interface for 'erase' actions. */ typedef void (T::*DelFn)(int); /** * A vector of objects of the template parameter Type. */ typedef vector TypeVector; /** * The declaration of member functions which can be used by this * ParVector interface for 'get' actions. */ typedef TypeVector (T::*GetFn)() const; /** * A vector of strings. */ typedef vector StringVector; /** * The declaration of member functions which can be used by this * ParVector interface for 'get' actions. */ typedef StringVector (T::*StringGetFn)() const; /** * The declaration of member functions which can be used by this * ParVector interface for 'erase' actions. */ typedef Type (T::*DefFn)(int) const; /** * Declaration of a direct pointer to the member variable in case it * is a vector. */ typedef TypeVector T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newSize the size of the container or -1 if varying. * * @param newDef the default value of the corresponding parameters. * * @param newMin the minimum value of the corresponding parameters. * * @param newMax the maximum value of the corresponding parameters. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and below. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newDefFn optional pointer to member function for the * 'default' action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newMinFn optional pointer to member function for the * 'minimum' action. * * @param newMaxFn optional pointer to member function for the * 'maximum' action. * * @param newStringGetFn optional pointer to member function for the * 'get' action. */ ParVector(string newName, string newDescription, Member newMember, int newSize, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, bool limits = true, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, DefFn newDefFn = 0, DefFn newMinFn = 0, DefFn newMaxFn = 0, StringGetFn newStringGetFn = 0) : ParVectorTBase(newName, newDescription, ClassTraits::className(), typeid(T), Type(), newSize, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn), theStringGetFn(newStringGetFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param newSize the size of the container or -1 if varying. * * @param newDef the default value of the corresponding parameters. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newMin the minimum value of the corresponding parameters. * * @param newMax the maximum value of the corresponding parameters. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and below. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newDefFn optional pointer to member function for the * 'default' action. * * @param newMinFn optional pointer to member function for the * 'minimum' action. * * @param newMaxFn optional pointer to member function for the * 'maximum' action. * * @param newStringGetFn optional pointer to member function for the * 'get' action. */ ParVector(string newName, string newDescription, Member newMember, Type newUnit, int newSize, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, bool limits = true, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, DefFn newDefFn = 0, DefFn newMinFn = 0, DefFn newMaxFn = 0, StringGetFn newStringGetFn = 0) : ParVectorTBase(newName, newDescription, ClassTraits::className(), typeid(T), newUnit, newSize, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn), theStringGetFn(newStringGetFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newSize the size of the container or -1 if varying. * * @param newDef the default value of the corresponding parameters. * * @param newMin the minimum value of the corresponding parameters. * * @param newMax the maximum value of the corresponding parameters. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newDefFn optional pointer to member function for the * 'default' action. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newMinFn optional pointer to member function for the * 'minimum' action. * * @param newMaxFn optional pointer to member function for the * 'maximum' action. * * @param newStringGetFn optional pointer to member function for the * 'get' action. */ ParVector(string newName, string newDescription, Member newMember, int newSize, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, int limits = Interface::limited, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, DefFn newDefFn = 0, DefFn newMinFn = 0, DefFn newMaxFn = 0, StringGetFn newStringGetFn = 0) : ParVectorTBase(newName, newDescription, ClassTraits::className(), typeid(T), Type(), newSize, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn), theStringGetFn(newStringGetFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to a Member which is a TypeVector. May * be null, in which case the pointers to member functions must be * specified. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param newSize the size of the container or -1 if varying. * * @param newDef the default value of the corresponding parameters. * * @param newGetFn optional pointer to member function for the * 'get' action. * * @param newMin the minimum value of the corresponding parameters. * * @param newMax the maximum value of the corresponding parameters. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. * * @param newSetFn optional pointer to member function for the 'set' * action. * * @param newInsFn optional pointer to member function for the * 'insert' action. * * @param newDelFn optional pointer to member function for the * 'erase' action. * * @param newDefFn optional pointer to member function for the * 'default' action. * * @param newMinFn optional pointer to member function for the * 'minimum' action. * * @param newMaxFn optional pointer to member function for the * 'maximum' action. * * @param newStringGetFn optional pointer to member function for the * 'get' action. */ ParVector(string newName, string newDescription, Member newMember, Type newUnit, int newSize, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, int limits = Interface::limited, SetFn newSetFn = 0, InsFn newInsFn = 0, DelFn newDelFn = 0, GetFn newGetFn = 0, DefFn newDefFn = 0, DefFn newMinFn = 0, DefFn newMaxFn = 0, StringGetFn newStringGetFn = 0) : ParVectorTBase(newName, newDescription, ClassTraits::className(), typeid(T), newUnit, newSize, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn), theStringGetFn(newStringGetFn) {} /** * Set the \a i'th element of a container of member variables of \a * ib to \a val. */ virtual void tset(InterfacedBase & ib, Type val, int i) const ; /** * Insert a new object before the \a i'th element of a container of * member variables of \a ib and set it to \a val. */ virtual void tinsert(InterfacedBase & ib, Type val, int i) const ; /** * Remove the \a i'th element of a container of * member variables of \a ib. */ virtual void erase(InterfacedBase & ib, int i) const; /** * Return the values of a container of member variables of \a ib in * a vector of strings. Calls the The tget(const InterfacedBase &) * and returns a vector of strings converted with ostringstreams. */ virtual StringVector get(const InterfacedBase & ib) const ; /** * Return the values of a container of member variables of \a ib in a * vector of Type. */ virtual TypeVector tget(const InterfacedBase & ib) const ; /** * Return the minimum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual Type tminimum(const InterfacedBase & ib, int i) const ; /** * Return the maximum value allowed for the \a i'th element of a * container of member variables of \a ib. */ virtual Type tmaximum(const InterfacedBase & ib, int i) const ; /** * Return the default value for the \a i'th element of a container of * member variables of \a ib. */ virtual Type tdef(const InterfacedBase &, int) const ; /** * Return the general default value for this parameter vector. */ virtual Type tdef() const; /** * Give a pointer to a member function to be used by tset(). */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by tinsert(). */ void setInsertFunction(InsFn ifn) { theInsFn = ifn; } /** * Give a pointer to a member function to be used by tget(). */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by terase(). */ void setEraseFunction(DelFn df) { theDelFn = df; } /** * Give a pointer to a member function to be used by tdef(). */ void setDefaultFunction(GetFn df) { theDefFn = df; } /** * Give a pointer to a member function to be used by tminimum(). */ void setMinFunction(GetFn mf) { theMinFn = mf; } /** * Give a pointer to a member function to be used by tmaximum(). */ void setMaxFunction(GetFn mf) { theMaxFn = mf; } /** * Give a pointer to a member function to be used by get(). */ void setStringGetFunction(StringGetFn gf) { theStringGetFn = gf; } /** * Print a description to be included in the Doxygen documentation * to the given \a stream. */ virtual void doxygenDescription(ostream & stream) const; private: /** * The pointer to the member variable. */ Member theMember; /** * Default value to be used if no corresponding member function * pointer is given. */ Type theDef; /** * Minimum value to be used if no corresponding member function * pointer is given. */ Type theMin; /** * Maximum value to be used if no * corresponding member function pointer is given. */ Type theMax; /** * A pointer to a member function to be used by tset(). */ SetFn theSetFn; /** * A pointer to a member function to be used by tinsert(). */ InsFn theInsFn; /** * A pointer to a member function to be used by terase(). */ DelFn theDelFn; /** * A pointer to a member function to be used by tget(). */ GetFn theGetFn; /** * Pointer to member function to be used by tdef(). */ DefFn theDefFn; /** * Pointer to member function to be used by tminimum(). */ DefFn theMinFn; /** * Pointer to member function to be used by tmaximum(). */ DefFn theMaxFn; /** * A pointer to a member function to be used by set(). */ StringGetFn theStringGetFn; }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "ParVector.tcc" #endif #endif /* ThePEG_ParVector_H */ thepeg-1.8.0.orig/Interface/RefVector.tcc0000644000175000017500000001254111747772425016444 0ustar sunsun// -*- C++ -*- // // RefVector.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the RefVector class. // namespace ThePEG { template RefVector:: RefVector(string newName, string newDescription, Member newMember, int newSize, bool depSafe, bool readonly, bool rebind, bool nullable, SetFn newSetFn, InsFn newInsFn, DelFn newDelFn, GetFn newGetFn, CheckFn newCheckFn) : RefVectorBase(newName, newDescription, ClassTraits::className(), typeid(T), ClassTraits::className(), typeid(R), newSize, depSafe, readonly, !rebind, nullable, false), theMember(newMember), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theCheckFn(newCheckFn) {} template RefVector:: RefVector(string newName, string newDescription, Member newMember, int newSize, bool depSafe, bool readonly, bool rebind, bool nullable, bool defnull, SetFn newSetFn, InsFn newInsFn, DelFn newDelFn, GetFn newGetFn, CheckFn newCheckFn) : RefVectorBase(newName, newDescription, ClassTraits::className(), typeid(T), ClassTraits::className(), typeid(R), newSize, depSafe, readonly, !rebind, nullable, defnull), theMember(newMember), theSetFn(newSetFn), theInsFn(newInsFn), theDelFn(newDelFn), theGetFn(newGetFn), theCheckFn(newCheckFn) {} template void RefVector:: set(InterfacedBase & i, IBPtr newRef, int place, bool chk) const { if ( readOnly() ) throw InterExReadOnly(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( noNull() && !newRef ) throw InterExNoNull(*this, i); RefPtr r = dynamic_ptr_cast(newRef); if ( !r && newRef ) throw RefVExRefClass(*this, i, newRef, "set"); IVector oldVector = get(i); if ( theSetFn && ( chk || !theMember ) ) { try { (t->*theSetFn)(r, place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefVExSetUnknown(*this, i, r, place, "set"); } } else { if ( !theMember ) throw RefVExNoSet(*this, i); if ( place < 0 || static_cast(place) >= (t->*theMember).size() ) throw RefVExIndex(*this, i, place); (t->*theMember)[place] = r; } if ( !InterfaceBase::dependencySafe() && oldVector != get(i) ) i.touch(); } template void RefVector:: insert(InterfacedBase & i, IBPtr newRef, int place, bool chk) const { if ( readOnly() ) throw InterExReadOnly(*this, i); if ( size() > 0 ) throw RefVExFixed(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( noNull() && !newRef ) throw InterExNoNull(*this, i); RefPtr r = dynamic_ptr_cast(newRef); if ( !r && newRef ) throw RefVExRefClass(*this, i, newRef, "insert"); IVector oldVector = get(i); if ( theInsFn && ( chk || !theMember ) ) { try { (t->*theInsFn)(r, place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefVExSetUnknown(*this, i, r, place, "insert"); } } else { if ( !theMember ) throw RefVExNoIns(*this, i); if ( place < 0 || static_cast(place) > (t->*theMember).size() ) throw RefVExIndex(*this, i, place); (t->*theMember).insert((t->*theMember).begin()+place, r); } if ( !InterfaceBase::dependencySafe() && oldVector != get(i) ) i.touch(); } template void RefVector::erase(InterfacedBase & i, int place) const { if ( readOnly() ) throw InterExReadOnly(*this, i); if ( size() > 0 ) throw RefVExFixed(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); IVector oldVector = get(i); if ( theDelFn ) { try { (t->*theDelFn)(place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefVExDelUnknown(*this, i, place); } } else { if ( !theMember ) throw RefVExNoDel(*this, i); if ( place < 0 || static_cast(place) >= (t->*theMember).size() ) throw RefVExIndex(*this, i, place); (t->*theMember).erase((t->*theMember).begin()+place); } if ( !InterfaceBase::dependencySafe() && oldVector != get(i) ) i.touch(); } template IVector RefVector::get(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { vector ret = (t->*theGetFn)(); return IVector(ret.begin(), ret.end()); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw RefVExGetUnknown(*this, i); } } if ( theMember ) return IVector((t->*theMember).begin(), (t->*theMember).end()); throw InterExSetup(*this, i); } template bool RefVector::check(const InterfacedBase & i, cIBPtr ir, int place) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( noNull() && !ir ) return false; cRefPtr r = dynamic_ptr_cast(ir); if ( !r && ir ) return false; if ( theCheckFn ) return (t->*theCheckFn)(r, place); if ( !theMember ) return true; return place >= 0 && static_cast(place) <= (t->*theMember).size(); } } thepeg-1.8.0.orig/Interface/Parameter.tcc0000644000175000017500000002007411747772425016465 0ustar sunsun// -*- C++ -*- // // Parameter.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Parameter and ParameterTBase classes. // namespace ThePEG { template string ParameterTBase::type() const { if ( std::numeric_limits::is_integer ) return "Pi"; if ( typeid(Type) == typeid(string) ) return "Ps"; return "Pf"; } template string ParameterTBase::doxygenType() const { string lim = ""; if ( !limited() ) lim = "Unlimited "; if ( std::numeric_limits::is_integer ) return lim + "Integer parameter"; if ( typeid(Type) == typeid(string) ) return "Character string parameter"; return lim + "Parameter"; } template inline void ParameterTBase::setImpl(InterfacedBase & i, string newValue, StandardT) const { istringstream is(newValue); if ( unit() > Type() ) { double t; is >> t; tset(i, Type(t*unit())); } else { Type t = Type(); is >> t; tset(i, t); } } template inline void ParameterTBase::setImpl(InterfacedBase & i, string newValue, DimensionT) const { istringstream is(newValue); double t; is >> t; tset(i, t*unit()); } template void ParameterTBase:: set(InterfacedBase & i, string newValue) const { setImpl(i, newValue, typename TypeTraits::DimType()); } template string ParameterTBase:: get(const InterfacedBase & i) const { ostringstream os; putUnit(os, tget(i)); return os.str(); } template string ParameterTBase:: minimum(const InterfacedBase & i) const { ostringstream os; if ( ParameterBase::lowerLimit() ) putUnit(os, tminimum(i)); return os.str(); } template string ParameterTBase:: maximum(const InterfacedBase & i) const { ostringstream os; if ( ParameterBase::upperLimit() ) putUnit(os, tmaximum(i)); return os.str(); } template string ParameterTBase:: def(const InterfacedBase & i) const { ostringstream os; putUnit(os, tdef(i)); return os.str(); } template void Parameter::tset(InterfacedBase & i, Type newValue) const { if ( InterfaceBase::readOnly() ) throw InterExReadOnly(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( ( ParameterBase::lowerLimit() && newValue < tminimum(i) ) || ( ParameterBase::upperLimit() && newValue > tmaximum(i) ) ) throw ParExSetLimit(*this, i, newValue); Type oldValue = tget(i); if ( theSetFn ) { try { (t->*theSetFn)(newValue); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExSetUnknown(*this, i, newValue); } } else { if ( theMember ) t->*theMember = newValue; else throw InterExSetup(*this, i); } if ( !InterfaceBase::dependencySafe() && oldValue != tget(i)) i.touch(); } template void Parameter::tset(InterfacedBase & i, string newValue) const { if ( InterfaceBase::readOnly() ) throw InterExReadOnly(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); string oldValue = tget(i); if ( theSetFn ) { try { (t->*theSetFn)(newValue); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExSetUnknown(*this, i, newValue); } } else { if ( theMember ) t->*theMember = newValue; else throw InterExSetup(*this, i); } if ( !InterfaceBase::dependencySafe() && oldValue != tget(i)) i.touch(); } template Type Parameter::tget(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { return (t->*theGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "current"); } } if ( theMember ) return t->*theMember; else throw InterExSetup(*this, i); } template string Parameter::tget(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { return (t->*theGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "current"); } } if ( theMember ) return t->*theMember; else throw InterExSetup(*this, i); } template Type Parameter::tminimum(const InterfacedBase & i) const { if ( theMinFn ) { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return max(theMin, (t->*theMinFn)()); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "minimum"); } } return theMin; } template Type Parameter::tmaximum(const InterfacedBase & i) const { if ( theMaxFn ) { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return min(theMax, (t->*theMaxFn)()); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "maximum"); } } return theMax; } template Type Parameter::tdef(const InterfacedBase & i) const { if ( theDefFn ) { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theDefFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "default"); } } return theDef; } template string Parameter::tdef(const InterfacedBase & i) const { if ( theDefFn ) { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theDefFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParExGetUnknown(*this, i, "default"); } } return theDef; } template void Parameter::doxygenDescription(ostream & os) const { ParameterTBase::doxygenDescription(os); os << "Default value: "; this->putUnit(os, theDef); if ( theDefFn ) os << " (May be changed by member function.)"; if ( ParameterBase::lowerLimit() ) { os << "
\nMinimum value: "; this->putUnit(os, theMin); if ( theMinFn ) os << " (May be changed by member function.)"; } if ( ParameterBase::upperLimit() ) { os << "
\nMaximum value: "; this->putUnit(os, theMax); if ( theMaxFn ) os << " (May be changed by member function.)"; } os << "
\n"; } template void Parameter::doxygenDescription(ostream & os) const { ParameterTBase::doxygenDescription(os); os << "Default value: " << theDef; if ( theDefFn ) os << " (May be changed by member function.)"; os << "
\n"; } namespace { template inline void ostreamInsert(ostream & os, T v, DimensionT) { os << ounit(v,T::baseunit()); } template inline void ostreamInsert(ostream & os, T v, StandardT) { os << v; } } template ParExSetLimit::ParExSetLimit(const InterfaceBase & i, const InterfacedBase & o, T v) { theMessage << "Could not set the parameter \"" << i.name() << "\" for the object \"" << o.name() << "\" to "; ostreamInsert(theMessage,v,typename TypeTraits::DimType() ); theMessage << " because the value is outside the specified limits."; severity(setuperror); } template ParExSetUnknown::ParExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, T v) { theMessage << "Could not set the parameter \"" << i.name() << "\" for the object \"" << o.name() << "\" to "; ostreamInsert(theMessage,v,typename TypeTraits::DimType() ); theMessage << " because the set function threw an unknown exception."; severity(setuperror); } } thepeg-1.8.0.orig/Interface/ParVector.fh0000644000175000017500000000055611747772425016301 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_ParVector_FH #define ThePEG_ParVector_FH // // This is the forward declaration of the ParVector, ParVectorTBase // and ParVectorBase classes. // namespace ThePEG { class ParVectorBase; template class ParVectorTBase; template class ParVector; } #endif /* ThePEG_ParVector_FH */ thepeg-1.8.0.orig/Interface/Switch.fh0000644000175000017500000000047111747772425015631 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Switch_FH #define ThePEG_Switch_FH // // This is the forward declaration of the Switch, SwitchBase and // SwitchOption classes. // namespace ThePEG { class SwitchOption; class SwitchBase; template class Switch; } #endif /* ThePEG_Switch_FH */ thepeg-1.8.0.orig/Interface/Switch.tcc0000644000175000017500000000462611747772425016013 0ustar sunsun// -*- C++ -*- // // Switch.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Switch class. // namespace ThePEG { template void Switch::set(InterfacedBase & i, long newValue) const { T * t = dynamic_cast(&i); if ( readOnly() ) throw InterExReadOnly(*this, i); if ( !t ) throw InterExClass(*this, i); if ( !check(newValue) ) throw SwExSetOpt(*this, i, newValue); long oldValue = get(i); if ( theSetFn ) { try { (t->*theSetFn)(Int(newValue)); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw SwExSetUnknown(*this, i, newValue); } } else { if ( theMember ) t->*theMember = Int(newValue); else throw InterExSetup(*this, i); } if ( !InterfaceBase::dependencySafe() && oldValue != get(i) ) i.touch(); } template long Switch::get(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { return (t->*theGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw SwExGetUnknown(*this, i, "current"); } } if ( theMember ) return t->*theMember; throw InterExSetup(*this, i); } template long Switch::def(const InterfacedBase & i) const { if ( theDefFn ) { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theDefFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw SwExGetUnknown(*this, i, "default"); } } return theDef; } template void Switch::doxygenDescription(ostream & os) const { SwitchBase::doxygenDescription(os); os << "Registered options:\n

\n"; for ( OptionMap::const_iterator it = options().begin(); it != options().end(); ++it ) os << "
" << it->first << "(" << it->second.name() << ")
" << "
" << it->second.description() << "\n"; os << "
\nDefault value: " << theDef; if ( theDefFn ) os << " (May be changed by member function.)"; os << "\n\n"; } } thepeg-1.8.0.orig/Interface/Deleted.h0000644000175000017500000000762711747772425015602 0ustar sunsun// -*- C++ -*- // // Deleted.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Deleted_H #define ThePEG_Deleted_H // This is the declaration of the Deleted and DeletedBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" namespace ThePEG { /** * The DeletedBase and its templated Deleted sub-class defines an * interface to a class derived from the InterfacedBase. It should be * used when an interface is removed to provide a user-friendly * message indicating why it was removed and possibly which interface * should be used instead. * * For each deleted interface to be defined for a class * T, exactly one static object of the Deleted must be * created and initialized as follows: * * Deleted delint(name, description); * * Where name is an identifier std::string which * should only contain letters [a-zA-z0-9_] and description is * an arbitrary std::string * * The Deleted class, as all other InterfaceBase classes * are mainly used in the BaseRepository class. * * * @see InterfacedBase * @see InterfaceBase * @see BaseRepository * */ class DeletedBase: public InterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * */ DeletedBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, true, false) { rank(-1.0e10); } /** * The general interface method overriding the one in * InterfaceBase. For this class, an exception will be thrown with a * message given by the description string provided in the * constructor. */ virtual string exec(InterfacedBase &ib, string action, string arguments) const ; /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; /** * Return a code for the type of this interface. */ virtual string type() const; }; /** * The DeletedBase and its templated Deleted sub-class defines an * interface to a class derived from the InterfacedBase. It should be * used when an interface is removed to provide a user-friendly * message indicating why it was removed and possibly which interface * should be used instead. * * For each deleted interface to be defined for a class * T, exactly one static object of the Deleted must be * created and initialized as follows: * * Deleted delint(name, description); * * Where name is an identifier std::string which * should only contain letters [a-zA-z0-9_] and description is * an arbitrary std::string * * The Deleted class, as all other InterfaceBase classes * are mainly used in the BaseRepository class. * * * @see InterfacedBase * @see InterfaceBase * @see BaseRepository * */ template class Deleted: public DeletedBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * */ Deleted(string newName, string newDescription) : DeletedBase(newName, newDescription, ClassTraits::className(), typeid(T)) {} }; } #endif /* ThePEG_Deleted_H */ thepeg-1.8.0.orig/Interface/InterfacedBase.xh0000644000175000017500000000252211754473543017245 0ustar sunsun// -*- C++ -*- // // InterfacedBase.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_InterfacedBase_XH #define ThePEG_InterfacedBase_XH // // This is the declarations of the exception classes used by the // InterfacedBase class. // // #include "InterfacedBase.fh" #include "InterfaceBase.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception base class used if something goes wrong in the setup phase. */ struct SetupException: public InterfaceException { /** Constructor. */ SetupException() {}; }; /** Exception base class used if something goes wrong in the setup phase. */ struct UpdateException: public InterfaceException { /** Constructor. */ UpdateException() {}; }; /** Exception base class used if something goes wrong with rebinding pointers in the setup phase. */ struct RebindException: public InterfaceException { /** Constructor. */ RebindException() {}; }; /** Exception base class used if something goes wrong in the setup phase. */ struct InitException: public InterfaceException { /** Constructor. */ InitException() {}; }; /** @endcond */ } #endif /* ThePEG_InterfacedBase_XH */ thepeg-1.8.0.orig/Interface/InterfacedBase.cc0000644000175000017500000000441411754473543017215 0ustar sunsun// -*- C++ -*- // // InterfacedBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the InterfacedBase class. // #include "InterfacedBase.h" #include "ThePEG/Repository/BaseRepository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Utilities/StringUtils.h" #include "ThePEG/Utilities/DescriptionList.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Command.h" using namespace ThePEG; InterfacedBase::~InterfacedBase() {} void InterfacedBase::readSetup(istream &) {} bool InterfacedBase::preInitialize() const { return false; } void InterfacedBase::persistentOutput(PersistentOStream & os) const { os << fullName() << isLocked << isTouched << oenum(initState) << theComment << objectDefaults; } void InterfacedBase::persistentInput(PersistentIStream & is, int) { string n; is >> n >> isLocked >> isTouched >> ienum(initState) >> theComment >> objectDefaults; name(n); } string InterfacedBase::addComment(string c) { if ( theComment.length() ) theComment += "\n"; theComment += StringUtils::stripws(c); return ""; } AbstractClassDescription InterfacedBase::initInterfacedBase; void InterfacedBase::debugme() const { cerr << name() << " [" << DescriptionList::find(typeid(*this))->name() << "] "; PersistentBase::debugme(); } void InterfacedBase::Init() { static Parameter interfaceComment ("Comment", "A comment assigned to this object.", &InterfacedBase::theComment, "", true, false); interfaceComment.setHasDefault(false); static Command interfaceAddComment ("AddComment", "Add a comment to this object. Will be concatenated with the exixting " "comment.", &InterfacedBase::addComment, true); } void InterfacedBase::UpdateChecker::check(tIBPtr ip, bool & touch) { if ( !ip ) return; ip->update(); if ( ip->touched() ) touch = true; } thepeg-1.8.0.orig/Interface/Makefile.in0000644000175000017500000004715211756366734016127 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Interface ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGInter_la_LIBADD = am__objects_1 = InterfaceBase.lo InterfacedBase.lo Interfaced.lo \ ParVector.lo Parameter.lo RefVector.lo Reference.lo Switch.lo \ Command.lo ClassDocumentation.lo Deleted.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGInter_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGInter_la_OBJECTS = $(am_libThePEGInter_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGInter_la_SOURCES) DIST_SOURCES = $(libThePEGInter_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = InterfaceBase.cc InterfacedBase.cc Interfaced.cc ParVector.cc \ Parameter.cc RefVector.cc Reference.cc Switch.cc Command.cc \ ClassDocumentation.cc Deleted.cc DOCFILES = Command.h InterfaceBase.h Interfaced.h InterfacedBase.h ParVector.h \ Parameter.h RefVector.h Reference.h Switch.h ClassDocumentation.h \ Interface.h INCLUDEFILES = $(DOCFILES) Command.fh Command.tcc \ Command.xh InterfaceBase.fh InterfaceBase.xh \ InterfacedBase.xh ParVector.fh \ ParVector.tcc ParVector.xh Parameter.fh \ Parameter.tcc Parameter.xh RefVector.fh \ RefVector.tcc RefVector.xh Reference.fh \ Reference.tcc Reference.xh Switch.fh \ Switch.tcc Switch.xh ClassDocumentation.fh Deleted.h noinst_LTLIBRARIES = libThePEGInter.la libThePEGInter_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Interface/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Interface/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGInter.la: $(libThePEGInter_la_OBJECTS) $(libThePEGInter_la_DEPENDENCIES) $(EXTRA_libThePEGInter_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGInter_la_OBJECTS) $(libThePEGInter_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClassDocumentation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Command.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Deleted.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InterfaceBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Interfaced.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/InterfacedBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Parameter.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RefVector.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Reference.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Switch.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Interface/Switch.xh0000644000175000017500000000240611747772425015653 0ustar sunsun// -*- C++ -*- // // Switch.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Switch_XH #define ThePEG_Switch_XH // // This is the declarations of the exception classes used by the // Switch class. // #include "InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by Switch if variable is set to a value which * is not a listed option. */ struct SwExSetOpt: public InterfaceException { /** Standard constructor. */ SwExSetOpt(const InterfaceBase & i, const InterfacedBase & o, long v); }; /** Exception class used by Switch if an unkown error * occurs. */ struct SwExSetUnknown: public InterfaceException { /** Standard constructor. */ SwExSetUnknown(const InterfaceBase & i, const InterfacedBase & o, long v); }; /** Exception class used by Switch if an unkown error * occurs. */ struct SwExGetUnknown: public InterfaceException { /** Standard constructor. */ SwExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char * s); }; /** @endcond */ } #endif /* ThePEG_Switch_XH */ thepeg-1.8.0.orig/Interface/InterfaceBase.fh0000644000175000017500000000047511747772425017067 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_InterfaceBase_FH #define ThePEG_InterfaceBase_FH // // This is the forward declaration of the InterfaceBase and // RefInterfaceBase classes. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class InterfaceBase; class RefInterfaceBase; } #endif /* ThePEG_InterfaceBase_FH */ thepeg-1.8.0.orig/Interface/Parameter.h0000644000175000017500000007463211747772425016154 0ustar sunsun// -*- C++ -*- // // Parameter.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Parameter_H #define ThePEG_Parameter_H // This is the declaration of the Parameter, ParameterTBase and // ParameterBase classes. #include "ThePEG/Config/ThePEG.h" #include "InterfaceBase.h" #include "Parameter.xh" #include "Parameter.fh" #include "ThePEG/Utilities/StringUtils.h" #include namespace ThePEG { /// Helper functions for putUnit() namespace { template /** * Helper functions for putUnit */ inline void putUnitImpl(ostream & os, T v, T u, DimensionT) { os << v/u; } template /** * Helper functions for putUnit */ inline void putUnitImpl(ostream & os, T v, T u, StandardT) { if ( u > T() ) os << v/u; else os << v; } } /** * The Parameter and its base classes ParameterTBase and ParameterBase * defines an interface to a class derived from the InterfacedBase, * through which simple member variables can be * manuipulated. Parameter is templated on the type of the member * variable and the type of the InterfacedBase class, and is derived * from the InterfaceBase class via ParameterTBase (which is templated * only on the type of the member variable) and ParameterBase. * * For each InterfacedBase class exactly one static Parameter object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ class ParameterBase: public InterfaceBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. */ ParameterBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe, bool readonly, int limits) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly), limit(limits) {} /** * The destructor. */ virtual ~ParameterBase(); /** * The general interface method overriding the one in * InterfaceBase. For this class, \a action can be any of "set", * "get", "min", "max", "def" and "setdef" and \a argument should be * a something which can be read into a variable through a * stringstream with the standard '>>' operator. */ virtual string exec(InterfacedBase & ib, string action, string arguments) const; /** * Return a complete description of this parameter. */ virtual string fullDescription(const InterfacedBase & ib) const; /** * Set the member variable of \a ib to \a val. */ virtual void set(InterfacedBase & ib, string) const = 0; /** * Return the minimum value allowed for the member variable of \a ib. */ virtual string minimum(const InterfacedBase & ib) const = 0; /** * Return the maximum value allowed for the member variable of \a ib. */ virtual string maximum(const InterfacedBase & ib) const = 0; /** * Return the value of the member variable of \a ib. */ virtual string get(const InterfacedBase & ib) const = 0; /** * Return the default value for the member variable of \a ib. */ virtual string def(const InterfacedBase & ib) const = 0; /** * Set the member variable of \a ib to its default value. */ virtual void setDef(InterfacedBase & ib) const = 0; /** * True if there the variable is limited from above and below. */ bool limited() const { return limit != Interface::nolimits; } /** * True if there the variable is limited from abovew. */ bool upperLimit() const { return limit == Interface::limited || limit == Interface::upperlim; } /** * True if there the variable is limited from below. */ bool lowerLimit() const { return limit == Interface::limited || limit == Interface::lowerlim; } /** * Set flag indicating that there are limits associated with the * variable. */ void setLimited() { limit = Interface::limited; } /** * Set flag indicating that there are no limits associated with the * variable. */ void setUnlimited() { limit = Interface::nolimits; } private: /** * Determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. */ int limit; }; /** * The Parameter and its base classes ParameterTBase and ParameterBase * defines an interface to a class derived from the InterfacedBase, * through which simple member variables can be * manuipulated. Parameter is templated on the type of the member * variable and the type of the InterfacedBase class, and is derived * from the InterfaceBase class via ParameterTBase (which is templated * only on the type of the member variable) and ParameterBase. * * For each InterfacedBase class exactly one static Parameter object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ template class ParameterTBase: public ParameterBase { public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. */ ParameterTBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, Type newUnit, bool depSafe, bool readonly, int limits) : ParameterBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly, limits), theUnit(newUnit) {} /** * Destructor. */ virtual ~ParameterTBase() {} /** * Return a code for the type of this parameter. */ virtual string type() const; private: /// Implementation of set() for standard types. void setImpl (InterfacedBase & i, string newValue, StandardT) const; /// Implementation of set() for dimensioned types. void setImpl (InterfacedBase & i, string newValue, DimensionT) const; public: /** * Set the member variables of \a ib to \a val. Uses a stringstream * to read the \a val into a Type object and then calls * tset(InterfacedBase &, Type). */ virtual void set(InterfacedBase & ib, string newValue) const; /** * Set the member variables of \a ib to \a val. */ virtual void tset(InterfacedBase & ib, Type) const = 0; /** * Return the value of the member variable of \a ib. Calls * tget(const InterfacedBase &) and converts the returned value with * an ostringstream. */ virtual string get(const InterfacedBase & ib) const ; /** * Return the value of the member variable of \a ib. */ virtual Type tget(const InterfacedBase & ib) const = 0; /** * Return the minimum value allowed for the member variable of \a * ib. Calls tmimimum(const InterfacedBase &) and converts the * returned value with an ostringstream. */ virtual string minimum(const InterfacedBase & ib) const ; /** * Return the minimum value allowed for the member variable of \a * ib. */ virtual Type tminimum(const InterfacedBase & ib) const = 0; /** * Return the maximum value allowed for the member variable of \a * ib. Calls tmaximum(const InterfacedBase &) and converts the * returned value with an ostringstream. */ virtual string maximum(const InterfacedBase & ib) const ; /** * Return the maximum value allowed for the member variable of * \a ib. */ virtual Type tmaximum(const InterfacedBase & ib) const = 0; /** * Return the default value for the member variables of \a ib. Calls * tdef(const InterfacedBase &) and converts the returned value with * an ostringstream. */ virtual string def(const InterfacedBase & ib) const ; /** * Return the default value for the member variables of \a ib. */ virtual Type tdef(const InterfacedBase &ib) const = 0; /** * set the member variable of \a ib to its default value. */ virtual void setDef(InterfacedBase & ib) const { tset(ib, tdef(ib)); } /** * Get the unit which an Type object is divided (multiplied) by when * written to (read from) a stream via a double. If unit() is zero, * the Type object is written/read directly. */ Type unit() const { return theUnit; } /** * Set the unit which an Type object is divided (multiplied) by when * written to (read from) a stream via a double. If unit() is zero, * the Type object is written/read directly. */ void unit(Type u) { theUnit = u; } /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const; protected: /** * Write a number to a stream with the unit specified with unit(). */ void putUnit(ostream & os, Type val) const { putUnitImpl(os, val, unit(), typename TypeTraits::DimType()); } private: /** * The unit which an Type object is divided (multiplied) by * when written to (read from) a stream via a double. If unit() is * zero, the Type object is written/read directly. */ Type theUnit; }; /** * The Parameter and its base classes ParameterTBase and ParameterBase * defines an interface to a class derived from the InterfacedBase, * through which simple member variables can be * manuipulated. Parameter is templated on the type of the member * variable and the type of the InterfacedBase class, and is derived * from the InterfaceBase class via ParameterTBase (which is templated * only on the type of the member variable) and ParameterBase. * * For each InterfacedBase class exactly one static Parameter object * should created for each member variable which should be * interfaced. This object will automatically register itself with the * BaseRepository class. * * @see InterfacedBase * @see InterfaceBase * */ template class Parameter: public ParameterTBase { public: /** * The declaration of member functions which can be used by this * Switch interface for the 'set' action. */ typedef void (T::*SetFn)(Type); /** * The declaration of member functions which can be used by this * Switch interface for the 'get', 'def', 'min' and 'max' actions. */ typedef Type (T::*GetFn)() const; /** * Declaration of a direct pointer to the member variable. */ typedef Type T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newDef the default value for the member variable. * * @param newMin the minimum value for the member variable. * * @param newMax the maximum value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and below. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newMinFn optional pointer to the member function for the * 'min' action. * * @param newMaxFn optional pointer to the member function for the * 'max' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Parameter(string newName, string newDescription, Member newMember, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, bool limits = true, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newMinFn = 0, GetFn newMaxFn = 0, GetFn newDefFn = 0) : ParameterTBase(newName, newDescription, ClassTraits::className(), typeid(T), Type(), depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param newDef the default value for the member variable. * * @param newMin the minimum value for the member variable. * * @param newMax the maximum value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and below. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newMinFn optional pointer to the member function for the * 'min' action. * * @param newMaxFn optional pointer to the member function for the * 'max' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Parameter(string newName, string newDescription, Member newMember, Type newUnit, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, bool limits = true, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newMinFn = 0, GetFn newMaxFn = 0, GetFn newDefFn = 0) : ParameterTBase(newName, newDescription, ClassTraits::className(), typeid(T), newUnit, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newDef the default value for the member variable. * * @param newMin the minimum value for the member variable. * * @param newMax the maximum value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newMinFn optional pointer to the member function for the * 'min' action. * * @param newMaxFn optional pointer to the member function for the * 'max' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Parameter(string newName, string newDescription, Member newMember, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, int limits = Interface::limited, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newMinFn = 0, GetFn newMaxFn = 0, GetFn newDefFn = 0) : ParameterTBase(newName, newDescription, ClassTraits::className(), typeid(T), Type(), depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn) {} /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newUnit the unit assumed when a number is read or written * to a stream. * * @param newDef the default value for the member variable. * * @param newMin the minimum value for the member variable. * * @param newMax the maximum value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param limits determines if the values of the parameters are * limited from above and/or below. The possible values are given by * Interface::Limits. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newMinFn optional pointer to the member function for the * 'min' action. * * @param newMaxFn optional pointer to the member function for the * 'max' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Parameter(string newName, string newDescription, Member newMember, Type newUnit, Type newDef, Type newMin, Type newMax, bool depSafe = false, bool readonly = false, int limits = Interface::limited, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newMinFn = 0, GetFn newMaxFn = 0, GetFn newDefFn = 0) : ParameterTBase(newName, newDescription, ClassTraits::className(), typeid(T), newUnit, depSafe, readonly, limits), theMember(newMember), theDef(newDef), theMin(newMin), theMax(newMax), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn), theMinFn(newMinFn), theMaxFn(newMaxFn) {} /** * Default dtor. */ virtual ~Parameter() {} /** * Set the member variable of \a ib to \a val. */ virtual void tset(InterfacedBase & ib, Type val) const; /** * Return the value of the member variable of ib. */ virtual Type tget(const InterfacedBase & ib) const; /** * Return the minimum value allowed for the member variable of \a ib. */ virtual Type tminimum(const InterfacedBase & ib) const ; /** * Return the miaximum value allowed for the member variable of \a ib. */ virtual Type tmaximum(const InterfacedBase & ib) const ; /** * Return the default value for the member variable of \a ib. */ virtual Type tdef(const InterfacedBase & ib) const ; /** * Give a pointer to a member function to be used by tset(). */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by tget(). */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by tdef(). */ void setDefaultFunction(GetFn df) { theDefFn = df; } /** * Give a pointer to a member function to be used by tminimum(). */ void setMinFunction(GetFn mf) { theMinFn = mf; } /** * Give a pointer to a member function to be used by tmaximum(). */ void setMaxFunction(GetFn mf) { theMaxFn = mf; } /** * Print a description to be included in the Doxygen documentation * to the given \a stream. */ virtual void doxygenDescription(ostream & stream) const; private: /** * The pointer to the member variable. */ Member theMember; /** * Default value to be used if no corresponding member function * pointer is given. */ Type theDef; /** * Minimum value to be used if no corresponding member function * pointer is given. */ Type theMin; /** * Maximum value to be used if no corresponding member function * pointer is given. */ Type theMax; /** * A pointer to a member function to be used by tset(). */ SetFn theSetFn; /** * Pointer to member function to be used by tget(). */ GetFn theGetFn; /** * Pointer to member function to be used by tdef(). */ GetFn theDefFn; /** * Pointer to member function to be used by tminimum(). */ GetFn theMinFn; /** * Pointer to member function to be used by tmaximum(). */ GetFn theMaxFn; }; /** * This is a specialization of ParameterTBase for the string case. * * @see ParameterTBase * */ template <> class ParameterTBase: public ParameterBase { public: /** * Enumerated variables to determine of a string parameter * corresponds to a file or a directory. */ enum FileType { NoFile, /**< Neither file nor directory. */ File, /**< The parameter corresponds to a file. */ Directory /**< The parameter corresponds to a directory. */ }; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newClassName the name of the corresponding class. * * @param newTypeInfo the type_info object of the corresponding * class. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. */ ParameterTBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe, bool readonly) : ParameterBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly, false), isFileType(NoFile) { hasDefault = false; } /** * Destructor. */ virtual ~ParameterTBase() {} /** * Return a code for the type of this parameter. */ virtual string type() const { switch ( file() ) { case File: return "PF"; case Directory: return "PD"; default: return "Ps"; } } /** * Indicate that this parameter corresponds to a file. */ void fileType() { file(File); } /** * Indicate that this parameter corresponds to a directory. */ void directoryType() { file(Directory); } /** * Indicate if this parameter corresponds to a file or directory. */ void file(FileType t) { isFileType = t; } /** * See if this parameter corresponds to a file or directory. */ FileType file() const { return isFileType; } /** * Set the member variables of \a ib to \a val. Uses a stringstream * to read the \a val into a Type object and then calls * tset(InterfacedBase &, Type). */ virtual void set(InterfacedBase & ib, string newValue) const { tset(ib, StringUtils::stripws(newValue)); } /** * Set the member variables of \a ib to \a val. */ virtual void tset(InterfacedBase & ib, string) const = 0; /** * Return the value of the member variable of \a ib. Calls * tget(const InterfacedBase &) and converts the returned value with * an ostringstream. */ virtual string get(const InterfacedBase & ib) const { return tget(ib); } /** * Return the value of the member variable of \a ib. */ virtual string tget(const InterfacedBase & ib) const = 0; /** * Return the minimum value allowed for the member variable of \a * ib. Not relevant for strings. Returns the empty string. */ virtual string minimum(const InterfacedBase &) const { return ""; } /** * Return the maximum value allowed for the member variable of \a * ib. Not relevant for strings. Returns the empty string. */ virtual string maximum(const InterfacedBase &) const { return ""; } /** * Return the default value for the member variables of \a ib. Calls * tdef(const InterfacedBase &) and converts the returned value with * an ostringstream. */ virtual string def(const InterfacedBase & ib) const { return tdef(ib); } /** * Return the default value for the member variables of \a ib. */ virtual string tdef(const InterfacedBase &ib) const = 0; /** * set the member variable of \a ib to its default value. */ virtual void setDef(InterfacedBase & i) const { tset(i, tdef(i)); } /** * Return a string describing the type of interface to be included * in the Doxygen documentation. */ virtual string doxygenType() const { return "Character string parameter"; } private: /** * Indicates if this parameter corresponds to a file or directory. */ FileType isFileType; }; /** * This is a partial specialization of Parameter for the string case. * * @see Parameter * */ template class Parameter: public ParameterTBase { public: /** * The declaration of member functions which can be used by this * Switch interface for the 'set' action. */ typedef void (T::*SetFn)(string); /** * The declaration of member functions which can be used by this * Switch interface for the 'get', 'def', 'min' and 'max' actions. */ typedef string (T::*GetFn)() const; /** * Declaration of a direct pointer to the member variable. */ typedef string T::* Member; public: /** * Standard constructor. * * @param newName the name of the interface, may only contain * letters [a-zA-z0-9_]. * * @param newDescription a brief description of the interface. * * @param newMember a pointer to the member variable. May be null if * corresponding set/get functions are provided. * * @param newDef the default value for the member variable. * * @param depSafe set to true if calls to this interface for one * object does not influence other objects. * * @param readonly if this is set true the interface will not be * able to manipulate objects of the corresponding class, but will * still be able to access information. * * @param newSetFn optional pointer to the member function for the * 'set' action. * * @param newGetFn optional pointer to the member function for the * 'get' action. * * @param newDefFn optional pointer to the member function for the * 'def' action. */ Parameter(string newName, string newDescription, Member newMember, string newDef, bool depSafe = false, bool readonly = false, SetFn newSetFn = 0, GetFn newGetFn = 0, GetFn newDefFn = 0) : ParameterTBase(newName, newDescription, ClassTraits::className(), typeid(T), depSafe, readonly), theMember(newMember), theDef(newDef), theSetFn(newSetFn), theGetFn(newGetFn), theDefFn(newDefFn) {} /** * Default dtor. */ virtual ~Parameter() {} /** * Set the member variable of \a ib to \a val. */ virtual void tset(InterfacedBase & ib, string val) const; /** * Return the value of the member variable of ib. */ virtual string tget(const InterfacedBase & ib) const ; /** * Return the default value for the member variable of \a ib. */ virtual string tdef(const InterfacedBase & ib) const ; /** * Give a pointer to a member function to be used by tset(). */ void setSetFunction(SetFn sf) { theSetFn = sf; } /** * Give a pointer to a member function to be used by tget(). */ void setGetFunction(GetFn gf) { theGetFn = gf; } /** * Give a pointer to a member function to be used by tdef(). */ void setDefaultFunction(GetFn df) { theDefFn = df; } /** * Print a description to be included in the Doxygen documentation * to the given \a stream. */ virtual void doxygenDescription(ostream & stream) const; private: /** * The pointer to the member variable. */ Member theMember; /** * Default, minimum and maximum values to be used if no * corresponding member function pointers are given. */ string theDef; /** * A pointer to a member function to be used by tset(). */ SetFn theSetFn; /** * Pointer to member function to be used by tget(). */ GetFn theGetFn; /** * Pointer to member function to be used by tdef(). */ GetFn theDefFn; }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Parameter.tcc" #endif #endif /* ThePEG_Parameter_H */ thepeg-1.8.0.orig/Interface/Parameter.cc0000644000175000017500000000426111747772425016301 0ustar sunsun// -*- C++ -*- // // Parameter.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ParameterBase class. // #include "InterfacedBase.h" #include "Parameter.h" #include "Parameter.xh" namespace ThePEG { ParameterBase::~ParameterBase() {} string ParameterBase::exec(InterfacedBase & i, string action, string arguments) const { if ( action == "get" ) { return get(i); } else if ( action == "min" ) { return minimum(i); } else if ( action == "max" ) { return maximum(i); } else if ( action == "def" ) { return def(i); } else if ( action == "setdef" ) { if ( objectDefaults(i).find(name()) == objectDefaults(i).end() ) setDef(i); else set(i, objectDefaults(i)[name()]); } else if ( action == "set" || action == "newdef" ) { set(i, arguments); if ( action == "newdef" ) objectDefaults(i)[name()] = get(i); } else if ( action == "notdef" ) { string deflt = def(i); if ( objectDefaults(i).find(name()) != objectDefaults(i).end() ) deflt = objectDefaults(i)[name()]; else if ( !hasDefault ) return ""; if ( deflt != get(i) ) return get(i) + " (" + deflt + ")"; } else throw InterExUnknown(*this, i); return ""; } string ParameterBase::fullDescription(const InterfacedBase & ib) const { string min = minimum(ib); if ( min.empty() ) min = "-inf"; string max = maximum(ib); if ( max.empty() ) max = "inf"; return InterfaceBase::fullDescription(ib) + get(ib) + '\n' + min + '\n' + def(ib) + '\n' + max + '\n'; } ParExGetUnknown::ParExGetUnknown(const InterfaceBase & i, const InterfacedBase & o, const char * s) { theMessage << "Could not get the " << s << " value of parameter \"" << i.name() << "\" for the object \"" << o.name() << "\" because the get function threw an unknown exception."; severity(setuperror); } } #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Parameter.tcc" #endif thepeg-1.8.0.orig/Interface/InterfaceBase.cc0000644000175000017500000000747611754473543017064 0ustar sunsun// -*- C++ -*- // // InterfaceBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the InterfaceBase class. // #include "InterfaceBase.h" #include "InterfacedBase.h" #include "ThePEG/Repository/BaseRepository.h" namespace ThePEG { InterfaceBase::InterfaceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, bool depSafe, bool readonly) : Named(newName), theDescription(newDescription), theClassName(newClassName), theRank(-1.0), hasDefault(true), isDependencySafe(depSafe), isReadOnly(readonly) { BaseRepository::Register(*this, newTypeInfo); } string InterfaceBase::tag(int pos) const { if ( pos == -1 ) return name(); ostringstream os; os << name() << "[" << pos << "]"; return os.str(); } bool InterfaceBase::notDefault(InterfacedBase & ib) const { return exec(ib, "notdef", "") != "" ; } map & InterfaceBase::objectDefaults(InterfacedBase & ib) const { return ib.objectDefaults; } string InterfaceBase::fullDescription(const InterfacedBase &) const { return type() + '\n' + name() + '\n' + description() + ( readOnly()? "\n-*-readonly-*-\n": "\n-*-mutable-*-\n" ); } void InterfaceBase::doxygenDescription(ostream & os) const { os << "\n
Name: " << name() << "
\n" << "Type: " << doxygenType(); if ( readOnly() ) os << " (read-only)"; os << "
\n" << "\\par Description:\n" << description() << "
\n"; } bool InterfaceBase::NoReadOnly = false; InterExClass::InterExClass(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not access the interface \"" << i.name() << "\" of the object \"" << o.name() << "\" because the object " << "is not of the required class (" << i.className() << ")."; severity(setuperror); } InterExSetup::InterExSetup(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not access the interface \"" << i.name() << "\" for the object \"" << o.name() << "\" since no get/set member function or variable was found."; severity(setuperror); } InterExUnknown::InterExUnknown(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not perform action on the interface \"" << i.name() << "\" for the object \"" << o.name() << "\" because the requested action was not recognized"; severity(setuperror); } InterExReadOnly::InterExReadOnly(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not perform action on the interface \"" << i.name() << "\" for the object \"" << o.name() << "\" because this interface is read-only."; severity(setuperror); } InterExNoNull::InterExNoNull(const InterfaceBase & i, const InterfacedBase & o) { theMessage << "Could not set reference \"" << i.name() << "\" for the object \"" << o.name() << "\" to because null pointers are explicitly " << "disallowed."; severity(setuperror); } RefInterfaceBase:: RefInterfaceBase(string newName, string newDescription, string newClassName, const type_info & newTypeInfo, string newRefClassName, const type_info & newRefTypeInfo, bool depSafe, bool readonly, bool norebind, bool nullable, bool defnull) : InterfaceBase(newName, newDescription, newClassName, newTypeInfo, depSafe, readonly), theRefClassName(newRefClassName), theRefTypeInfo(newRefTypeInfo), dontRebind(norebind), isNullable(nullable), theDefaultIfNull(defnull) { hasDefault = false; } } thepeg-1.8.0.orig/Interface/Makefile.am0000644000175000017500000000167611747772425016115 0ustar sunsunmySOURCES = InterfaceBase.cc InterfacedBase.cc Interfaced.cc ParVector.cc \ Parameter.cc RefVector.cc Reference.cc Switch.cc Command.cc \ ClassDocumentation.cc Deleted.cc DOCFILES = Command.h InterfaceBase.h Interfaced.h InterfacedBase.h ParVector.h \ Parameter.h RefVector.h Reference.h Switch.h ClassDocumentation.h \ Interface.h INCLUDEFILES = $(DOCFILES) Command.fh Command.tcc \ Command.xh InterfaceBase.fh InterfaceBase.xh \ InterfacedBase.xh ParVector.fh \ ParVector.tcc ParVector.xh Parameter.fh \ Parameter.tcc Parameter.xh RefVector.fh \ RefVector.tcc RefVector.xh Reference.fh \ Reference.tcc Reference.xh Switch.fh \ Switch.tcc Switch.xh ClassDocumentation.fh Deleted.h noinst_LTLIBRARIES = libThePEGInter.la libThePEGInter_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Interface/ParVector.tcc0000644000175000017500000002535311747772425016457 0ustar sunsun// -*- C++ -*- // // ParVector.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the ParVector and ParVectorTBase classes. // #include "ParVector.xh" namespace ThePEG { template string ParVectorTBase::type() const { if ( std::numeric_limits::is_integer ) return "Vi"; if ( typeid(Type) == typeid(string) ) return "Vs"; return "Vf"; } template string ParVectorTBase::doxygenType() const { ostringstream os; if ( size() <= 0 ) os << "Varying size "; else os << "Fixed size (" << size() << ") "; os << "vector of "; string lim = ""; if ( !limited() ) lim = " unlimited"; if ( std::numeric_limits::is_integer ) os << lim << "integer "; else if ( typeid(Type) == typeid(string) ) os << "string "; else os << lim; os << "parameters"; return os.str(); } template string ParVectorTBase::fullDescription(const InterfacedBase & ib) const { return ParVectorBase::fullDescription(ib) + def() + "\n"; } template void ParVectorTBase::setDef(InterfacedBase & i, int place) const { if ( place >= 0 ) tset(i, tdef(i, place), place); int sz = get(i).size(); for ( int j = 0; j < sz; ++j ) tset(i, tdef(i, j), j); } template inline void ParVectorTBase:: setImpl(InterfacedBase & i, string newValue, int place, StandardT) const { istringstream is(newValue); if ( unit() > Type() ) { double t; is >> t; tset(i, Type(t*unit()), place); } else { Type t = Type(); is >> t; tset(i, t, place); } } template inline void ParVectorTBase:: setImpl(InterfacedBase & i, string newValue, int place, DimensionT) const { istringstream is(newValue); double t; is >> t; tset(i, t*unit(), place); } template void ParVectorTBase:: set(InterfacedBase & i, string newValue, int place) const { setImpl(i, newValue, place, typename TypeTraits::DimType()); } template inline void ParVectorTBase:: insertImpl(InterfacedBase & i, string newValue, int place, StandardT) const { istringstream is(newValue); if ( unit() > Type() ) { double t; is >> t; tinsert(i, Type(t*unit()), place); } else { Type t = Type(); is >> t; tinsert(i, t, place); } } template inline void ParVectorTBase:: insertImpl(InterfacedBase & i, string newValue, int place, DimensionT) const { istringstream is(newValue); double t; is >> t; tinsert(i, t*unit(), place); } template void ParVectorTBase:: insert(InterfacedBase & i, string newValue, int place) const { insertImpl(i, newValue, place, typename TypeTraits::DimType()); } template typename ParVectorTBase::StringVector ParVectorTBase:: get(const InterfacedBase & i) const { TypeVector tres = tget(i); StringVector res; for ( typename TypeVector::iterator it = tres.begin(); it != tres.end(); ++it ) { ostringstream os; putUnit(os, *it); res.push_back(os.str()); } return res; } template string ParVectorTBase:: minimum(const InterfacedBase & i, int place) const { ostringstream os; putUnit(os, tminimum(i,place)); return os.str(); } template string ParVectorTBase:: maximum(const InterfacedBase & i, int place) const { ostringstream os; putUnit(os, tmaximum(i, place)); return os.str(); } template string ParVectorTBase:: def(const InterfacedBase & i, int place) const { ostringstream os; putUnit(os, tdef(i,place)); return os.str(); } template string ParVectorTBase::def() const { ostringstream os; putUnit(os, tdef()); return os.str(); } template Type ParVector::tdef() const { return theDef; } template void ParVector::tset(InterfacedBase & i, Type newValue, int place) const { if ( InterfaceBase::readOnly() ) throw InterExReadOnly(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( ( ParVectorBase::lowerLimit() && newValue < tminimum(*t, place) ) || ( ParVectorBase::upperLimit() && newValue > tmaximum(*t, place) ) ) throw ParVExLimit(*this, i, newValue); TypeVector oldVector = tget(i); if ( theSetFn ) { try { (t->*theSetFn)(newValue, place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExUnknown(*this, i, newValue, place, "set"); } } else { if ( !theMember ) throw InterExSetup(*this, i); if ( place < 0 || unsigned(place) >= (t->*theMember).size() ) throw ParVExIndex(*this, i, place); (t->*theMember)[place] = newValue; } if ( !InterfaceBase::dependencySafe() && oldVector != tget(i) ) i.touch(); } template void ParVector:: tinsert(InterfacedBase & i, Type newValue, int place) const { if ( InterfaceBase::readOnly() ) throw InterExReadOnly(*this, i); if ( ParVectorBase::size() > 0 ) throw ParVExFixed(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( ( ParVectorBase::lowerLimit() && newValue < tminimum(*t, place) ) || ( ParVectorBase::upperLimit() && newValue > tmaximum(*t, place) ) ) throw ParVExLimit(*this, i, newValue); TypeVector oldVector = tget(i); if ( theInsFn ) { try { (t->*theInsFn)(newValue, place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExUnknown(*this, i, newValue, place, "insert"); } } else { if ( !theMember ) throw InterExSetup(*this, i); if ( place < 0 || unsigned(place) > (t->*theMember).size() ) throw ParVExIndex(*this, i, place); (t->*theMember).insert((t->*theMember).begin()+place, newValue); } if ( !InterfaceBase::dependencySafe() && oldVector != tget(i) ) i.touch(); } template void ParVector:: erase(InterfacedBase & i, int place) const { if ( InterfaceBase::readOnly() ) throw InterExReadOnly(*this, i); if ( ParVectorBase::size() > 0 ) throw ParVExFixed(*this, i); T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); TypeVector oldVector = tget(i); if ( theDelFn ) { try { (t->*theDelFn)(place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExDelUnknown(*this, i, place); } } else { if ( !theMember ) throw InterExSetup(*this, i); if ( place < 0 || unsigned(place) >= (t->*theMember).size() ) throw ParVExIndex(*this, i, place); (t->*theMember).erase((t->*theMember).begin()+place); } if ( !InterfaceBase::dependencySafe() && oldVector != tget(i) ) i.touch(); } template typename ParVector::TypeVector ParVector:: tget(const InterfacedBase & i) const { const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); if ( theGetFn ) { try { return (t->*theGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExGetUnknown(*this, i, "current"); } } if ( theMember ) return t->*theMember; throw InterExSetup(*this, i); } template typename ParVector::StringVector ParVector:: get(const InterfacedBase & i) const { if ( !theStringGetFn ) return ParVectorTBase::get(i); const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theStringGetFn)(); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExGetUnknown(*this, i, "current"); } } template Type ParVector::tdef(const InterfacedBase & i, int place) const { if ( place < 0 || !theDefFn ) return theMin; const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theDefFn)(place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExGetUnknown(*this, i, "default"); } } template Type ParVector::tminimum(const InterfacedBase & i, int place) const { if ( place < 0 || !theMinFn ) return theMin; const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theMinFn)(place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExGetUnknown(*this, i, "minimum"); } } template Type ParVector::tmaximum(const InterfacedBase & i, int place) const { if ( place < 0 || !theMaxFn ) return theMax; const T * t = dynamic_cast(&i); if ( !t ) throw InterExClass(*this, i); try { return (t->*theMaxFn)(place); } catch (InterfaceException & e) { throw e; } catch ( ... ) { throw ParVExGetUnknown(*this, i, "maximum"); } } template void ParVector::doxygenDescription(ostream & os) const { ParVectorTBase::doxygenDescription(os); os << "Default value: "; this->putUnit(os, theDef); if ( theDefFn ) os << " (May be changed by member function.)"; if ( ParVectorBase::lowerLimit() ) { os << "
\nMinimum value: "; this->putUnit(os, theMin); if ( theMinFn ) os << " (May be changed by member function.)"; } if ( ParVectorBase::upperLimit() ) { os << "
\nMaximum value: "; this->putUnit(os, theMax); if ( theMaxFn ) os << " (May be changed by member function.)"; } os << "
\n"; } namespace { template inline void ostreamInsert2(ostream & os, T v, DimensionT) { os << ounit(v,T::baseunit()); } template inline void ostreamInsert2(ostream & os, T v, StandardT) { os << v; } } template ParVExLimit::ParVExLimit(const InterfaceBase & i, const InterfacedBase & o, T v) { theMessage << "Could not set/insert "; ostreamInsert2(theMessage,v,typename TypeTraits::DimType() ); theMessage << " in the parameter vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the value is outside the specified limits."; severity(setuperror); } template ParVExUnknown::ParVExUnknown(const InterfaceBase & i, const InterfacedBase & o, T v, int j, const char * s) { theMessage << "Could not " << s << " the value "; ostreamInsert2(theMessage,v,typename TypeTraits::DimType() ); theMessage << " at position " << j << " in the parameter vector \"" << i.name() << "\" for the object \"" << o.name() << "\" because the " << s << " function threw an unknown exception."; severity(setuperror); } } thepeg-1.8.0.orig/EventRecord/0000755000175000017500000000000011756460367014366 5ustar sunsunthepeg-1.8.0.orig/EventRecord/Step.tcc0000644000175000017500000001013411747772425015774 0ustar sunsun// -*- C++ -*- // // Step.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Step class. // namespace ThePEG { template void Step::select(OutputIterator r, const SelectorBase & s) const { if ( s.finalState() ) copyIfCheck(r, particles(), s); if ( s.intermediate() ) copyIfCheck(r, intermediates(), s); } template void Step::addParticles(Iterator first, Iterator last) { theParticles.insert(first, last); allParticles.insert(first, last); if ( collision() ) collision()->addParticles(first, last); for ( ; first != last; ++first ) if ( !(**first).birthStep() ) (**first).rep().theBirthStep = this; } template void Step::addIntermediates(Iterator first, Iterator last) { theIntermediates.insert(first, last); allParticles.insert(first, last); if ( collision() ) collision()->addParticles(first, last); for ( ; first != last; ++first ) { if ( !(**first).birthStep() ) (**first).rep().theBirthStep = this; ParticleSet::iterator pit = theParticles.find(*first); if ( pit != theParticles.end() ) theParticles.erase(pit); } } template bool Step:: addDecayProduct(Iterator firstParent, Iterator lastParent, tPPtr child, bool checkfinal) { if ( !collision() ) return false; if ( collision()->finalStep() != this ) return false; if ( checkfinal ) { for ( Iterator it = firstParent; it != lastParent; ++it ) { tPPtr parent = const_ptr_cast((**it).final()); if ( member(theParticles, parent) ) continue; if ( parent->children().empty() || !member(theParticles, parent->children()[0]) ) return false; } } for ( Iterator it = firstParent; it != lastParent; ++it ) { tPPtr parent = const_ptr_cast((**it).final()); ParticleSet::iterator pit = theParticles.find(parent); if ( pit != theParticles.end() ) { theParticles.erase(pit); if ( parent->birthStep() == this ) theIntermediates.insert(parent); } parent->rep().theChildren.push_back(child); child->rep().theParents.push_back(parent); } child->rep().theBirthStep = this; addParticle(child); return true; } template bool Step::addDecayProduct(PIterator firstParent, PIterator lastParent, CIterator firstChild, CIterator lastChild) { if ( !collision() ) return false; if ( collision()->finalStep() != this ) return false; for ( PIterator it = firstParent; it != lastParent; ++it ) { tPPtr parent = const_ptr_cast((**it).final()); if ( member(theParticles, parent) ) continue; if ( parent->children().empty() || !member(theParticles, parent->children()[0]) ) return false; } for ( PIterator it = firstParent; it != lastParent; ++it ) { tPPtr parent = const_ptr_cast((**it).final()); ParticleSet::iterator pit = theParticles.find(parent); if ( pit != theParticles.end() ) { theParticles.erase(pit); if ( parent->birthStep() == this ) theIntermediates.insert(parent); } for ( CIterator cit = firstChild; cit != lastChild; ++cit ) { parent->rep().theChildren.push_back(*cit); (**cit).rep().theParents.push_back(parent); } } for ( CIterator cit = firstChild; cit != lastChild; ++cit ) { (**cit).rep().theBirthStep = this; addParticle(*cit); } return true; } template tParticleSet Step::getCurrent(Iterator first, Iterator last) const { tParticleSet res; for ( Iterator i = first; i != last; ++i ) addIfFinal(inserter(res), *i); return res; } template void Step::addIfFinal(Inserter o, PPointer p) { if ( member(theParticles, p) ) *o++ = p; else if ( p->next() ) addIfFinal(o, p->next()); else for ( int i = 0, N = p->children().size(); i < N; ++i ) addIfFinal(o, p->children()[i]); } } thepeg-1.8.0.orig/EventRecord/Event.h0000644000175000017500000002726111747772425015631 0ustar sunsun// -*- C++ -*- // // Event.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Event_H #define ThePEG_Event_H // This is the decalaration of the Event class. #include "Particle.h" #include "StandardSelectors.h" #include "SubProcess.h" #include "ThePEG/Utilities/Named.h" namespace ThePEG { /** * The Event class contains all Particles produced in the generation * of an event. The particles are divided into Collisions * corresponding to the actiual collisions between incoming particles * in a bunch crossing. * * Event inherits from the Named which holds the name of an event. * * @see Collision * @see Step * @see SubProcess * @see Particle * @see SelectorBase * @see Named * */ class Event : public EventRecordBase, public Named { public: /** * EventHandler is a friend of most Event classes. */ friend class EventHandler; /** Most of the Event classes are friends with each other. */ friend class Collision; /** Map colour lines to indices. */ typedef map ColourLineMap; public: /** * The standard constructor for an Event takes as arguments a pair * of colliding particles (corresponding to the primary collision in * case of multiple collisions in an event). Optionally a pointer to * the EventHandler which performed the generation, an event name * and event number can be given. * @param newIncoming a pair of incoming particles to the prinary Collision. * @param newHandler the handler object in charge of the generation * of this Event. * @param newName the name of this event. * @param newNumber the number of this event. * @param weight the weight of this event */ Event(const PPair & newIncoming, tcEventBasePtr newHandler = tcEventBasePtr(), string newName = "", long newNumber = -1, double weight = 1.0); /** * The copy constructor. */ Event(const Event&); /** * The destructor. */ ~Event(); /** * Returns a full clone of this Event. All collisions, * Particles etc. in this Event are cloned. */ EventPtr clone() const; public: /** * Return a pointer to the EventHandler which produced this * Event. May be the null pointer. */ tcEventBasePtr handler() const { return theHandler; } /** @name Functions for accessing particles etc. */ //@{ /** * Extract particles from this event which satisfies the * requirements given by an object of the SelectorBase class. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. * @param s SelectorBase object defining which particles should be * extracted. */ template void select(OutputIterator r, const SelectorBase & s) const; /** * Extract all final state particles in this Event. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. */ template void selectFinalState(OutputIterator r) const { select(r, SelectFinalState()); } /** * Extract all final state particles in this Event. * @param c a container where the extracted (pointers to) particles * will be appended. */ template void getFinalState(Container & c) const { selectFinalState(inserter(c)); } /** * Extract all final state particles in this Event. * @return a vector of pointers to the extracted particles. */ tPVector getFinalState() const { tPVector ret; selectFinalState(back_inserter(ret)); return ret; } /** * Return a pointer to the primary Collision in this Event. May * be the null pointer. */ tCollPtr primaryCollision() const { return collisions().empty() ? tCollPtr() : tCollPtr(collisions()[0]); } /** * Return a possibly empty list of collisions in this Event. */ const CollisionVector & collisions() const { return theCollisions; } /** * Return a pointer to the primary SubProcess in the prinmary * Collision in this Event. May be the null pointer. */ tSubProPtr primarySubProcess() const; /** * Return a reference to the pair of colliding particles in the * primary Collision of this Event. */ const PPair & incoming() const { return theIncoming; } //@} /** * Create a new Collision in this event and return a pointer to it. */ tCollPtr newCollision(); /** * Create a new Step in the current Collision, which is a copy of * the last Step (if any) and return a pointer to it. If no * collision exists, one will be added. */ tStepPtr newStep(); /** * Transform all particles in this Event. */ void transform(const LorentzRotation &); /** * Return the number assigned to this Event. The name is accessed * with the name() method of the Named base class. */ long number() const { return theNumber; } /** * Return the index of the given colour line. */ int colourLineIndex(tcColinePtr) const; /** @name Functions for removing entires from an Event. */ //@{ /** * Remove (recursively) the decay products from a given Particle and * add the particle to the list of final state particles. */ void removeDecay(tPPtr); /** * Remove the given Particle from the Collision. If this was the * last daughter of the mother Particle, the latter is added to the * list of final state particles. */ void removeParticle(tPPtr); /** * Remove all steps which have no new particles introduced in them. */ void cleanSteps(); //@} /** * Return the weight associated with this event. */ double weight() const { return theWeight; } /** * Return an optional named weight associated to this event. Returns * 0, if no weight identified by this name is present. */ double optionalWeight(const string& name) const; /** * Return the optional named weights associated to this event. */ const map& optionalWeights() const { return theOptionalWeights; } /** * Print this Event in Graphviz format on the standard output. */ void printGraphviz() const; /** * Set the weight associated with this event. */ void weight(double w) { theWeight = w; } /** * Set an optional named weight associated to this event. */ void optionalWeight(const string& name, double value); /** * Access the optional named weights associated to this event. */ map& optionalWeights() { return theOptionalWeights; } /** * Set event info. */ void setInfo(tcEventBasePtr newHandler, string newName, long newNumber, double weight); /** * Add a collision to this Event. */ void addCollision(tCollPtr c); /** * Set the primary collision in this Event. */ void primaryCollision(tCollPtr c); protected: /** * Add a range of particles to this Collision. */ template void addParticles(Iterator first, Iterator last) { while ( first != last ) addParticle(*first++); } /** * Add a particle to this Collision. */ void addParticle(tPPtr p); /** * Add a new SubProcess to this Event. For book keeping purposes * only. The sub-processes are accessed from the different * Collisions in this Event. */ void addSubProcess(tSubProPtr p) { if ( p ) allSubProcesses.insert(p); } /** * Remove a SubProcess from this Event. */ void removeSubProcess(tSubProPtr p) { allSubProcesses.erase(p); } /** * Add a new Step to this Collision. For book keeping purposes * only. The steps are accessed from the different Collisions in * this Event. */ void addStep(tStepPtr s) { if ( s ) allSteps.insert(s); } /** * Remove a given Particle entry. */ void removeEntry(tPPtr p); /** * Rebind to cloned objects. When an Event is cloned, a shallow * copy is done first, then all Particles etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned Event points to the cloned * Particles etc. */ void rebind(const EventTranslationMap & trans); public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard functions for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); private: /** * The pair of colliding particles. */ PPair theIncoming; /** * A vector of collisions in this Event. */ CollisionVector theCollisions; /** * A set of all particles in this Event. */ StepSet allSteps; /** * A set of all sub-processes in this Event. */ SubProcessSet allSubProcesses; /** * A set of all particles in this Event. */ ParticleSet allParticles; /** * A pointer to the EventHandler which performed the generation * of this Event. */ tcEventBasePtr theHandler; /** * Map of all registered colour lines to their index numbers. */ mutable ColourLineMap theColourLines; /** * The number assigned to this Event. */ long theNumber; /** * The weight associated with this event. */ double theWeight; /** * Optional named weights */ map theOptionalWeights; /** * Counter to keep track of particle numbering. */ long theParticleNumber; public: /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; private: /** * Describe concrete class with persistent data. */ static ClassDescription initEvent; /** * Private default constructor must only be used by the * PersistentIStream class via the ClassTraits class . */ Event() : theNumber(-1), theWeight(1.0), theParticleNumber(0) {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; /** * The assignment operator is private and not implemented. */ Event & operator=(const Event&); }; /** Output a Event to a standard ostream. */ ostream & operator<<(ostream &, const Event &); /** Print event tree in Graphviz format, ready for plotting. */ void printGraphviz(ostream &, tcEventPtr); /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base class of Event. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Collision. */ typedef EventRecordBase NthBase; }; /** This template specialization informs ThePEG about the name of * the Event class and how to create it. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Event"; } /** Create a Event object. */ static TPtr create() { return TPtr::Create(Event()); } }; /** @endcond */ } #include "Collision.h" inline ThePEG::tSubProPtr ThePEG::Event::primarySubProcess() const { return collisions().empty() ? ThePEG::tSubProPtr() : ThePEG::tSubProPtr(primaryCollision()->primarySubProcess()); } namespace ThePEG { template void Event::select(OutputIterator r, const SelectorBase & s) const { if ( s.allCollisions() ) { for ( CollisionVector::const_iterator it = theCollisions.begin(); it != theCollisions.end(); ++it ) (**it).select(r, s); } else { primaryCollision()->select(r, s); } } } #endif /* ThePEG_Event_H */ thepeg-1.8.0.orig/EventRecord/SubProcess.h0000644000175000017500000002077411747772425016642 0ustar sunsun// -*- C++ -*- // // SubProcess.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SubProcess_H #define ThePEG_SubProcess_H // This is the declaration of the SubProcess class. #include #include "ThePEG/EventRecord/Particle.h" namespace ThePEG { class SubProcessGroup; /** * A SubProcess object represents a hard \f$2\rightarrow n\f$ * sub-process in a collision. It carries information about the * incoming and outgoing particles, as well as possible intermediate * ones. It also has a pointer to the MEBase object which generated * the sub-process. * * @see Event * @see Particle * @see SubProcessGroup */ class SubProcess: public EventRecordBase { public: /** Most of the Event classes are friends with each other. */ friend class Step; /** Most of the Event classes are friends with each other. */ friend class Collision; /** Most of the Event classes are friends with each other. */ friend class SubProcessGroup; public: /** * Standard constructor. * @param newIncoming the two incoming partons. * @param newCollision the Collision to which this SubProcess belongs. * @param newHandler the MEBase object which generated this SubProcess. */ SubProcess(const PPair & newIncoming, tCollPtr newCollision = tCollPtr(), tcEventBasePtr newHandler = tcEventBasePtr(), tSubProPtr newHead = tSubProPtr(), double newGroupWeight = 1.0); /** * Destructor. */ virtual ~SubProcess(); /** * A pointer to the MEBase object which generated this SubProcess. */ tcEventBasePtr handler() const { return theHandler; } /** * A pointer to the collision to which this sub-process belongs. */ tCollPtr collision() const { return theCollision; } /** * The pair of incoming partons. */ const PPair & incoming() const { return theIncoming; } /** * A reference to the vector of intermediate partons. */ const ParticleVector & intermediates() const { return theIntermediates; } /** * A reference to the vector of outgoing particles. */ const ParticleVector & outgoing() const { return theOutgoing; } /** * Set the vector of outgoing particles. */ template void setOutgoing(InputIterator, InputIterator); /** * Add a particle to the list of outgoing ones. If \a fixrelations * is true the mother daughter pointers will be set to/from the * incoming partons. */ void addOutgoing(tPPtr p, bool fixrelations = true); /** * Change the incoming parton */ void changeIncoming(tPPtr pnew, tPPtr pold); /** * Set the vector of intermediate particles. */ template void setIntermediates(InputIterator, InputIterator); /** * Add a particle to the list of intermediate ones. If \a fixrelations * is true the mother daughter pointers will be set to/from the * incoming partons. */ void addIntermediate(tPPtr p, bool fixrelations = true); /** * Remove a particle entry from this sub-process. */ void removeEntry(tPPtr p); /** * Return a clone of this sub process. */ virtual SubProPtr clone() const; /** * True if a perturbative cascade has been applied to this sub * process. */ bool decayed() const { return isDecayed; } /** * Set to true if a perturbative cascade has been applied to this * sub process. */ void decayed(bool x) { isDecayed = x; } /** * Return the head SubProcess, if this SubProcess * object belongs to a SubProcessGroup. Return NULL * if head of a SubProcessGroup or not member of * a SubProcessGroup at all. */ tSubProPtr head() const { return theHead; } /** * Set the head SubProcess */ void head(tSubProPtr newHead) { theHead = newHead; } /** * If this SubProcess belongs to a SubProcessGroup, * return its relative weight w.r.t. the head's * weight. */ double groupWeight() const { return theGroupWeight; } /** * If this SubProcess belongs to a SubProcessGroup, * set its relative weight w.r.t. the head's * weight. */ void groupWeight(double w) { theGroupWeight = w; } protected: /** * Rebind to cloned objects. When a SubProcess is cloned, a shallow * copy is done first, then all Particles etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned SubProcess points to the cloned * Particles etc. */ virtual void rebind(const EventTranslationMap & trans); public: /** * Perform a LorentzTransformation of all particles in the sub * process. */ virtual void transform(const LorentzRotation &); /** * Return the value of the Mandelstam variable \f$\hat{s}\f$ in this * SubProcess. It is calculated using the incoming particles. */ Energy2 shat() const { return (incoming().first->momentum() + incoming().second->momentum()).m2(); } /** * Return the value of the Mandelstam variable \f$\hat{t}\f$ in this * SubProcess. It is calculated using the first incoming and first outgoing * particle. */ Energy2 that() const { return (incoming().first->momentum() - outgoing()[0]->momentum()).m2(); } /** * Return the value of the Mandelstam variable \f$\hat{u}\f$ in this * SubProcess. It is calculated using the first incoming and last outgoing * particle. */ Energy2 uhat() const { return (incoming().second->momentum() - outgoing()[0]->momentum()).m2(); } public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard function for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); private: /** * A pointer to the MEBase object which generated this sub-process. */ tcEventBasePtr theHandler; /** * A pointer to the collision to which this sub-process belongs. */ tCollPtr theCollision; /** * The pair of incoming particles. */ PPair theIncoming; /** * The vector of intermediate particles, */ ParticleVector theIntermediates; /** * The vector of outgoing particles. */ ParticleVector theOutgoing; /** * True if a perturbative cascade has been applied to this sub process. */ bool isDecayed; /** * The head SubProcess, if this SubProcess * object belongs to a SubProcessGroup. NULL * if head of a SubProcessGroup or not member of * a SubProcessGroup at all. */ tSubProPtr theHead; /** * If this SubProcess belongs to a SubProcessGroup, * this gives its relative weight w.r.t. the head's * weight. */ double theGroupWeight; public: /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; /** * Put to ostream */ virtual void printMe(ostream&) const; private: /** * Default constructor */ SubProcess() : isDecayed(false), theGroupWeight(1.0) {} /** * Describe concrete class with persistent data. */ static ClassDescription initSubProcess; /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; /** * Assignment is forbidden. */ SubProcess & operator=(const SubProcess &); }; /** Output a SubProcess to an ostream. */ ostream & operator<<(ostream &, const SubProcess &); /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base class of Collision. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of SubProcess. */ typedef EventRecordBase NthBase; }; /** This template specialization informs ThePEG about the name of * the SubProcess class and how to create it. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SubProcess"; } /** Create a SubProcess object. */ static TPtr create() { return TPtr::Create(SubProcess()); } }; /** @endcond */ } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "SubProcess.tcc" #endif #endif /* ThePEG_SubProcess_H */ thepeg-1.8.0.orig/EventRecord/Collision.cc0000644000175000017500000001550411747772425016636 0ustar sunsun// -*- C++ -*- // // Collision.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined member functions of // the Collision class. // #include "Collision.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/EventRecord/SubProcessGroup.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/DIterator.h" #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Collision.tcc" #endif using namespace ThePEG; Collision::~Collision() { for ( int i = 0, N = theSteps.size(); i < N; ++i ) if ( theSteps[i]->collision() == this ) theSteps[i]->theCollision = tCollPtr(); for ( int i = 0, N = theSubProcesses.size(); i < N; ++i ) if ( theSubProcesses[i]->collision() == this ) theSubProcesses[i]->theCollision = tCollPtr(); theIncoming = PPair(); theSteps.clear(); theSubProcesses.clear(); allParticles.clear(); theEvent = tEventPtr(); theHandler = tcEventBasePtr(); } CollPtr Collision::clone() const { return ptr_new(*this); } tStepPtr Collision::newStep(tcEventBasePtr newHandler) { if ( theSteps.empty() ) theSteps.push_back(new_ptr(Step(this))); else theSteps.push_back(new_ptr(Step(*finalStep()))); tStepPtr s = finalStep(); s->handler(newHandler); s->theIntermediates.clear(); s->theSubProcesses.clear(); s->allParticles = s->theParticles; return s; } void Collision::rebind(const EventTranslationMap & trans) { theIncoming.first = trans.translate(theIncoming.first); theIncoming.second = trans.translate(theIncoming.second); theEvent = trans.translate(theEvent); for ( StepVector::iterator sit = theSteps.begin(); sit != theSteps.end(); ++sit ) (*sit = trans.translate(*sit))->rebind(trans); for ( SubProcessVector::iterator spit = theSubProcesses.begin(); spit != theSubProcesses.end(); ++spit ) (*spit = trans.translate(*spit))->rebind(trans); ParticleSet newParticles; for ( ParticleSet::const_iterator pit = allParticles.begin(); pit != allParticles.end(); ++pit ) newParticles.insert(trans.translate(*pit)); allParticles.swap(newParticles); } void Collision::transform(const LorentzRotation & r) { for_each(allParticles, Transformer(r)); } void Collision::addStep(tStepPtr s) { theSteps.push_back(s); s->collision(this); addParticles(s->all().begin(), s->all().end()); if ( event() ) event()->addStep(s); } void Collision::addSubProcess(tSubProPtr p) { theSubProcesses.push_back(p); if ( !p->collision() ) p->theCollision = this; if ( event() ) event()->addSubProcess(p); } void Collision::removeSubProcess(tSubProPtr p) { SubProcessVector::iterator sit = ThePEG::find(theSubProcesses, p); if ( sit == theSubProcesses.end() ) return; theSubProcesses.erase(sit); if ( event() ) event()->removeSubProcess(p); } void Collision::addParticle(tPPtr p) { allParticles.insert(p); if ( event() ) event()->addParticle(p); } void Collision::removeEntry(tPPtr p) { ParticleSet::iterator it = allParticles.find(p); if ( it == allParticles.end() ) return; for ( DIterator sit = theSteps.begin(); sit != theSteps.end(); ++sit ) sit->removeEntry(p); allParticles.erase(it); } void Collision::removeParticle(tPPtr p) { if ( p->next() ) removeParticle(p->next()); while ( !p->children().empty() ) removeParticle(p->children().back()); if ( p->hasRep() ) p->rep().theBirthStep = tStepPtr(); removeEntry(p); } void Collision::removeDecay(tPPtr p) { while ( !p->children().empty() ) removeParticle(p->children().back()); } void Collision::cleanSteps() { for ( StepVector::size_type i = 0; i < theSteps.size(); ++i ) { if ( theSteps[i]->nullStep() ) theSteps.erase(theSteps.begin() + i--); } } void Collision::popStep() { StepPtr last = finalStep(); ParticleVector pv(last->all().begin(), last->all().end()); for ( ParticleVector::iterator pit = pv.begin();pit != pv.end(); ++pit ) if ( (**pit).birthStep() == last ) removeParticle(*pit); theSteps.pop_back(); } tParticleSet Collision::getRemnants() const { tParticleSet ret; tPVector partons; for ( DIterator i = subProcesses().begin(); i != subProcesses().end(); ++i ) { partons.push_back(i->incoming().first->original()); partons.push_back(i->incoming().second->original()); } for ( tPVector::size_type i = 0; i < partons.size(); ++i ) { partons.insert(partons.end(), partons[i]->parents().begin(), partons[i]->parents().end()); tParticleSet siblings = partons[i]->siblings(); ret.insert(siblings.begin(), siblings.end()); } for ( int i = 0, N = partons.size(); i < N; ++i ) ret.erase(partons[i]); return ret; } ostream & ThePEG::operator<<(ostream & os, const Collision & c) { int isub = 0; if ( c.incoming().first || c.incoming().second ) { os << "--- Colliding particles:" << endl; if ( c.incoming().first ) os << *c.incoming().first; if ( c.incoming().second ) os << *c.incoming().second; } for ( unsigned int i = 0; i < c.steps().size(); ++i ) { const Step & s = *c.steps()[i]; for ( SubProcessVector::const_iterator it = s.subProcesses().begin(); it != s.subProcesses().end(); ++it ) { os << string(78, '-') << endl; if ( !isub ) { os << "Primary sub-process"; if ( dynamic_ptr_cast::ptr>(*it) ) os << " group"; ++isub; } else { os << "Secondary sub-process "; if ( dynamic_ptr_cast::ptr>(*it) ) os << "group "; os << isub++; } if ( (**it).handler() ) os << " performed by " << EventConfig::nameHandler((**it).handler()) << endl; os << **it; } os << string(78, '-') << endl << "Step " << i+1; if ( s.handler() ) os << " performed by " << EventConfig::nameHandler(s.handler()); os << endl << s; } if ( ThePEG_DEBUG_ITEM(9) ) { for ( ParticleSet::const_iterator p = c.all().begin(); p != c.all().end(); ++p ) if ( c.isRemnant(*p) ) os << setw(5) << (**p).number(); os << endl; } return os; } void Collision::persistentOutput(PersistentOStream & os) const { os << theIncoming << theSteps << theSubProcesses << theEvent; EventConfig::putHandler(os, theHandler); os << ounit(theVertex, mm); } void Collision::persistentInput(PersistentIStream & is, int) { is >> theIncoming >> theSteps >> theSubProcesses >> theEvent; EventConfig::getHandler(is, theHandler); is >> iunit(theVertex, mm); } ClassDescription Collision::initCollision; void Collision::Init() {} thepeg-1.8.0.orig/EventRecord/HelicityVertex.h0000644000175000017500000001255311754473550017511 0ustar sunsun// -*- C++ -*- // // HelicityVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HelicityVertex_H #define ThePEG_HelicityVertex_H // This is the declaration of the HelicityVertex class. #include "HelicityVertex.fh" #include "ThePEG/EventRecord/EventConfig.h" #include "ThePEG/Utilities/ClassDescription.h" #include "RhoDMatrix.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Helicity/HelicityDefinitions.h" namespace ThePEG { /** * The HelicityVertex class is designed to store the helicity * amplitude expression for the matrix element for use by the spin * correlation algorithm. It implements the storage of the pointers * to the incoming and outgoing particles at the vertex and virtual * methods for calculating the rho and D matrices. The concrete * implementations of the vertices for specific processes, eg * production or decay, inherit from this and implement the storage * of the matrix element together with the set and get methods. * * These methods are then called by the SpinInfo class to perform the * calculations. * * * @see SpinInfo * * @author Peter Richardson * */ class HelicityVertex: public EventInfoBase { public: /** * Output the spin density matrix for debugging purposes. */ friend ostream & operator<<(ostream & os, const HelicityVertex & vert); public: /** A vector of SpinInfo objects. */ typedef vector SpinVector; public: /** * Standard Init function. */ static void Init(); /** * Rebind to cloned objects. If a HelicityVertex is cloned together * with a whole Event and this has pointers to other event record * objects, these should be rebound to their clones in this * function. */ virtual void rebind(const EventTranslationMap & trans); public: /** @name Access the incoming and outgoing particles. */ //@{ /** * Access the spin of the incoming particles. */ const SpinVector & incoming() const {return _incoming;} /** * Access the spin of the outgoing particles. */ const SpinVector & outgoing() const {return _outgoing;} /** * Add the spin of an incoming particle. * @param spin the spin of the particle. * @param loc is set to the position in the list of incoming spins. */ void addIncoming(tcSpinPtr spin, int & loc) { _incoming.push_back(spin); loc=_incoming.size()-1; } /** * Add the spin of an outgoing particle. * @param spin the spin of the particle. * @param loc is set to the position in the list of outgoing spins. */ void addOutgoing(tcSpinPtr spin, int & loc) { _outgoing.push_back(spin); loc=_outgoing.size()-1; } /** * Reset the \a spin of the incoming particle at position \a loc. */ void resetIncoming(tcSpinPtr spin, int loc) { assert( loc < int(_incoming.size()) && loc >= 0 ); _incoming[loc]=spin; } /** * Reset the \a spin of the outgoing particle at position \a loc. */ void resetOutgoing(tcSpinPtr spin, int loc) { assert( loc < int(_outgoing.size()) && loc >= 0 ); _outgoing[loc]=spin; } //@} public: /** @name Mthods to calculate rho and D matrices. */ //@{ /** * Get the rho matrix for the outgoing particle at position \a loc. */ virtual RhoDMatrix getRhoMatrix(int loc,bool recursive) const = 0; /** * Get the D matrix for the incoming particle at position \a loc. */ virtual RhoDMatrix getDMatrix(int loc) const = 0; //@} private: /** * Describe an abstract base class without persistent data. */ static AbstractNoPIOClassDescription initHelicityVertex; /** * Private and non-existent assignment operator. */ HelicityVertex & operator=(const HelicityVertex &); private: /** * Pointers to the incoming particle spins at the vertex. */ SpinVector _incoming; /** * Pointers to the outgoing particle spins at the vertex. */ SpinVector _outgoing; }; /** * Output operator */ inline ostream & operator<<(ostream & os, const HelicityVertex & vert) { os << "the incoming particles at the vertex are" << endl; for(unsigned int ix=0;ix struct BaseClassTrait : public ClassTraitsType { /** Typedef of the base class of HelicityVertex. */ typedef EventInfoBase NthBase; }; /** * This template specialization informs ThePEG about the name of * the HelicityVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::HelicityVertex"; } }; /** @endcond */ } #endif /* ThePEG_HelicityVertex_H */ thepeg-1.8.0.orig/EventRecord/ParticleTraits.h0000644000175000017500000002470111747772425017476 0ustar sunsun// -*- C++ -*- // // ParticleTraits.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ParticleTraits_H #define ThePEG_ParticleTraits_H // This is the declaration of the ParticleTraits class. #include "ThePEG/Config/ThePEG.h" // #include "ParticleTraits.fh" // #include "ParticleTraits.xh" namespace ThePEG { template /** * ParticleTraits is a templated class defining a general interface to * any particle class. To make another particle type * PType available to some general ThePEG routines, the * ParticleTraits should be specialized to that class implementing * relevant methods of the general ParticleTraits class * below. Typically one needs specialisation both for the class itself * and of pointers to the class. * * @see Particle * @see Lorentz5Vector * */ struct ParticleTraits: public TraitsType { /** * Return a reference to the particle. */ static PType & ref(PType & p) { return p; } /** * Return the momentum of particle \a p. */ static LorentzMomentum momentum(const PType & p) { return p.momentum(); } /** * Return the mass of particle \a p. */ static Energy mass(const PType & p) { return p.mass(); } /** * Perform a Lorentz transformation on particle \a p. */ static void transform(PType & p, const LorentzRotation & r) { p.transform(r); } /** * Set the momentum and mass of a particle. */ static void set5Momentum(PType & p, const Lorentz5Momentum & q) { p.set5Momentum(q); } /** * Set the 3-momentum of a particle. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(PType & p, const Momentum3 & q) { p.set3Momentum(q); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(const PType & p) { return p.data().iCharge(); } }; /** @cond TRAITSPECIALIZATIONS */ /** Specialization of ParticleTraits for pointer to Particle. */ template <> struct ParticleTraits: public TraitsType { /** * Return a reference to the particle. */ static Particle & ref(tPPtr p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(tPPtr p) { return p->momentum(); } /** * Return the mass of particle \a p. */ static Energy mass(tPPtr p) { return p->mass(); } /** * Perform a Lorentz transformation on particle \a p. */ static void transform(tPPtr p, const LorentzRotation & r) { p->transform(r); } /** * Set the momentum and mass of a particle. */ static void set5Momentum(tPPtr p, const Lorentz5Momentum & q) { p->set5Momentum(q); } /** * Set the 3-momentum of a particle. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(tPPtr p, const Momentum3 & q) { p->set3Momentum(q); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(tPPtr p) { return p->data().iCharge(); } }; /** Specialization of ParticleTraits for pointer to const Particle. */ template <> struct ParticleTraits: public TraitsType { /** * Return a const reference to the particle. */ static const Particle & ref(tcPPtr p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(tcPPtr & p) { return p->momentum(); } /** * Return the mass of particle \a p. */ static Energy mass(tcPPtr p) { return p->mass(); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(tcPPtr & p) { return p->data().iCharge(); } }; /** Specialization of ParticleTraits for transient pointer to Particle. */ template <> struct ParticleTraits: public TraitsType { /** * Return a reference to the particle. */ static Particle & ref(tPPtr p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(tPPtr p) { return p->momentum(); } /** * Return the mass of particle \a p. */ static Energy mass(tPPtr p) { return p->mass(); } /** * Perform a Lorentz transformation on particle \a p. */ static void transform(tPPtr p, const LorentzRotation & r) { p->transform(r); } /** * Set the momentum and mass of a particle. */ static void set5Momentum(tPPtr p, const Lorentz5Momentum & q) { p->set5Momentum(q); } /** * Set the 3-momentum of a particle. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(tPPtr p, const Momentum3 & q) { p->set3Momentum(q); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(tPPtr p) { return p->data().iCharge(); } }; /** Specialization of ParticleTraits for transient pointer to const Particle. */ template <> struct ParticleTraits: public TraitsType { /** * Return a const reference to the particle. */ static const Particle & ref(tcPPtr p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(tcPPtr p) { return p->momentum(); } /** * Return the mass of particle \a p. */ static Energy mass(tcPPtr p) { return p->mass(); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(tcPPtr p) { return p->data().iCharge(); } }; /** Partial specialization of ParticleTraits for bare pointer to anything. */ template struct ParticleTraits: public TraitsType { /** * Return a reference to the particle. */ static Particle & ref(T * p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(T * p) { return ParticleTraits::momentum(*p); } /** * Return the mass of particle \a p. */ static Energy mass(T * p) { return ParticleTraits::mass(*p); } /** * Perform a Lorentz transformation on particle \a p. */ static void transform(T * p, const LorentzRotation & r) { ParticleTraits::transform(*p, r); } /** * Set the momentum and mass of a particle. */ static void set5Momentum(T * p, const Lorentz5Momentum & q) { ParticleTraits::set5Momentum(*p, q); } /** * Set the 3-momentum of a particle. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(T * p, const Momentum3 & q) { ParticleTraits::set3Momentum(*p, q); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(T * p) { return ParticleTraits::iCharge(*p); } }; /** Partial specialization of ParticleTraits for bare pointer to const anything. */ template struct ParticleTraits: public TraitsType { /** * Return a const reference to the particle. */ static const Particle & ref(const T * p) { return *p; } /** * Return the momentum of particle \a p. */ static const LorentzMomentum & momentum(const T * p) { return ParticleTraits::momentum(*p); } /** * Return the mass of particle \a p. */ static Energy mass(const T * p) { return ParticleTraits::mass(*p); } /** * Return charge of particle \a p in units of e/3. */ static int iCharge(const T * p) { return ParticleTraits::iCharge(*p); } }; /** Specialization of ParticleTraits for LorentzMomentum. In this way * a LorentzMomentum can be used where only the momentum parts of a * Particle is required. */ template <> struct ParticleTraits: public TraitsType { /** * Return a reference to the LorentzMomentum. */ static LorentzMomentum & ref(LorentzMomentum & p) { return p; } /** * Return the momentum. */ static const LorentzMomentum & momentum(const LorentzMomentum & p) { return p; } /** * Return the mass. */ static Energy mass(const LorentzMomentum & p) { return p.m(); } /** * Perform a Lorentz transformation. */ static void transform(LorentzMomentum & p, const LorentzRotation & r) { p.transform(r); } /** * Set the momentum and mass. */ static void set5Momentum(LorentzMomentum & p, const Lorentz5Momentum & q) { p = q; } /** * Set the 3-momentum. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(LorentzMomentum & p, const Momentum3 & q) { p = LorentzMomentum(q, sqrt(q.mag2() + p.m2())); } }; /** Specialization of ParticleTraits for Lorentz5Momentum. In this way * a Lorentz5Momentum can be used where only the momentum parts of a * Particle is required. */ template <> struct ParticleTraits: public TraitsType { /** * Return a reference to the Lorentz5Momentum. */ static Lorentz5Momentum & ref(Lorentz5Momentum & p) { return p; } /** * Return the momentum. */ static const LorentzMomentum & momentum(const Lorentz5Momentum & p) { return p; } /** * Return the mass. */ static Energy mass(const Lorentz5Momentum & p) { return p.mass(); } /** * Perform a Lorentz transformation. */ static void transform(Lorentz5Momentum & p, const LorentzRotation & r) { p.transform(r); } /** * Set the momentum and mass. */ static void set5Momentum(Lorentz5Momentum & p, const Lorentz5Momentum & q) { p = q; } /** * Set the 3-momentum. The energy is rescaled to * preserve invariant mass. */ static void set3Momentum(Lorentz5Momentum & p, const Momentum3 & q) { p = Lorentz5Momentum(p.mass(), q); } }; /** @endcond */ /** A helper class to be used in std:: algorithms to * transform a range of particles. */ struct Transformer { /** Constructor taking a reference to the Lorentz rotation to be * performed. */ Transformer(const LorentzRotation & rin) : r(rin) {} /** Copy constructor. */ Transformer(const Transformer & t) : r(t.r) {} /** Perform the rotation on a given particle. */ template void operator()(const PType & p) { ParticleTraits::transform(p, r); } /** A reference to the Lorentz rotation to be performed. */ const LorentzRotation & r; }; } // #include "ParticleTraits.icc" #ifndef ThePEG_TEMPLATES_IN_CC_FILE // #include "ParticleTraits.tcc" #endif #endif /* ThePEG_ParticleTraits_H */ thepeg-1.8.0.orig/EventRecord/RemnantParticle.cc0000644000175000017500000000661211747772425017773 0ustar sunsun// -*- C++ -*- // // RemnantParticle.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RemnantParticle class. // #include "RemnantParticle.h" #include "ThePEG/PDT/RemnantData.h" #include "ThePEG/PDT/RemnantDecayer.h" #include "ThePEG/EventRecord/MultiColour.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; RemnantParticle:: RemnantParticle(const Particle & particle, RemDecPtr decayer, tPPtr parton) : Particle(new_ptr(RemnantData(particle.dataPtr(), decayer))) { remData = const_ptr_cast(dynamic_ptr_cast(dataPtr())); set5Momentum(particle.momentum()); colourInfo(new_ptr(MultiColour())); parent = &particle; if ( parton ) extract(parton); } bool RemnantParticle::extract(tPPtr parton, bool fixcolour) { LorentzMomentum pnew = momentum() - parton->momentum(); if ( !remData->decayer().checkExtract(parent, parton, pnew) ) return false; if ( !remData->extract(parton->dataPtr()) ) return false; theExtracted.push_back(parton); setMomentum(pnew); rescaleMass(); if ( fixcolour ) fixColourLines(parton); return true; } bool RemnantParticle::reextract(tPPtr oldp, tPPtr newp, bool fixcolour) { LorentzMomentum pnew = momentum() + oldp->momentum() - newp->momentum(); if ( !remData->decayer().checkExtract(parent, newp, pnew) ) return false; PVector::iterator it = find(theExtracted, oldp); if ( it == theExtracted.end() ) return false; if ( !remData->reextract(oldp->dataPtr(), newp->dataPtr()) ) return false; theExtracted[it - theExtracted.begin()] = newp; setMomentum(pnew); rescaleMass(); if ( oldp->colourLine() ) oldp->colourLine()->removeAntiColoured(this); if ( oldp->antiColourLine() ) oldp->antiColourLine()->removeColoured(this); if ( fixcolour ) fixColourLines(newp); return true; } bool RemnantParticle::remove(tPPtr oldp) { LorentzMomentum pnew = momentum() + oldp->momentum(); PVector::iterator it = find(theExtracted, oldp); if ( it == theExtracted.end() ) return false; if ( !remData->remove(oldp->dataPtr()) ) return false; theExtracted.erase(it); setMomentum(pnew); rescaleMass(); if ( oldp->colourLine() ) oldp->colourLine()->removeAntiColoured(this); if ( oldp->antiColourLine() ) oldp->antiColourLine()->removeColoured(this); return true; } void RemnantParticle::fixColourLines(tPPtr parton) { if ( parton->hasColour() ) { if ( parton->colourLine() ) parton->colourLine()->addAntiColoured(this); else ColourLine::create(parton, this); } if ( parton->hasAntiColour() ) { if ( parton->antiColourLine() ) parton->antiColourLine()->addColoured(this); else ColourLine::create(this, parton); } } void RemnantParticle::persistentOutput(PersistentOStream & os) const { os << remData << parent << theExtracted; } void RemnantParticle::persistentInput(PersistentIStream & is, int) { is >> remData >> parent >> theExtracted; } ClassDescription RemnantParticle::initRemnantParticle; // Definition of the static class description member. void RemnantParticle::Init() {} thepeg-1.8.0.orig/EventRecord/Collision.tcc0000644000175000017500000000257411747772425017025 0ustar sunsun// -*- C++ -*- // // Collision.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the templated member functions of // the Collision class. // #include "Step.h" #include "Event.h" namespace ThePEG { template void Collision::select(OutputIterator r, const SelectorBase & s) const { if ( s.allSteps() ) { if ( incoming().first && s.intermediate() && s.check(*incoming().first) ) *r++ = incoming().first; if ( incoming().first && s.intermediate() && s.check(*incoming().second) ) *r++ = incoming().second; for ( StepVector::const_iterator it = theSteps.begin(); it != theSteps.end(); ++it ) (**it).select(r, s); } else { if ( incoming().first && s.intermediate() && s.check(*incoming().first) && steps().size() < 2 ) *r++ = incoming().first; if (incoming().first && s.intermediate() && s.check(*incoming().second) && steps().size() < 2 ) *r++ = incoming().second; finalStep()->select(r, s); } } template void Collision::addParticles(Iterator first, Iterator last) { allParticles.insert(first, last); if ( event() ) event()->addParticles(first, last); } } thepeg-1.8.0.orig/EventRecord/StandardSelectors.h0000644000175000017500000001223711747772425020171 0ustar sunsun// -*- C++ -*- // // StandardSelectors.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardSelectors_H #define ThePEG_StandardSelectors_H /** * @file StandardSelectors.h This file contains declarations of * standard selector classes. The classes contain only static * functions and are assumed to be used as template arguments to the * ParticleSelector class. */ #include "SelectorBase.h" #include "ParticleTraits.h" namespace ThePEG { /** * The AllSelector class is used to extract all particles from an event. * * @see SelectorBase * @see ParticleSelector */ struct AllSelector: public SelectorBase { /** * Static method corresponding to the virtual check() * method. Returns true. */ static bool Check(const Particle &) { return true; } /** * Static method corresponding to the virtual intermediate() * method. Returns true. */ static bool Intermediate() { return true; } /** * Static method corresponding to the virtual finalState() * method. Returns true. */ static bool FinalState() { return true; } /** * Static method corresponding to the virtual allSteps() * method. Returns true. */ static bool AllSteps() { return true; } /** * Static method corresponding to the virtual allCollisions() * method. Returns true. */ static bool AllCollisions() { return true; } }; /** Typedef to declare a selector used to extract all particles from an * event. */ typedef ParticleSelector SelectAll; /** * The FinalStateSelector class is used to extract all final state particles * from an event. * * @see SelectorBase * @see ParticleSelector */ struct FinalStateSelector: public SelectorBase { /** * Static method corresponding to the virtual intermediate() * method. Returns false. */ static bool Intermediate() { return false; } /** * Static method corresponding to the virtual allSteps() * method. Returns false. */ static bool AllSteps() { return false; } }; /** Typedef to declare a selector used to extract all final state * particles from an event. */ typedef ParticleSelector SelectFinalState; /** * The IntermediateSelector class is used to extract only intermediate * particles from an event. * * @see SelectorBase * @see ParticleSelector */ struct IntermediateSelector: public SelectorBase { /** * Static method corresponding to the virtual check() * method. Returns true. */ static bool Check(const Particle &) { return true; } /** * Static method corresponding to the virtual intermediate() * method. Returns true. */ static bool Intermediate() { return true; } /** * Static method corresponding to the virtual finalState() * method. Returns false. */ static bool FinalState() { return false; } /** * Static method corresponding to the virtual allSteps() * method. Returns true. */ static bool AllSteps() { return true; } /** * Static method corresponding to the virtual allCollisions() * method. Returns true. */ static bool AllCollisions() { return true; } }; /** Typedef to declare a selector used to extract all intermediate * particles from an event. */ typedef ParticleSelector SelectIntermediates; /** * The PrimaryCollisionSelector class is used to extract all particles * from the primary Collision of an event. * * @see SelectorBase * @see ParticleSelector */ struct PrimaryCollisionSelector: public SelectorBase { /** * Static method corresponding to the virtual check() * method. Returns true. */ static bool Check(const Particle &) { return true; } /** * Static method corresponding to the virtual intermediate() * method. Returns true. */ static bool Intermediate() { return true; } /** * Static method corresponding to the virtual finalState() * method. Returns true. */ static bool FinalState() { return true; } /** * Static method corresponding to the virtual allSteps() * method. Returns true. */ static bool AllSteps() { return true; } /** * Static method corresponding to the virtual allCollisions() * method. Returns false. */ static bool AllCollisions() { return false; } }; /** Typedef to declare a selector used to extract all particles from * the primary Collision of an event. */ typedef ParticleSelector SelectPrimaryCollision; /** * The ChargedSelector class is used to extract all charged particles * from an event. * * @see SelectorBase * @see ParticleSelector */ struct ChargedSelector: public SelectorBase { /** * Static method corresponding to the virtual check() * method. Returns true if the given particle is charged.. */ static bool Check(const Particle & p) { return ParticleTraits::iCharge(p); } }; /** Typedef to declare a selector used to extract all charged * particles from an event. */ typedef ParticleSelector SelectCharged; } #endif /* ThePEG_StandardSelectors_H */ thepeg-1.8.0.orig/EventRecord/Collision.h0000644000175000017500000002520311747772425016475 0ustar sunsun// -*- C++ -*- // // Collision.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Collision_H #define ThePEG_Collision_H // This is the decalaration of the Collision class. It #include "EventConfig.h" #include "Particle.h" #include "StandardSelectors.h" #include "ThePEG/Vectors/LorentzVector.h" #include "ThePEG/Vectors/LorentzRotation.h" namespace ThePEG { /** * This is the decalaration of the Collision class. It contains all * Particles produced in the generation of a collision * between two particles in an Event. The particles are divided into * Steps corresponding to the particles present after a * given step in the event generation. The collision also carries * information about the SubProcesses in the collision. * * @see Event * @see Step * @see SubProcess * @see Particle */ class Collision: public EventRecordBase { public: /** * EventHandler is a friend of most Event classes. */ friend class EventHandler; /** Most of the Event classes are friends with each other. */ friend class Event; /** Most of the Event classes are friends with each other. */ friend class Step; public: /** * The standard constructor takes a pair of incoming particles as * argument. Optionally can be given a pointer to the Event which * this Collision belongs, and a pointer to the EventHandler * which produced this collision. * @param newIncoming a pair of incoming particles. * @param newEvent the Event to which this Collision belongs. * @param newHandler the handler object in charge of the generation * of this Collision. */ Collision(const PPair & newIncoming, tEventPtr newEvent = tEventPtr(), tcEventBasePtr newHandler = tcEventBasePtr()) : theIncoming(newIncoming), theEvent(newEvent), theHandler(newHandler) { addParticle(incoming().first); addParticle(incoming().second); } /** * The destructor */ ~Collision(); public: /** * Create a new step in this collision, which is a copy of * the last step (if any) and return a pointer to it. * @param newHandler the handler object in charge of generating the * new step. */ tStepPtr newStep(tcEventBasePtr newHandler = tcEventBasePtr()); /** * Add a new Step to this Collision. */ void addStep(tStepPtr s); /** * Return a pointer to the EventHandler which produced this * Collision. May be the null pointer. */ tcEventBasePtr handler() const { return theHandler; } /** * Return a pointer to the Event to which this Collision * belongs. May be the null pointer. */ tEventPtr event() const { return theEvent; } /** @name Functions for accessing particles etc. */ //@{ /** * Extract particles from this Collision which satisfies the * requirements given by an object of the SelectorBase class. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. * @param s SelectorBase object defining which particles should be * extracted. */ template void select(OutputIterator r, const SelectorBase & s) const; /** * Extract all final state particles in this Collision. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. */ template void selectFinalState(OutputIterator r) const { select(r, SelectFinalState()); } /** * Extract all final state particles in this Collision. * @return a vector of pointers to the extracted particles. */ tPVector getFinalState() const { tPVector ret; selectFinalState(back_inserter(ret)); return ret; } /** * Return a pointer to the primary SubProcess in this Collision. May * be the null pointer. */ tSubProPtr primarySubProcess() const { return subProcesses().empty()? SubProPtr(): subProcesses().front(); } /** * Return the possibly empty list of sub processes in this Collision. */ const SubProcessVector & subProcesses() const { return theSubProcesses; } /** * Return a const pointer to the last step in this Collission. */ tcStepPtr finalStep() const { return steps().empty()? tcStepPtr(): tcStepPtr(steps().back()); } /** * Return a pointer to the last step in this Collission. */ tStepPtr finalStep() { return steps().empty()? StepPtr(): steps().back(); } /** * Return the vector of steps in this Collision. */ const StepVector & steps() const { return theSteps; } /** * Return a pointer to a given Step in this Collision. */ tcStepPtr step(unsigned int i) const { return i < steps().size()? tcStepPtr(theSteps[i]): tcStepPtr(); } /** * Return a reference to the pair of colliding particles in this * Collision. */ const PPair & incoming() const { return theIncoming; } /** * Return the set of remnants in this collision. Remnants are * defined as the daughters of the incoming particles which are not * incoming particles to any SubProcess or children thereof which * are present in the final state. */ tParticleSet getRemnants() const; /** * Return true if the given particle is a remnant of the colliding * particles. Calls the getRemnants method, so to check several * particles it is better to call getRemnants directly and check if * the particles are members of the resulting set by hand. */ bool isRemnant(tPPtr p) const { return member(getRemnants(), p); } //@} /** * Return the vertex position of this Collision. */ const LorentzPoint & vertex() const { return theVertex; } /** * Set the vertex position of this Collision. */ void vertex(const LorentzPoint & p) { theVertex = p; } /** * Transform all particles in this Collision. */ void transform(const LorentzRotation &); /** * Return the total invariant mass squared of the final-state * particles in this Collision. */ Energy2 m2() const { return ( incoming().first->momentum() + incoming().second->momentum() ).m2(); } /** @name Functions for removing entires from a Collision. */ //@{ /** * Remove (recursively) the decay products from a given Particle and * add the particle to the list of final state particles. */ void removeDecay(tPPtr); /** * Remove (recursively) the given Particle from the Collision. If * this was the last daughter of the mother Particle, the latter is * added to the list of final state particles. */ void removeParticle(tPPtr); /** * Remove all steps which have no new particles introduced in them. */ void cleanSteps(); /** * Remove the last Step in this Collision. */ void popStep(); //@} public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard functions for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); protected: /** @name Internal functions for adding and removing entires. */ //@{ /** * Add a new SubProcess to this Collision. */ void addSubProcess(tSubProPtr p); /** * Remove a SubProcess from this Collision. */ void removeSubProcess(tSubProPtr p); /** * Add a range of particles to this Collision. */ template void addParticles(Iterator first, Iterator last); /** * Add a particle to this Collision. */ void addParticle(tPPtr p); /** * Remove a given Particle entry. */ void removeEntry(tPPtr p); //@} /** * Return a reference to the list of all particles in this Collision. */ const ParticleSet & all() const { return allParticles; } /** * Clone this Collision. This also makes clones of all steps, sub * processes and particles in this Collision. */ CollPtr clone() const; /** * Rebind to cloned objects. When a Collision is cloned, a shallow * copy is done first, then all Particles etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned Collision points to the cloned * Particles etc. */ void rebind(const EventTranslationMap & trans); private: /** * The pair of colliding particles. */ PPair theIncoming; /** * A vector of all steps in this Collision. */ StepVector theSteps; /** * A vector of all sub-processes in this Collision. The front * element points to the primary sub-process. */ SubProcessVector theSubProcesses; /** * A set of all particles in this Collision. */ ParticleSet allParticles; /** * A pointer to the Event to which this Collision belongs. */ tEventPtr theEvent; /** * A pointer to the EventHandler which performed the generation * of this Collision. */ tcEventBasePtr theHandler; /** * The vertex position of this Collision */ LorentzPoint theVertex; private: /** * Describe concrete class with persistent data. */ static ClassDescription initCollision; /** * Private default constructor must only be used by the * PersistentIStream class via the ClassTraits class . */ Collision() {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; /** * The assignment operator is private and not implemented. */ Collision & operator=(const Collision &); /** Output to a standard ostream. */ friend ostream & operator<<(ostream & os, const Collision & c); }; /** Output a Collision to a standard ostream. */ ostream & operator<<(ostream &, const Collision &); /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base class of Collision. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Collision. */ typedef EventRecordBase NthBase; }; /** This template specialization informs ThePEG about the name of * the Collision class and how to create it. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Collision"; } /** Create a Collision object. */ static TPtr create() { return TPtr::Create(Collision()); } }; /** @endcond */ } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Collision.tcc" #endif #endif /* ThePEG_Collision_H */ thepeg-1.8.0.orig/EventRecord/Step.cc0000644000175000017500000003560711747772425015624 0ustar sunsun// -*- C++ -*- // // Step.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Step class. // #include "Step.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Config/algorithm.h" #include #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Step.tcc" #endif using namespace ThePEG; Step::Step(const Step & s) : Base(s), theParticles(s.theParticles), theIntermediates(s.theIntermediates), allParticles(s.allParticles), theCollision(s.theCollision), theHandler(s.theHandler) {} Step::~Step() { for ( ParticleSet::iterator it = allParticles.begin(); it != allParticles.end(); ++it ) if ( (**it).hasRep() && (**it).birthStep() == this ) (**it).rep().theBirthStep = tStepPtr(); theParticles.clear(); theIntermediates.clear(); theSubProcesses.clear(); allParticles.clear(); theCollision = tCollPtr(); theHandler = tcEventBasePtr(); } StepPtr Step::clone() const { return ptr_new(*this); } void Step::rebind(const EventTranslationMap & trans) { ParticleSet::const_iterator pit; allParticles.clear(); for ( pit = theParticles.begin(); pit != theParticles.end(); ++pit ) allParticles.insert(trans.translate(*pit)); theParticles.swap(allParticles); allParticles.clear(); for ( pit = theIntermediates.begin(); pit != theIntermediates.end(); ++pit ) allParticles.insert(trans.translate(*pit)); theIntermediates = allParticles; allParticles.insert(theParticles.begin(), theParticles.end()); for ( pit = allParticles.begin(); pit != allParticles.end(); ++pit ) (**pit).rebind(trans); } void Step::addParticle(tPPtr p) { if ( !p->birthStep() ) p->rep().theBirthStep = this; theParticles.insert(p); allParticles.insert(p); if ( collision() ) collision()->addParticle(p); } void Step::addSubProcess(tSubProPtr sp) { if (( !member(allParticles, sp->incoming().first) && collision() && sp->incoming().first != collision()->incoming().first) && std::find(sp->incoming().first->parents().begin(), sp->incoming().first->parents().end(), collision()->incoming().first)== sp->incoming().first->parents().end()) { collision()->incoming().first-> rep().theChildren.push_back(sp->incoming().first); sp->incoming().first->rep().theParents.push_back(collision()->incoming().first); } if (( !member(allParticles, sp->incoming().second) && collision() && sp->incoming().second != collision()->incoming().second) && std::find(sp->incoming().second->parents().begin(), sp->incoming().second->parents().end(),collision()->incoming().second)== sp->incoming().second->parents().end()) { collision()->incoming().second-> rep().theChildren.push_back(sp->incoming().second); sp->incoming().second->rep().theParents.push_back(collision()->incoming().second); } if ( !sp->incoming().first->birthStep() ) sp->incoming().first->rep().theBirthStep = this; if ( !sp->incoming().second->birthStep() ) sp->incoming().second->rep().theBirthStep = this; addIntermediate(sp->incoming().first); addIntermediate(sp->incoming().second); addIntermediates(sp->intermediates().begin(), sp->intermediates().end()); addParticles(sp->outgoing().begin(), sp->outgoing().end()); theSubProcesses.push_back(sp); if ( collision() ) collision()->addSubProcess(sp); } void Step::removeSubProcess(tSubProPtr sp) { SubProcessVector::iterator sit = ThePEG::find(theSubProcesses, sp); if ( sit == theSubProcesses.end() ) return; for ( int i = 0, N = sp->outgoing().size(); i < N; ++i ) removeParticle(sp->outgoing()[i]); for ( int i = 0, N = sp->intermediates().size(); i < N; ++i ) removeParticle(sp->intermediates()[i]); removeParticle(sp->incoming().first); removeParticle(sp->incoming().second); theSubProcesses.erase(sit); if ( collision() ) collision()->removeSubProcess(sp); } void Step::addIntermediate(tPPtr p) { theIntermediates.insert(p); ParticleSet::iterator pit = theParticles.find(p); if ( pit != theParticles.end() ) theParticles.erase(pit); else { if ( !p->birthStep() ) p->rep().theBirthStep = this; allParticles.insert(p); if ( collision() ) collision()->addParticle(p); } } void Step:: insertIntermediate(tPPtr p, tPPtr parent, tPPtr child) { if ( !p->birthStep() ) p->rep().theBirthStep = this; addIntermediate(p); parent->removeChild(child); child->removeParent(parent); if ( parent ) { parent->rep().theChildren.push_back(p); p->rep().theParents.push_back(parent); } if ( child ) { p->rep().theChildren.push_back(child); child->rep().theParents.push_back(p); } } void Step::removeEntry(tPPtr p) { ParticleSet::iterator it = allParticles.find(p); if ( it == allParticles.end() ) return; allParticles.erase(it); it = theParticles.find(p); if ( it != theParticles.end() ) theParticles.erase(it); if ( p->previous() ) { it = theIntermediates.find(p->previous()); if ( it != theIntermediates.end() ) theIntermediates.erase(it); theParticles.insert(p->previous()); allParticles.insert(p->previous()); } while ( !p->parents().empty() ) { PPtr parent = p->parents().back(); p->removeParent(parent); parent->removeChild(p); if ( !parent->children().empty() ) continue; it = theIntermediates.find(parent); if ( it != theIntermediates.end() ) theIntermediates.erase(it); theParticles.insert(parent); allParticles.insert(parent); } if ( !p->hasColourInfo() ) return; if ( colourNeighbour(p) ) colourNeighbour(p)->antiColourNeighbour(antiColourNeighbour(p)); if ( antiColourNeighbour(p) ) antiColourNeighbour(p)->colourNeighbour(colourNeighbour(p)); if ( p->incomingColour() ) p->outgoingColour(tPPtr()); if ( p->incomingAntiColour() ) p->outgoingAntiColour(tPPtr()); it = theIntermediates.find(p); if ( it == theIntermediates.end() ) return; theIntermediates.erase(it); } void Step::removeParticle(tPPtr p) { if ( p->next() ) removeParticle(p->next()); while ( !p->children().empty() ) removeParticle(p->children().back()); removeEntry(p); } bool Step::nullStep() const { for ( ParticleSet::const_iterator it = allParticles.begin(); it != allParticles.end(); ++it ) if ( (**it).birthStep() == this ) return false; return true; } tPPtr Step::copyParticle(tcPPtr pin) { PPtr cp; tPPtr p = const_ptr_cast(pin); if ( !collision() ) return cp; ParticleSet::iterator pit = theParticles.find(p); if ( collision()->finalStep() != this || p->next() || ! p->children().empty() || pit == theParticles.end() ) return cp; cp = p->clone(); cp->rep().thePrevious = p; p->rep().theNext = cp; if ( p->hasColour() ) p->colourFlow(cp); if ( p->hasAntiColour() ) p->antiColourFlow(cp); cp->rep().theBirthStep = this; theParticles.erase(pit); if ( p->birthStep() == this ) theIntermediates.insert(p); addParticle(cp); return cp; } bool Step::setCopy(tcPPtr poldin, tPPtr pnew) { if ( poldin->id() != pnew->id() ) return false; tPPtr pold = const_ptr_cast(poldin); pold->rep().theNext = pnew; pnew->rep().thePrevious = pold; theParticles.erase(pold); if ( pold->birthStep() == this ) theIntermediates.insert(pold); pnew->rep().theBirthStep = this; addParticle(pnew); return true; } tPPtr Step::insertCopy(tcPPtr pin) { PPtr cp; tPPtr p = const_ptr_cast(pin); if ( !collision() ) return cp; if ( collision()->all().find(p) == collision()->all().end() ) return cp; cp = p->clone(); cp->rep().theNext = p; cp->rep().theChildren.clear(); if ( p->previous() ) { p->previous()->rep().theNext = cp; cp->rep().thePrevious = p->previous(); } else { for ( int i = 0, N = p->parents().size(); i < N; ++i ) { tPPtr parent = p->parents()[i]; for ( int j = 0, M = parent->children().size(); j < M; ++j ) if ( parent->children()[j] == p ) parent->rep().theChildren[j] = cp; } } p->rep().theParents.clear(); p->rep().thePrevious = cp; if ( p->hasColour() ) cp->colourFlow(p); if ( p->hasAntiColour() ) cp->antiColourFlow(p); cp->rep().theBirthStep = this; theIntermediates.insert(cp); return cp; } bool Step::removeDecayProduct(tcPPtr par, tPPtr child) { if ( !collision() ) return false; tPPtr parent = const_ptr_cast(par->final()); if ( collision()->all().find(parent) == collision()->all().end() ) return false; if ( !par->hasRep() ) return false; PVector::iterator it = ThePEG::find(parent->rep().theChildren, child); if ( it == parent->rep().theChildren.end() ) return false; parent->rep().theChildren.erase(it); ParticleSet::iterator cit = theParticles.find(child); if ( cit != theParticles.end() ) { theParticles.erase(cit); if ( child->birthStep() == this ) theIntermediates.insert(child); } return true; } bool Step::addDecayProduct(tcPPtr par, tPPtr child, bool fixColour) { if ( !collision() ) return false; tPPtr parent = const_ptr_cast(par->final()); if ( collision()->finalStep() != this || parent->next() ) return false; ParticleSet::iterator pit = theParticles.find(parent); if ( pit != theParticles.end() ) { theParticles.erase(pit); if ( parent->birthStep() == this ) theIntermediates.insert(parent); } else { if ( parent != collision()->incoming().first && parent != collision()->incoming().second && parent->children().empty() ) return false; } parent->rep().theChildren.push_back(child); child->rep().theParents.push_back(parent); child->rep().theBirthStep = this; addParticle(child); if ( !fixColour || !parent->hasColourInfo() || !parent->coloured() || !child->coloured() ) return true; if ( parent->hasColour() && child->hasColour() && !parent->outgoingColour() && !child->colourLine() ) parent->colourFlow(child); if ( parent->hasAntiColour() && child->hasAntiColour() && !child->antiColourLine() ) { if ( parent->outgoingAntiColour() ) parent->antiColourLine()-> removeAntiColoured(parent->outgoingAntiColour()); parent->antiColourFlow(child); } return true; } void Step::addDecayNoCheck(tPPtr parent, tPPtr child) { ParticleSet::iterator pit = theParticles.find(parent); if ( pit != theParticles.end() ) { theParticles.erase(pit); if ( parent->birthStep() == this ) theIntermediates.insert(parent); } child->rep().theBirthStep = this; addParticle(child); } void Step::addDecayProduct(tPPtr child) { for ( int i = 0, N = child->parents().size(); i < N; ++i ) { ParticleSet::iterator pit = theParticles.find(child->parents()[i]); if ( pit != theParticles.end() ) { theParticles.erase(pit); if ( child->parents()[i]->birthStep() == this ) theIntermediates.insert(child->parents()[i]); } } child->rep().theBirthStep = this; addParticle(child); } void Step::fixColourFlow() { tParticleVector news; for ( ParticleSet::iterator pi = theParticles.begin(); pi != theParticles.end(); ++pi ) if ( (**pi).birthStep() == this ) news.push_back(*pi); for ( int i = 0, N = news.size(); i < N; ++i ) { tPPtr p = news[i]; if ( p->hasColour() && !antiColourNeighbour(p) ) { tPPtr ng = p; while ( ( ng = ng->incomingColour() ) && !antiColourNeighbour(ng) ) {} if ( ng ) { ng = antiColourNeighbour(ng); if ( !ng->outgoingColour() ) ng = copyParticle(ng); while ( ng->outgoingColour() ) ng = ng->outgoingColour(); p->antiColourConnect(ng); } } if ( p->hasAntiColour() && !colourNeighbour(p) ) { tPPtr ng = p; while ( ( ng = ng->incomingAntiColour() ) && !colourNeighbour(ng) ) {} if ( ng ) { ng = colourNeighbour(ng); if ( !ng->outgoingAntiColour() ) ng = copyParticle(ng); while ( ng->outgoingAntiColour() ) ng = ng->outgoingAntiColour(); p->colourConnect(ng); } } } } tPPtr Step::antiColourNeighbour(tcPPtr p) const { return colourNeighbour(p, true); } tPPtr Step::colourNeighbour(tcPPtr p, bool anti) const { if ( !member(particles(), const_ptr_cast(p)) ) return tPPtr(); tColinePtr line = p->colourLine(!anti); if ( !line ) return tPPtr(); for ( ParticleSet::const_iterator it = particles().begin(); it != particles().end(); ++it ) if ( (**it).hasColourLine(line, anti) ) return *it; return tPPtr(); } vector Step::getSinglets(tParticleSet & left) { vector ret; while ( !left.empty() ) { tPPtr first = *left.begin(); left.erase(first); if ( !first->hasColourInfo() || !first->coloured() ) continue; tPPtr last = first; tPPtr test; while ( ( test = last->antiColourNeighbour(left.begin(), left.end()) ) && test != first ) last = test; while ( ( test = first->colourNeighbour(left.begin(), left.end()) ) && test != last ) first = test; ret.push_back(tPVector()); for ( ; first != last; first = first->antiColourNeighbour(left.begin(), left.end()) ) { left.erase(first); ret.back().push_back(first); } left.erase(first); ret.back().push_back(first); } return ret; } ostream & ThePEG::operator<<(ostream & os, const Step & s) { if ( !s.intermediates().empty() ) os << "--- intermediates:" << endl; Particle::PrintParticles(os, s.intermediates(), &s); os << "--- final:" << endl; LorentzMomentum sum; Energy2 sumx = Energy2(); Energy2 sumy = Energy2(); Energy2 sumz = Energy2(); Particle::PrintParticles(os, s.particles(), &s); for ( ParticleSet::const_iterator it = s.particles().begin(); it != s.particles().end(); ++it ) { sum += (**it).momentum(); sumx += sqr((**it).momentum().x()); sumy += sqr((**it).momentum().y()); sumz += sqr((**it).momentum().z()); } os << string(78, '-') << endl << " Sum of momenta: "; int oldprecision = os.precision(); Energy sumx1 = ( sqr(sum.x()) > Constants::epsilon*sumx ? sum.x(): ZERO ); Energy sumy1 = ( sqr(sum.y()) > Constants::epsilon*sumy ? sum.y(): ZERO ); Energy sumz1 = ( sqr(sum.z()) > Constants::epsilon*sumz ? sum.z(): ZERO ); os << setprecision(3) << setw(10) << sumx1/GeV << setw(10) << sumy1/GeV << setw(10) << sumz1/GeV << setw(10) << sum.e()/GeV << setw(10) << sum.m()/GeV << endl << setprecision(oldprecision); return os; } void Step::debugme() const { cerr << *this; EventRecordBase::debugme(); } void Step::persistentOutput(PersistentOStream & os) const { os << theParticles << theIntermediates << theSubProcesses << allParticles << theCollision; EventConfig::putHandler(os, theHandler); } void Step::persistentInput(PersistentIStream & is, int) { is >> theParticles >> theIntermediates >> theSubProcesses >> allParticles >> theCollision; EventConfig::getHandler(is, theHandler); } ClassDescription Step::initStep; void Step::Init() {} ThePEG_IMPLEMENT_SET(StepPtr,StepSet) thepeg-1.8.0.orig/EventRecord/EventConfig.cc0000644000175000017500000000347511747772425017116 0ustar sunsun// -*- C++ -*- // // EventConfig.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the EventConfig class. // #include "EventConfig.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "EventConfig.tcc" #endif using namespace ThePEG; tcEventBasePtr EventConfig::currentGenerator; void EventConfig::putHandler(PersistentOStream & os, tcEventBasePtr h) { if ( !currentGenerator ) os << "" << h; else { tcIPtr handler = dynamic_ptr_cast(h); if ( handler ) os << handler->fullName(); else os << ""; os << tcEventBasePtr(); } } void EventConfig::getHandler(PersistentIStream & is, tcEventBasePtr & h) { string pxh; is >> pxh >> h; if ( currentGenerator ) { tcEGPtr eg = dynamic_ptr_cast(currentGenerator); h = eg->getObject(pxh); } } void EventConfig::putParticleData(PersistentOStream & os, tcEventPDPtr pd) { if ( !currentGenerator ) os << 0 << pd; else os << pd->id() << tcEventPDPtr(); } void EventConfig::getParticleData(PersistentIStream & is, cEventPDPtr & pd) { long pid; is >> pid >> pd; if ( !pd && currentGenerator ) { tcEGPtr eg = dynamic_ptr_cast(currentGenerator); pd = eg->getParticleData(pid); } } string EventConfig::nameHandler(tcEventBasePtr h) { tcIPtr handler = dynamic_ptr_cast(h); if ( handler ) return handler->name(); return ""; } thepeg-1.8.0.orig/EventRecord/SubProcess.tcc0000644000175000017500000000133711747772425017156 0ustar sunsun// -*- C++ -*- // // SubProcess.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the SubProcess class. // namespace ThePEG { template void SubProcess::setIntermediates(InputIterator first, InputIterator last) { theIntermediates = ParticleVector(first, last); } template void SubProcess::setOutgoing(InputIterator first, InputIterator last) { theOutgoing = ParticleVector(first, last); } } thepeg-1.8.0.orig/EventRecord/ColourSinglet.h0000644000175000017500000002156111747772425017336 0ustar sunsun// -*- C++ -*- // // ColourSinglet.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ColourSinglet_H #define ThePEG_ColourSinglet_H #include "ThePEG/EventRecord/EventConfig.h" namespace ThePEG { /** * A ColourSinglet object represents a set of * colour-connected partons in a total colour-singlet state. The * simplest form is a single string represented by a vector of partons * starting from a colour-triplet parton followed by a number of * colour-octet partons and ending in a anti-triplet. A closed string * is represented by a vector of colour-octet partons. If junctions * are present, there will be a vector of string pieces containing the * associated partons, with associated information about the string * pieces connected via sinks or sources. * * @see ColourLine * @see Particle * */ class ColourSinglet { public: /** A piece of string. */ typedef deque StringPiece; /** An integer type used as index in a string pieece. */ typedef StringPiece::size_type Index; /** Representaion of a junction. */ typedef pair Junction; public: /** * Default constructor. */ ColourSinglet() {} /** * Constructor taking an initial colour line and a set of partons to * select from. */ ColourSinglet(tcColinePtr cl, tcParticleSet & left); protected: /** * Internal constructor. When splitting an internal line, create a * new colour singlet starting from the string piece \a si in the * singlet \a cs. */ ColourSinglet(const ColourSinglet & cs, Index si); public: /** * Access the vector of partons. */ tcPVector & partons() { return thePartons; } /** * Access the vector of partons. */ const tcPVector & partons() const { return thePartons; } /** * Access a parton giving an index. */ tcPPtr parton(tcPVector::size_type i) const { return thePartons[i]; } /** * Return the total momentum for the partons in the colour singlet. */ LorentzMomentum momentum() const; /** * Return the number of string pieces. */ Index nPieces() const { return thePieces.size(); } /** * Return the partons belonging to string piece with index i (note * that the indices starts with 1). */ StringPiece & piece(Index i) { return thePieces[i - 1]; } /** * Return the partons belonging to string piece with index i (note * that the indices starts with 1). */ const StringPiece & piece(Index i) const { return thePieces[i - 1]; } /** * Return the sink (or source if \a forward is false) neighbors of * a string piece with index i (note that the indices starts with 1). */ Junction & junction(Index i, bool forward) { return forward ? sink(i) : source(i); } /** * Return the sink (or source if \a forward is false) neighbors of * a string piece with index i (note that the indices starts with 1). */ const Junction & junction(Index i, bool forward) const { return forward ? sink(i) : source(i); } /** * Return the sink or source neighbors of a string piece with index * i (note that the indices starts with 1). */ Junction & sink(Index i) { return theSinks[i - 1]; } /** * Return the sink or source neighbors of a string piece with index * i (note that the indices starts with 1). */ const Junction & sink(Index i) const { return theSinks[i - 1]; } /** * Return the sink or source neighbors of a string piece with index * i (note that the indices starts with 1). */ Junction & source(Index i) { return theSources[i - 1]; } /** * Return the sink or source neighbors of a string piece with index * i (note that the indices starts with 1). */ const Junction & source(Index i) const { return theSources[i - 1]; } /** * Extract colour-singlet strings/clusters of partons from the given * set. The set will be empty afterwards if all went well - even * colour-singlet particles will be removed. */ static vector getSinglets(tcParticleSet & left); /** * Extract colour-singlet strings/clusters of partons from the given * range of particles. */ template static vector getSinglets(Iterator first, Iterator last) { tcParticleSet pset(first, last); return getSinglets(pset); } /** * Return a vector with data objects corresponding to all triplet * partons in this singlet. */ tcPDVector getTripletData() const; /** * Split a junction string. Split an internal string piece \a sp * (one that starts from a source and ends in a sink). Randomly pair * together the connectin string pieces and randomly assign possible * colour octet partons to the two joined string pieces. The singlet * will then split into two - one is returned and this will contain * the other. If no argument is given, a random internal line will * be picked. */ ColourSinglet splitInternal(Index sp = 0); /** * Split a junction string. Split an internal string piece \a sp * (one that starts from a source and ends in a sink). The source * neighbour \a sa will be joined with the sink neighbour \a * sc. Possible colour octet partons in the split string piece will * be assigned to the joined \a sa-\a sc string piece if the * corresponing \a assign element is true. The singlet will then * split into two - one is returned and this will contain the other. */ ColourSinglet splitInternal(Index sp, Index sa, Index sc, const vector & assing); /** * Split a junction string. If a sting piece \a sp is connected to a * junction and ends in a diquark diq, split the diquark into two * quarks, remove the junction, adding the other partons to the * first neighbouring string piece if the corresponding \a assign * element is true. The singlet will then split into two - one is * returned and this will contain the other. Note that the * parent-children relationship and colour flows of the diquark and * the two quarks is not handled by this function. */ ColourSinglet splitDiQuarkJunction(Index sp, tcPPtr diq, tcPPair qq, const vector & assign = vector()); /** * Split a di-quark string. If this singlet is a simple string with * (anti-)diquarks in both ends, split the diquarks into the given * quark pairs and create two new string pieces the betwen the quark * and anit-quarks, adding the remaining partons to the first piece * if the corresponding \a assign element is true. The singlet will * then split into two - one is returned and this will contain the * other. Note that the parent-children relationship and colour * flows of the diquark and the two quarks is not handled by this * function. */ ColourSinglet splitDiDiQuark(tcPPair qq1, tcPPair qq2, const vector & assign = vector()); /** * Swap this colour singlet for the argument. */ void swap(ColourSinglet & x) { thePartons.swap(x.thePartons); thePieces.swap(x.thePieces); theSources.swap(x.theSources); theSinks.swap(x.theSinks); } private: /** * Fill a string piece. Follow a colour line \a forward in colour * removing partons from the \a left set and adding them to the * string piece \a s0 as we go along. If a line ends in a colour * sink/source, follow the other two colour lines in turn with the * value of \a forward reversed. */ bool fill(Index s0, bool forward, tcColinePtr first, tcParticleSet & left); /** * Fill a string piece. When creating a new singlet from an old one * which has been split, add the string piece \a i1. If it ends in a * sink or a source add the neighbors recursively. */ void fill(Index i0, bool forward, const ColourSinglet & cs, Index i1); /** * Add a new string piece and return its index. */ Index addPiece() { thePieces.push_back(StringPiece()); theSinks.push_back(Junction()); theSources.push_back(Junction()); return nPieces(); } /** * Add a junction which is a source (or sink if \a forward) to the * string piece \a s0. Return the indices of the two connected * string pieces. */ Junction addJunction(Index s0, bool forward); public: /** @cond EXCEPTIONCLASSES */ /** An exception class to indicate that something went wrong with a * ColourSinglet. */ class ColourSingletException: public Exception {}; /** @endcond */ private: /** * The vector of all partons. */ tcPVector thePartons; /** * The different string pieces. */ vector thePieces; /** * The source neighbours of the string pieces. */ vector theSources; /** * The sink neighbours of the string pieces. */ vector theSinks; }; } #endif /* ThePEG_ColourSinglet_H */ thepeg-1.8.0.orig/EventRecord/ColourLine.h0000644000175000017500000002156211747772425016621 0ustar sunsun// -*- C++ -*- // // ColourLine.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ColourLine_H #define ThePEG_ColourLine_H // This is the declaration of the ColourLine class. #include "EventConfig.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/EventRecord/ColourSinglet.h" namespace ThePEG { /** * The ColourLine class represents colour lines connecting * Particles. A ColourLine keeps track on * the particles connected to it. To connect a particle to a colour * line the addColoured() and * addAntiColoured() functions should be used - these * will automatically set up the Particle correctly. There is no * method in a Particle to directly set its colour lines. * * If a colour line stems from a colour source or ends in a colour * sink, it is possible to obtain the neighbouring colour lines. This * is also the way junction strings and sinks and sources are * implemented. * * @see Particle * @see ColourBase */ class ColourLine: public EventRecordBase { public: /** @name Creation functions. */ //@{ /** * Create a colour line. Set a pair of colour - anticolour particles * in a newly created colour line. */ static tColinePtr create(tPPtr col, tPPtr anti); /** * Create a colour line. Set a particle for which the created object * is a (anti-)colour line . * @param p the particle to be connected. * @param anti if true, the created object is the anti-colour line * of \a p. */ static tColinePtr create(tPPtr p, bool anti = false); /** * Create a colour line. Set a particle for which the created object * is a anti-colour line . * @param p the particle to be connected. */ static tColinePtr createAnti(tPPtr p) { return create(p, true); } /** * Create a coloue line which is a connector between two junctions, * a source junction with neigboring colour lines \a son1 and \a * son2 and a sink junction with neigboring colour lines \a sin1 and * \a sin2. */ static tColinePtr create(tColinePtr son1, tColinePtr son2, tColinePtr sin1, tColinePtr sin2); //@} /** * Destructor. */ virtual ~ColourLine(); public: /** @name Access particles connected to the colour line. */ //@{ /** * Return the vectors of particles connected to this line with their * colours. */ const tPVector & coloured() const { return theColoured; } /** * Return the vectors of particles connected to this line with their * anti-colours. */ const tPVector & antiColoured() const { return theAntiColoured; } /** * Return the first particle on this colour line. Returns null if * this line stems from a colour source. If the particle is * outgoing, its anti colour is connected, otherwise its colour is * connected. */ tPPtr startParticle() const; /** * Return the last particle on this colour line. Returns null if * this line ends in a colour sink. If the particle is outgoing, its * colour is connected, otherwise its anti colour is connected. */ tPPtr endParticle() const; //@} /** @name Add and remove particles in a colour line. */ //@{ /** * Add a particle having this as a anti-colour line. */ void addAntiColoured(tPPtr); /** * Add a particle having this as a (anti-)colour line. * @param p the particle to be connected. * @param anti if true, this is the anti-colour line of \a p. */ void addColoured(tPPtr p, bool anti = false); /** * Add a particle having this as a anti-colour line at a given index. */ void addAntiColouredIndexed(tPPtr p, int index); /** * Add a particle having this as a (anti-)colour line at a given index. * @param p the particle to be connected. * @param anti if true, this is the anti-colour line of \a p. */ void addColouredIndexed(tPPtr p, int index, bool anti=false); /** * Remove a particle having this as an anti-colour line. */ void removeAntiColoured(tPPtr); /** * Remove a particle having this as a (anti-)colour line. * @param p the particle to be removed. * @param anti if true, this is the anti-colour line of \a p. */ void removeColoured(tPPtr p, bool anti = false); //@} /** @name Functions for junction strings. */ //@{ /** * If this colour line ends in a colour sink, these two colour lines * ends in the same. */ tColinePair sinkNeighbours() const { return theSinkNeighbours; } /** * If this colour line stems from a colour source (sink), these two colour * lines stems from (ends in) the same. * @param anti if true return sinkNeighbours(). */ tColinePair sourceNeighbours(bool anti = false) const { return anti? theSinkNeighbours: theSourceNeighbours; } /** * Add two colour lines as neighbours to this line. Afterwards all * three will end in the same sink. Also the neighbors are set up * correspondingly. */ void setSinkNeighbours(tColinePtr l1, tColinePtr l2) { theSinkNeighbours.second = l1->theSinkNeighbours.second = l2; l2->theSinkNeighbours.second = theSinkNeighbours.first = l1; l1->theSinkNeighbours.first = l2->theSinkNeighbours.first = this; } /** * Add two colour lines as neighbours to this line. Afterwards all * three will stem from the same source. Also the neighbors are set * up correspondingly. */ void setSourceNeighbours(tColinePtr l1, tColinePtr l2) { theSourceNeighbours.second = l1->theSourceNeighbours.second = l2; l2->theSourceNeighbours.second = theSourceNeighbours.first = l1; l1->theSourceNeighbours.first = l2->theSourceNeighbours.first = this; } //@} /** * Join with the given ColourLine. The colour of the given \a line * is joined so that it will flow into this line, ie. the * anti-coloured particle in the end of the \a line will become * connected to the coloured particle in the of this line. After * the joining the given \a line will not be connected to * anything. */ bool join(ColinePtr line); /** * Return the first (anti-)coloured parton among the given range of * particles which is on this colour line. */ template typename std::iterator_traits::value_type getColouredParticle(Iterator first, Iterator last, bool anti = false) const { typedef typename std::iterator_traits::value_type ParticlePointer; for ( ; first != last; ++first ) if ( (**first).coloured() && (**first).hasColourLine(this, anti) ) return *first; return ParticlePointer(); } /** * Write out information about this colour line to the stream. */ void write(ostream & os, tcEventPtr event, bool anti) const; public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard function for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); private: /** * The particles connecting to this colour line, following the * incoming colour flow. */ tPVector theColoured; /** * The particles connecting to this colour line, following the * outgoing colour flow. */ tPVector theAntiColoured; /** * If this colour line stems from a colour source, these two colour * lines stems from the same. */ tColinePair theSourceNeighbours; /** * If this colour line ends in a colour sink, these two colour lines * ends in the same. */ tColinePair theSinkNeighbours; /** * Colour lines which are connectors between two junctions do not * have a particle which owns it, instead it is owned by one of the * source neighbours. */ vector orphanedConnectors; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initColourLine; /** * Private and non-existent assignment operator. */ ColourLine & operator=(const ColourLine &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of ColourLine. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ColourLine. */ typedef EventRecordBase NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::ColourLine"; } /** Return the name of the shared library to be loaded to get * access to this class. */ static string library() { return "ColourLine.so"; } }; /** @endcond */ } #endif /* ThePEG_ColourLine_H */ thepeg-1.8.0.orig/EventRecord/SpinInfo.cc0000644000175000017500000001015211747772425016422 0ustar sunsun// -*- C++ -*- // // SpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SpinInfo class. // // Author: Peter Richardson // #include "SpinInfo.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Repository/EventGenerator.h" #include "Event.h" using namespace ThePEG; const double SpinInfo::_eps=1.0e-8; SpinInfo::SpinInfo(const SpinInfo & x) : EventInfoBase(x), _production(x._production), _decay(x._decay), _timelike(x._timelike), _prodloc(x._prodloc), _decayloc(x._decayloc), _decayed(x._decayed), _developed(x._developed),_rhomatrix(x._rhomatrix), _Dmatrix(x._Dmatrix),_spin(x._spin), _productionmomentum(x._productionmomentum), _decaymomentum(x._decaymomentum), _currentmomentum(x._currentmomentum) { x._production=VertexPtr(); x._decay=VertexPtr(); // set the vertex so it now points to the copy if(_production) { // for timelike if(_timelike) _production->resetOutgoing(this,_prodloc); // for spacelike else _production->resetIncoming(this,_prodloc); } } EIPtr SpinInfo::clone() const { tcSpinPtr temp=this; return const_ptr_cast(temp); } void SpinInfo::rebind(const EventTranslationMap & trans) { if(_production) _production = trans.translate(_production); if(_decay) _decay = trans.translate(_decay); EventInfoBase::rebind(trans); } NoPIOClassDescription SpinInfo::initSpinInfo; // Definition of the static class description member. void SpinInfo::Init() {} void SpinInfo::update() const { // number of instances fo this object int nref=referenceCount(); if(nref<2||nref>3) return; // work out the number of references there should be int nmin=0; // check the production pointers if(_production) { if(_timelike) { if(_production->outgoing()[_prodloc]==this) ++nmin;} else { if(_production->incoming()[_prodloc]==this) ++nmin;} } // check the decay pointers if(_decay) { if(_decay->incoming()[_decayloc]==this) ++nmin; } // delete the pointers SpinPtr temp; if(nmin+1==nref) { // delete the production pointers if(_production) { if(_timelike) { if(_production->outgoing()[_prodloc]==this) _production->resetOutgoing(SpinPtr(),_prodloc); } else { if(_production->incoming()[_prodloc]==this) _production->resetIncoming(SpinPtr(),_prodloc); } } // delete the decay pointers if(_decay) { if(_decay->incoming()[_decayloc]==this) _decay->resetIncoming(SpinPtr(),_decayloc); } } } void SpinInfo::decay() const { // if the particle has already been decayed do nothing if(_decayed) return; // otherwise we need to obtain the correct rho matrix assert(_developed!=NeedsUpdate); if(_developed==Developed&&iSpin()!=PDT::Spin0) { _developed=NeedsUpdate; if(_production) _rhomatrix = _production->getRhoMatrix(_prodloc,true); } else { if(_production) _rhomatrix = _production->getRhoMatrix(_prodloc,false); } _decaymomentum = _currentmomentum; _decayed=true; } void SpinInfo::redevelop() const { assert(developed()==NeedsUpdate); // update the D matrix of this spininfo _Dmatrix = decayVertex() ? decayVertex()->getDMatrix(decayLocation()) : RhoDMatrix(iSpin()); _developed = Developed; // update the parent if needed if(productionVertex() && productionVertex()->incoming().size()==1) { tcSpinPtr parent = productionVertex()->incoming()[0]; if(parent->developed()==NeedsUpdate) parent->redevelop(); } } void SpinInfo::develop() const { // if the particle has already been developed do nothing switch(_developed) { case Developed: return; case NeedsUpdate: redevelop(); return; case Undeveloped: if(_decay) _Dmatrix= _decay->getDMatrix(_decayloc); else { _Dmatrix=RhoDMatrix(iSpin()); } _developed=Developed; return; } } thepeg-1.8.0.orig/EventRecord/RemnantParticle.fh0000644000175000017500000000051011747772425017772 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RemnantParticle class. // #ifndef THEPEG_RemnantParticle_FH #define THEPEG_RemnantParticle_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class RemnantParticle; } namespace ThePEG { ThePEG_DECLARE_POINTERS(ThePEG::RemnantParticle,RemPPtr); } #endif thepeg-1.8.0.orig/EventRecord/EventInfoBase.cc0000644000175000017500000000102611754473550017360 0ustar sunsun// -*- C++ -*- // // EventInfoBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the EventInfoBase class. // #include "EventInfoBase.h" using namespace ThePEG; NoPIOClassDescription EventInfoBase::initEventInfoBase; thepeg-1.8.0.orig/EventRecord/HelicityVertex.fh0000644000175000017500000000042511747772425017657 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the HelicityVertex class. // #ifndef ThePEG_HelicityVertex_FH #define ThePEG_HelicityVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { ThePEG_DECLARE_CLASS_POINTERS(HelicityVertex,VertexPtr); } #endif thepeg-1.8.0.orig/EventRecord/Particle.fh0000644000175000017500000000036211747772425016452 0ustar sunsun// -*- C++ -*- // // This is the Forward declaration of the Particle class. // #ifndef ThePEG_Particle_FH #define ThePEG_Particle_FH #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class Particle; } #endif /* ThePEG_Particle_FH */ thepeg-1.8.0.orig/EventRecord/SubProcess.cc0000644000175000017500000001135411747772425016772 0ustar sunsun// -*- C++ -*- // // SubProcess.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SubProcess class. // #include "SubProcess.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "SubProcess.tcc" #endif using namespace ThePEG; SubProcess:: SubProcess(const PPair & newIncoming, tCollPtr newCollision, tcEventBasePtr newHandler, tSubProPtr newHead, double newGroupWeight) : theHandler(newHandler), theCollision(newCollision), theIncoming(newIncoming), isDecayed(false), theHead(newHead), theGroupWeight(newGroupWeight) {} SubProcess::~SubProcess() {} SubProPtr SubProcess::clone() const { return ptr_new(*this); } void SubProcess::addIntermediate(tPPtr p, bool fixrelations) { if ( fixrelations ) { incoming().first->rep().theChildren.push_back(p); incoming().second->rep().theChildren.push_back(p); p->rep().theParents.push_back(incoming().first); p->rep().theParents.push_back(incoming().second); } theIntermediates.push_back(p); } void SubProcess::addOutgoing(tPPtr p, bool fixrelations) { if ( fixrelations ) { if ( intermediates().empty() ) { incoming().first->rep().theChildren.push_back(p); incoming().second->rep().theChildren.push_back(p); p->rep().theParents.push_back(incoming().first); p->rep().theParents.push_back(incoming().second); } else { for (ParticleVector::iterator it = theIntermediates.begin(); it != theIntermediates.end(); ++it ) { (**it).rep().theChildren.push_back(p); p->rep().theParents.push_back(*it); } } } theOutgoing.push_back(p); } void SubProcess::changeIncoming(tPPtr pnew, tPPtr pold) { if(pold==theIncoming.first) { theIntermediates.push_back(pold); theIncoming.first = pnew; } else if(pold==theIncoming.second) { theIntermediates.push_back(pold); theIncoming.second = pnew; } } void SubProcess::rebind(const EventTranslationMap & trans) { theIncoming.first = trans.translate(theIncoming.first); theIncoming.second = trans.translate(theIncoming.second); theCollision = trans.translate(theCollision); for ( ParticleVector::iterator pit = theOutgoing.begin(); pit != theOutgoing.end(); ++pit ) *pit = trans.translate(*pit); for ( ParticleVector::iterator pit = theIntermediates.begin(); pit != theIntermediates.end(); ++pit ) *pit = trans.translate(*pit); } void SubProcess::removeEntry(tPPtr p) { if ( p == theIncoming.first ) theIncoming.first = PPtr(); if ( p == theIncoming.second ) theIncoming.second = PPtr(); ParticleVector::iterator pit = theOutgoing.begin(); while ( pit != theOutgoing.end() ) { if ( *pit == p ) pit = theOutgoing.erase(pit); else ++pit; } pit = theIntermediates.begin(); while ( pit != theIntermediates.end() ) { if ( *pit == p ) pit = theIntermediates.erase(pit); else ++pit; } } void SubProcess::transform(const LorentzRotation & r) { incoming().first->transform(r); incoming().second->transform(r); for_each(intermediates(), Transformer(r)); for_each(outgoing(), Transformer(r)); } void SubProcess::printMe(ostream& os) const { os << "--- incoming:" << endl << *incoming().first << *incoming().second; if ( !intermediates().empty() ) os << "--- intermediates:" << endl; Particle::PrintParticles(os, intermediates().begin(), intermediates().end()); os << "--- outgoing:" << endl; Particle::PrintParticles(os, outgoing().begin(), outgoing().end()); } ostream & ThePEG::operator<<(ostream & os, const SubProcess & sp) { sp.printMe(os); return os; } void SubProcess::debugme() const { cerr << *this; EventRecordBase::debugme(); } void SubProcess::persistentOutput(PersistentOStream & os) const { EventConfig::putHandler(os, theHandler); os << theCollision << theIncoming << theIntermediates << theOutgoing << isDecayed << theHead << theGroupWeight; } void SubProcess::persistentInput(PersistentIStream & is, int) { EventConfig::getHandler(is, theHandler); is >> theCollision >> theIncoming >> theIntermediates >> theOutgoing >> isDecayed >> theHead >> theGroupWeight; } ClassDescription SubProcess::initSubProcess; void SubProcess::Init() {} ThePEG_IMPLEMENT_SET(SubProPtr,SubProcessSet) thepeg-1.8.0.orig/EventRecord/ColourLine.cc0000644000175000017500000001204211747772425016750 0ustar sunsun// -*- C++ -*- // // ColourLine.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ColourLine class. // #include "ColourLine.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; tColinePtr ColourLine::create(tPPtr col, tPPtr anti) { if ( col->colourLine() || anti->antiColourLine() ) return tColinePtr(); ColinePtr l = new_ptr(ColourLine()); l->addColoured(col); l->addAntiColoured(anti); return l; } tColinePtr ColourLine::create(tPPtr col, bool anti) { if ( col->colourLine(anti) ) return tColinePtr(); ColinePtr l = new_ptr(ColourLine()); l->addColoured(col, anti); return l; } tColinePtr ColourLine::create(tColinePtr son1, tColinePtr son2, tColinePtr sin1, tColinePtr sin2) { if ( !son1 || !son2 || !sin1 || !sin2 ) return tColinePtr(); ColinePtr l = new_ptr(ColourLine()); l->theSourceNeighbours = make_pair(son1, son2); son1->theSourceNeighbours = make_pair(son2, l); son2->theSourceNeighbours = make_pair(l, son1); l->theSinkNeighbours = make_pair(sin1, sin2); sin1->theSinkNeighbours = make_pair(sin2, l); sin2->theSinkNeighbours = make_pair(l, sin1); son1->orphanedConnectors.push_back(l); return l; } ColourLine::~ColourLine() {} tPPtr ColourLine::startParticle() const { if ( sourceNeighbours().first ) return tPPtr(); for ( tPVector::const_reverse_iterator it = antiColoured().rbegin(); it != antiColoured().rend(); ++it ) if ( !(**it).outgoingAntiColour() ) return *it; return tPPtr(); } tPPtr ColourLine::endParticle() const { if ( sinkNeighbours().first ) return tPPtr(); for ( tPVector::const_reverse_iterator it = coloured().rbegin(); it != coloured().rend(); ++it ) if ( !(**it).outgoingColour() ) return *it; return tPPtr(); } void ColourLine::addAntiColouredIndexed(tPPtr p, int index) { theAntiColoured.push_back(p); Ptr::pointer colour = dynamic_ptr_cast::pointer> (p->colourInfo()); colour->antiColourLine(this, index); } void ColourLine::addColouredIndexed(tPPtr p, int index, bool anti) { if ( anti ) addAntiColouredIndexed(p, index); else { theColoured.push_back(p); Ptr::pointer colour = dynamic_ptr_cast::pointer> (p->colourInfo()); colour->colourLine(this, index); } } void ColourLine::addAntiColoured(tPPtr p) { theAntiColoured.push_back(p); p->colourInfo()->antiColourLine(this); } void ColourLine::addColoured(tPPtr p, bool anti) { if ( anti ) addAntiColoured(p); else { theColoured.push_back(p); p->colourInfo()->colourLine(this); } } void ColourLine::removeAntiColoured(tPPtr p) { tPVector::iterator cp=find(range(theAntiColoured), p); if(cp!=theAntiColoured.end()) theAntiColoured.erase(cp); p->colourInfo()->removeAntiColourLine(this); } void ColourLine::removeColoured(tPPtr p, bool anti) { if ( anti ) removeAntiColoured(p); else { tPVector::iterator cp=find(range(theColoured), p); if(cp!=theColoured.end()) theColoured.erase(cp); p->colourInfo()->removeColourLine(this); } } bool ColourLine::join(ColinePtr line) { if ( !startParticle() || startParticle() != line->endParticle() ) return false; while ( line->coloured().size() ) { tPPtr p = line->coloured()[0]; line->removeColoured(p); theColoured.insert(theColoured.begin(), p); p->colourInfo()->colourLine(this); } while ( line->antiColoured().size() ) { tPPtr p = line->antiColoured()[0]; line->removeAntiColoured(p); theAntiColoured.push_back(p); p->colourInfo()->antiColourLine(this); } return true; } void ColourLine::write(ostream & os, tcEventPtr event, bool anti) const { os << ( anti? '-': '+' ); int index = event->colourLineIndex(this); if ( sourceNeighbours().first && sourceNeighbours().second ) os << '(' << event->colourLineIndex(sourceNeighbours().first) << '*' << event->colourLineIndex(sourceNeighbours().second) << ')'; os << index; if ( sinkNeighbours().first && sinkNeighbours().second ) os << '(' << event->colourLineIndex(sinkNeighbours().first) << '.' << event->colourLineIndex(sinkNeighbours().second) << ')'; } void ColourLine::persistentOutput(PersistentOStream & os) const { os << theColoured << theAntiColoured << theSourceNeighbours << theSinkNeighbours << orphanedConnectors; } void ColourLine::persistentInput(PersistentIStream & is, int) { is >> theColoured >> theAntiColoured >> theSourceNeighbours >> theSinkNeighbours >> orphanedConnectors; } ClassDescription ColourLine::initColourLine; // Definition of the static class description member. thepeg-1.8.0.orig/EventRecord/EventInfoBase.h0000644000175000017500000000354711754473550017234 0ustar sunsun// -*- C++ -*- // // EventInfoBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventInfoBase_H #define ThePEG_EventInfoBase_H // This is the declaration of the EventInfoBase class. #include "ThePEG/EventRecord/EventConfig.h" #include "ThePEG/Utilities/ClassDescription.h" namespace ThePEG { /** * EventInfoBase is a base class for information objects. It is used * as a base class for classes representing user-defined information * which may be associated with a Particle. The class itself is * practically empty. Information added in sub-classes can be accessed * from a Particle by the Particle::getInfo() function and the * resulting pointers need to be dynamically cast to check if they are * of a desired class. */ class EventInfoBase: public EventRecordBase { public: /** * Rebind to cloned objects. If an EventInfoBase is cloned together * with a whole Event and this has pointers to other event record * objects, these should be rebound to their clones in this * function. */ virtual void rebind(const EventTranslationMap & ) {} /** * Standard Init function. @see Base::Init(). */ static void Init() {} /** * Standard clone method. */ virtual EIPtr clone() const { return new_ptr(*this); } private: /** * Describe concrete class without persistent data. */ static NoPIOClassDescription initEventInfoBase; /** * Private and non-existent assignment operator. */ EventInfoBase & operator=(const EventInfoBase &); }; /** @cond TRAITSPECIALIZATIONS */ ThePEG_DECLARE_CLASS_TRAITS(EventInfoBase,EventRecordBase); /** @endcond */ } #endif /* ThePEG_EventInfoBase_H */ thepeg-1.8.0.orig/EventRecord/SelectorBase.h0000644000175000017500000002256011754473550017113 0ustar sunsun// -*- C++ -*- // // SelectorBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SelectorBase_H #define ThePEG_SelectorBase_H // This is the declaration of the SelectorBase class. #include "EventConfig.h" namespace ThePEG { /** * Classes derived from the SelectorBase class are used * to extract particles from an Event with * Event::select() method. There are five different kinds * of checks done by a selector object in the * Event::select method. If the * allCollisions() method returns false, only particles * which belongs to the primary collision in an event will be * considered for extraction. Furthermore if the * allSteps() method returns false, only particles * present in the final step of each collision will be considered. If * finalState() returns false, final state particles will * not be considered and if intermediate() returns false, * intermediate particles will not be considered. Finally among all * considered particles, only the ones for which the check(const * Particle &) returns true will be extracted. * * * * * @see StandardSelectors * @see Event * @see Collision * @see Step * @see Particle * */ class SelectorBase { public: /** * Virtual destructor. */ virtual ~SelectorBase() {} /** * Static method corresponding to the virtual check() method. */ static bool Check(const Particle &) { return true; } /** * Static method corresponding to the virtual intermediate() method. */ static bool Intermediate() { return true; } /** * Static method corresponding to the virtual finalState() method. */ static bool FinalState() { return true; } /** * Static method corresponding to the virtual allSteps() method. */ static bool AllSteps() { return true; } /** * Static method corresponding to the virtual allCollisions() method. */ static bool AllCollisions() { return true; } /** * Return true if the particle should be extracted. */ virtual bool check(const Particle & p) const { return Check(p); } /** * Return true if final state particles are to be considered. */ virtual bool finalState() const { return FinalState(); } /** * Return true if intermediate particles should be considered. */ virtual bool intermediate() const { return Intermediate(); } /** * Return true if all steps should be considered. Otherwise only the * last step in each collision is considered. */ virtual bool allSteps() const { return AllSteps(); } /** * Return ture if all collisions should be considered. Otherwise * only the primary collision will be considered. */ virtual bool allCollisions() const { return AllCollisions(); } }; /** * The templated ParticleSelector class may be used to * implement derived classes from the SelectorBase * class. The requirement on the template class is that it implements * the static AllCollisions(), AllSteps(), * FinalState(), Intermediate() and * Check(const Particle &) (corresponding to the virtual * ones in ParticleSelector). */ template struct ParticleSelector: public SelectorBase { /** * Static method corresponding to the virtual check() method. */ static bool Check(const Particle & p) { return T::Check(p); } /** * Static method corresponding to the virtual intermediate() method. */ static bool Intermediate() { return T::Intermediate(); } /** * Static method corresponding to the virtual finalState() method. */ static bool FinalState() { return T::FinalState(); } /** * Static method corresponding to the virtual allSteps() method. */ static bool AllSteps() { return T::AllSteps(); } /** * Static method corresponding to the virtual allCollisions() method. */ static bool AllCollisions() { return T::AllCollisions(); } /** * Return true if the particle should be extracted. */ virtual bool check(const Particle & p) const { return Check(p); } /** * Return true if final state particles are to be considered. */ virtual bool finalState() const { return FinalState(); } /** * Return true if intermediate particles should be considered. */ virtual bool intermediate() const { return Intermediate(); } /** * Return true if all steps should be considered. Otherwise only the * last step in each collision is considered. */ virtual bool allSteps() const { return AllSteps(); } /** * Return ture if all collisions should be considered. Otherwise * only the primary collision will be considered. */ virtual bool allCollisions() const { return AllCollisions(); } }; /** * The SelectIfNot classes can be used to negate the meaning of * another SelectorBase object. */ class SelectIfNot: public SelectorBase { public: /** Constructor taking the SelectorBase object to be negated. */ explicit SelectIfNot(const SelectorBase & S) : s(S) {} /** * Return true if the particle should be extracted. */ virtual bool check(const Particle & p) const { return !s.check(p); } /** * Return true if final state particles are to be considered. */ virtual bool finalState() const { return !s.finalState(); } /** * Return true if intermediate particles should be considered. */ virtual bool intermediate() const { return !s.intermediate(); } /** * Return true if all steps should be considered. Otherwise only the * last step in each collision is considered. */ virtual bool allSteps() const { return !s.allSteps(); } /** * Return ture if all collisions should be considered. Otherwise * only the primary collision will be considered. */ virtual bool allCollisions() const { return !s.allCollisions(); } private: /** * The selector to be negated. */ const SelectorBase & s; }; /** * The SelectIfBoth class can be used to combine other selector * objects. Particles which would be extracted with either selectors * will be extractor. */ class SelectIfBoth: public SelectorBase { public: /** * Constructor taking two SelectorBase object to be combiden. */ SelectIfBoth(const SelectorBase & S1, const SelectorBase & S2) : s1(S1), s2(S2) {} /** * Return true if the particle should be extracted. */ virtual bool check(const Particle & p) const { return s1.check(p) && s2.check(p); } /** * Return true if final state particles are to be considered. */ virtual bool finalState() const { return s1.finalState() && s2.finalState(); } /** * Return true if intermediate particles should be considered. */ virtual bool intermediate() const { return s1.intermediate() && s2.intermediate(); } /** * Return true if all steps should be considered. Otherwise only the * last step in each collision is considered. */ virtual bool allSteps() const { return s1.allSteps() && s2.allSteps(); } /** * Return ture if all collisions should be considered. Otherwise * only the primary collision will be considered. */ virtual bool allCollisions() const { return s1.allCollisions() && s2.allCollisions(); } private: /** * One selector to be combined. */ const SelectorBase & s1; /** * The other selector to be combined. */ const SelectorBase & s2; }; /** * The SelectIfEither class can be used to combine other selector * objects. Only particles which would be extracted with both selectors * will be extractor. */ class SelectIfEither: public SelectorBase { public: /** * Constructor taking two SelectorBase object to be combiden. */ SelectIfEither(const SelectorBase & S1, const SelectorBase & S2) : s1(S1), s2(S2) {} /** * Return true if the particle should be extracted. */ virtual bool check(const Particle & p) const { return s1.check(p) || s2.check(p); } /** * Return true if final state particles are to be considered. */ virtual bool finalState() const { return s1.finalState() || s2.finalState(); } /** * Return true if intermediate particles should be considered. */ virtual bool intermediate() const { return s1.intermediate() || s2.intermediate(); } /** * Return true if all steps should be considered. Otherwise only the * last step in each collision is considered. */ virtual bool allSteps() const { return s1.allSteps() || s2.allSteps(); } /** * Return ture if all collisions should be considered. Otherwise * only the primary collision will be considered. */ virtual bool allCollisions() const { return s1.allCollisions() || s2.allCollisions(); } private: /** * One selector to be combined. */ const SelectorBase & s1; /** * The other selector to be combined. */ const SelectorBase & s2; }; /** Helper function to be used together with SelectorBase objects. */ template inline void copyIfCheck(OutputIterator r, const Container & c, const SelectorBase & s) { for ( typename Container::const_iterator it = c.begin(); it != c.end(); ++it ) if ( s.check(**it) ) *r++ = *it; } } #endif /* ThePEG_SelectorBase_H */ thepeg-1.8.0.orig/EventRecord/Event.cc0000644000175000017500000002460311747772425015764 0ustar sunsun// -*- C++ -*- // // Event.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined member functions of // the Event class. // #include "Event.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/DIterator.h" #include using namespace ThePEG; Event::Event(const PPair & newIncoming, tcEventBasePtr newHandler, string newName, long newNumber, double newWeight) : Named(newName), theIncoming(newIncoming), theHandler(newHandler), theNumber(newNumber), theWeight(newWeight), theParticleNumber(0) { addParticle(incoming().first); addParticle(incoming().second); } Event::Event(const Event & e) : Base(e), Named(e), theIncoming(e.theIncoming), theCollisions(e.theCollisions), allSteps(e.allSteps), allSubProcesses(e.allSubProcesses), allParticles(e.allParticles), theHandler(e.theHandler), theNumber(e.theNumber), theWeight(e.theWeight), theParticleNumber(e.theParticleNumber) {} Event::~Event() { for ( int i = 0, N = theCollisions.size(); i < N; ++i ) if ( theCollisions[i]->event() == this ) theCollisions[i]->theEvent = tEventPtr(); theIncoming = PPair(); theCollisions.clear(); allSteps.clear(); allSubProcesses.clear(); allParticles.clear(); theHandler = tcEventBasePtr(); theColourLines.clear(); theNumber = -1; theWeight = 0.0; } void Event::setInfo(tcEventBasePtr newHandler, string newName, long newNumber, double weight) { theHandler = newHandler; name(newName); theNumber = newNumber; theWeight = weight; } double Event::optionalWeight(const string& name) const { map::const_iterator w = theOptionalWeights.find(name); if ( w == theOptionalWeights.end() ) return 0.; return w->second; } void Event::optionalWeight(const string& name, double value) { theOptionalWeights[name] = value; } tCollPtr Event::newCollision() { theCollisions.push_back(new_ptr(Collision(incoming(), this))); return theCollisions.back(); } tStepPtr Event::newStep() { if ( theCollisions.empty() ) newCollision(); return theCollisions.back()->newStep(); } void Event::addCollision(tCollPtr c) { if ( !c ) return; theCollisions.push_back(c); addParticles(c->all().begin(), c->all().end()); allSubProcesses.insert(c->subProcesses().begin(), c->subProcesses().end()); } void Event::addParticle(tPPtr p) { if ( !p ) return; if ( member(allParticles, p) ) return; allParticles.insert(p); p->number(++theParticleNumber); } void Event::transform(const LorentzRotation & r) { for_each(allParticles, Transformer(r)); } int Event::colourLineIndex(tcColinePtr line) const { ColourLineMap::const_iterator found = theColourLines.find(line); if ( found != theColourLines.end() ) return found->second; int index = theColourLines.size() + 1; theColourLines[line] = index; return index; } void Event::primaryCollision(tCollPtr c) { if ( !c ) return; if ( theCollisions.empty() ) theCollisions.push_back(c); else { if ( theCollisions[0] ) for ( ParticleSet::const_iterator it = theCollisions[0]->all().begin(); it != theCollisions[0]->all().end(); ++it ) allParticles.erase(*it); theCollisions[0] = c; } addParticles(c->all().begin(), c->all().end()); } void Event::removeDecay(tPPtr p) { while ( !p->children().empty() ) removeParticle(p->children().back()); } void Event::removeEntry(tPPtr p) { ParticleSet::iterator it = allParticles.find(p); if ( it == allParticles.end() ) return; for ( DIterator cit = theCollisions.begin(); cit != theCollisions.end(); ++cit ) cit->removeEntry(p); allParticles.erase(it); } void Event::removeParticle(tPPtr p) { if ( p->next() ) removeParticle(p->next()); while ( !p->children().empty() ) removeParticle(p->children().back()); removeEntry(p); } void Event::cleanSteps() { for ( DIterator cit = theCollisions.begin(); cit != theCollisions.end(); ++cit ) cit->cleanSteps(); } EventPtr Event::clone() const { EventPtr newEvent = ptr_new(*this); EventTranslationMap trans; trans[this] = newEvent; for ( CollisionVector::const_iterator cit = theCollisions.begin(); cit != theCollisions.end(); ++cit ) trans[*cit] = (**cit).clone(); for ( SubProcessSet::const_iterator spit = allSubProcesses.begin(); spit != allSubProcesses.end(); ++spit ) trans[*spit] = (**spit).clone(); for ( StepSet::const_iterator sit = allSteps.begin(); sit != allSteps.end(); ++sit ) trans[*sit] = (**sit).clone(); for ( ParticleSet::const_iterator pit = allParticles.begin(); pit != allParticles.end(); ++pit ) trans[*pit] = (**pit).clone(); newEvent->rebind(trans); return newEvent; } void Event::rebind(const EventTranslationMap & trans) { theIncoming.first = trans.translate(theIncoming.first); theIncoming.second = trans.translate(theIncoming.second); for ( CollisionVector::iterator cit = theCollisions.begin(); cit != theCollisions.end(); ++cit ) (*cit = trans.translate(*cit))->rebind(trans); SubProcessSet newSubProcesses; for ( SubProcessSet::const_iterator spit = allSubProcesses.begin(); spit != allSubProcesses.end(); ++spit ) newSubProcesses.insert(trans.translate(*spit)); allSubProcesses.swap(newSubProcesses); StepSet newSteps; for ( StepSet::const_iterator sit = allSteps.begin(); sit != allSteps.end(); ++sit ) newSteps.insert(trans.translate(*sit)); allSteps.swap(newSteps); ParticleSet newParticles; for ( ParticleSet::const_iterator pit = allParticles.begin(); pit != allParticles.end(); ++pit ) newParticles.insert(trans.translate(*pit)); allParticles.swap(newParticles); } ostream & ThePEG::operator<<(ostream & os, const Event & e) { os << string(78, '*') << endl << "Event number " << e.number() << " (id: " << e.name() << ") "; if ( e.handler() ) os << "performed by " << EventConfig::nameHandler(e.handler()); os << endl; for ( unsigned int i = 0; i < e.collisions().size(); ++i ) { os << string(78, '=') << endl; if ( e.collisions().size() != 1 ) { if ( i ) { os << "Secondary Collision " << i; if ( e.collisions()[i]->handler() ) os << " performed by " << EventConfig::nameHandler(e.collisions()[i]->handler()); } else os << "Primary Collision"; } os << endl << *e.collisions()[i]; } return os; } // Helpers for the Graphviz output namespace { static const string header = "digraph test {\nrankdir=LR;\nranksep=1.5;\n"; inline long startnode(tcPPtr p) { return p->parents().empty() ? -p->uniqueId : p->parents()[0]->uniqueId; } inline long endnode(tcPPtr p) { return p->children().empty() ? p->uniqueId : startnode( p->children()[0] ); } static const char * colours[] = { "red", "green", "blue", "orange", "aquamarine", "deeppink", "darkviolet", "darkolivegreen", "cyan" }; struct Vertex { tcParticleSet in; tcParticleSet out; }; typedef map VertexMap; template Lorentz5Momentum sumP(Iter a, Iter b) { Lorentz5Momentum sum; for ( Iter it = a; it != b; ++it ) { sum += (*it)->momentum(); } return sum; } } void ThePEG::Event::printGraphviz() const { ThePEG::printGraphviz(cout, this); } void ThePEG::printGraphviz(ostream & os, tcEventPtr ev) { os << header << "node [width=0.03,height=0.03,shape=point,label=\"\"];\n"; tcParticleSet all; ev->select(inserter(all), SelectAll()); VertexMap vertices; for (tcParticleSet::const_iterator it = all.begin(); it != all.end(); ++it) { tcPPtr p = (*it); long start = startnode(p); long end = endnode(p); vertices[start].out.insert(p); vertices[end ].in .insert(p); os << start << " -> " << end << " [label=\"" << p->number() << ' ' << p->PDGName() << "\\n" << p->momentum().e()/GeV << "\\n" << p->momentum().mass()/GeV << "\""; if ( p->hasColourInfo() && ( p->colourLine() || p->antiColourLine() )) { os << ",penwidth=2,color=\""; const vector & clines = p->colourInfo()->colourLines(); for ( int i = 0, N = clines.size(); i < N; ++i ) { int colindex = ev->colourLineIndex(clines[i]) % 9; if ( i > 0 ) os << ':'; os << colours[colindex]; } const vector & aclines = p->colourInfo()->antiColourLines(); for ( int i = 0, N = aclines.size(); i < N; ++i ) { int colindex = ev->colourLineIndex(aclines[i]) % 9; if ( i > 0 || !clines.empty() ) os << ':'; os << colours[colindex]; } os << '"'; } os << "];\n"; } int label = 0; for ( VertexMap::const_iterator v = vertices.begin(); v != vertices.end(); ++v ) { const long vertexId = v->first; const tcParticleSet & in = v->second.in; const tcParticleSet & out = v->second.out; if ( in.empty() || out.empty() ) continue; Lorentz5Momentum diff = sumP(out.begin(), out.end()) - sumP(in.begin(), in.end()); if ( abs(diff.e()) > 1.0*GeV ) { ++label; std::stringstream tail; tail << " [label=\"" << std::setprecision(4) << abs(diff.e()/GeV) << " GeV\",arrowsize=3,penwidth=5," << "color=\"#ff000010\",fontcolor=\"#ff000010\"];\n"; if ( diff.e() > ZERO ) os << "mom" << label << " -> " << vertexId << tail.str(); else os << vertexId << " -> " << "mom" << label << tail.str(); } } os << '}' << endl; } void Event::debugme() const { cerr << *this; EventRecordBase::debugme(); } void Event::persistentOutput(PersistentOStream & os) const { os << theIncoming << theCollisions << allSteps << allSubProcesses << allParticles << theNumber << theWeight << theOptionalWeights << theParticleNumber; EventConfig::putHandler(os, theHandler); } void Event::persistentInput(PersistentIStream & is, int) { is >> theIncoming >> theCollisions >> allSteps >> allSubProcesses >> allParticles >> theNumber >> theWeight >> theOptionalWeights >> theParticleNumber; EventConfig::getHandler(is, theHandler); } ClassDescription Event::initEvent; void Event::Init() {} thepeg-1.8.0.orig/EventRecord/SpinInfo.h0000644000175000017500000002423211754473550016263 0ustar sunsun// -*- C++ -*- // // SpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SpinInfo_H #define ThePEG_SpinInfo_H // This is the declaration of the SpinInfo class. #include "ThePEG/EventRecord/EventInfoBase.h" #include "ThePEG/PDT/PDT.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "HelicityVertex.h" namespace ThePEG { /** * The SpinInfo is the base class for the spin information for the * spin correlation algorithm. The implementations for different spin * states inherit from this. * * The class contains pointers to the vertex where the particle is * produced and where it decays, together with methods to set/get * these. * * There are two flags decayed which store information on the state * of the particle. * * The decayed() members provides access to the _decay data member * which is true if the spin density matrix required to perform the * decay of a timelike particle has been calculated (this would be a * decay matrix for a spacelike particle.) This is set by the * decay() method which calls a method from the production vertex to * calculate this matrix. The decay() method should be called by a * decayer which uses spin correlation method before it uses the * spin density matrix to calculate the matrix element for the * decay. * * The developed() member provides access to the _developed data * member which is true if the decay matrix required to perform the * decays of the siblings of a particle has been calculated (this * would a spin density matrix for a spacelike particle.) This is * set by the developed() method which calls a method from the decay * vertex to calculate the matrix. The developed() method is called * by a DecayHandler which is capable of performing spin * correlations after all the unstable particles produced by a * decaying particle are decayed. * * Methods are also provided to access the spin density and decay * matrices for a particle. * * @author Peter Richardson * */ class SpinInfo: public EventInfoBase { public: /** * Status for the implementation of spin correlations */ enum DevelopedStatus { Undeveloped=0, /**< Not developed. */ Developed=1, /**< Developed. */ NeedsUpdate=2 /**< Developed but needs recalculating due to some change. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ SpinInfo() : _timelike(false), _prodloc(-1), _decayloc(-1), _decayed(false), _developed(Undeveloped) {} /** * Standard Constructor. * @param s the spin. * @param p the production momentum. * @param time true if the particle is time-like. */ SpinInfo(PDT::Spin s, const Lorentz5Momentum & p = Lorentz5Momentum(), bool time = false) : _timelike(time), _prodloc(-1), _decayloc(-1), _decayed(false), _developed(Undeveloped), _rhomatrix(s), _Dmatrix(s), _spin(s), _productionmomentum(p), _currentmomentum(p) {} /** * Copy-constructor. */ SpinInfo(const SpinInfo &); //@} public: /** * Returns true if the polarization() has been implemented in a * subclass. This default version returns false. */ virtual bool hasPolarization() const { return false; } /** * Return the angles of the polarization vector as a pair of * doubles. first is the polar angle and second is the azimuth * wrt. the particles direction. This default version of the * function returns 0,0, and if a subclass implements a proper * function it should also implement 'hasPolarization()' to return * true. */ virtual DPair polarization() const { return DPair(); } public: /** * Standard Init function. */ static void Init(); /** * Rebind to cloned objects. If a FermionSpinInfo is cloned together * with a whole Event and this has pointers to other event record * objects, these should be rebound to their clones in this * function. */ virtual void rebind(const EventTranslationMap & trans); /** * Standard clone method. */ virtual EIPtr clone() const; /** * Method to handle the delelation */ void update() const; /** * Perform a lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum & m, const LorentzRotation & r) { _currentmomentum = m; _currentmomentum.transform(r); } public: /** @name Access the vertices. */ //@{ /** * Set the vertex at which the particle was produced. */ void productionVertex(VertexPtr in) const { _production=in; // add to the list of outgoing if timelike int temp; if(_timelike) in->addOutgoing(this,temp); // or incoming if spacelike else in->addIncoming(this,temp); _prodloc=temp; } /** * Get the vertex at which the particle was produced. */ tcVertexPtr productionVertex() const { return _production; } /** * Set the vertex at which the particle decayed or branched. */ void decayVertex(VertexPtr in) const { _decay=in; int temp; in->addIncoming(this,temp); _decayloc=temp; assert(temp==0); //if(temp!=0){cout << "something dodgy here can only decay once" << endl;} } /** * Get the vertex at which the particle decayed or branched. */ tcVertexPtr decayVertex() const { return _decay; } //@} /** @name Access information about the associated particle. */ //@{ /** * Has the particle decayed? */ bool decayed() const { return _decayed; } /** * Set if the particle has decayed. */ void decayed(bool b) const { _decayed = b; } /** * Return true if the decay matrix required to perform the decays of * the siblings of a particle has been calculated. */ DevelopedStatus developed() const { return _developed; } /** * Calculate the rho matrix for the decay if not already done. */ void decay() const ; /** * Set the developed flag and calculate the D matrix for the decay. */ void develop() const ; /** * Needs update */ void needsUpdate() const {_developed=NeedsUpdate;} /** * Return 2s+1 for the particle */ PDT::Spin iSpin() const { return _spin; } /** * Return the momentum of the particle when it was produced. */ const Lorentz5Momentum & productionMomentum() const { return _productionmomentum; } /** * The current momentum of the particle */ const Lorentz5Momentum & currentMomentum() const { return _currentmomentum; } /** * Return true if particle is timelike (rather than spacelike). */ bool timelike() const { return _timelike; } //@} /** * Access to the locations */ //@{ /** * Production Location */ int productionLocation() const {return _prodloc;} /** * Decay Location */ int decayLocation() const {return _decayloc;} //@} public: /** @name Access the rho and D matrices. */ //@{ /** * Access the rho matrix. */ RhoDMatrix rhoMatrix() const { return _rhomatrix; } /** * Access the rho matrix. */ RhoDMatrix & rhoMatrix() { return _rhomatrix; } /** * Access the D matrix. */ RhoDMatrix DMatrix() const { return _Dmatrix; } /** * Access the D matrix. */ RhoDMatrix & DMatrix() { return _Dmatrix; } //@} protected: /** * Check if momentum is near to the current momentum */ bool isNear(const Lorentz5Momentum & p) { return currentMomentum().isNear(p,_eps); } private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initSpinInfo; /** * Private and non-existent assignment operator. */ SpinInfo & operator=(const SpinInfo &); private: /** * Set the developed flag and calculate the D matrix for the decay, * and all decays further up the chain. */ void redevelop() const ; private: /** * Pointer to the production vertex for the particle */ mutable VertexPtr _production; /** * Pointers to the decay vertex for the particle */ mutable VertexPtr _decay; /** * Is this is timelike (true) or spacelike (false ) particle? This * is used to decide if the particle is incoming or outgoing at the * production vertex */ bool _timelike; /** * Location in the hard vertex array at production. */ mutable int _prodloc; /** * Location in the hard vertex array at decay. */ mutable int _decayloc; /** * Has the particle been decayed? (I.e. has the rho matrix for the * decay been calculated.) */ mutable bool _decayed; /** * Has the particle been developed? (I.e. has the D matrix encoding * the info about the decay been calculated) */ mutable DevelopedStatus _developed; /** * Storage of the rho matrix. */ mutable RhoDMatrix _rhomatrix; /** * Storage of the decay matrix */ mutable RhoDMatrix _Dmatrix; /** * The spin of the particle */ PDT::Spin _spin; /** * Momentum of the particle when it was produced */ Lorentz5Momentum _productionmomentum; /** * Momentum of the particle when it decayed */ mutable Lorentz5Momentum _decaymomentum; /** * Current momentum of the particle */ Lorentz5Momentum _currentmomentum; /** * A small energy for comparing momenta to check if Lorentz Transformations * should be performed */ static const double _eps; }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * SpinInfo. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of SpinInfo. */ typedef EventInfoBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * SpinInfo class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::SpinInfo"; } }; /** @endcond */ } #endif /* ThePEG_SpinInfo_H */ thepeg-1.8.0.orig/EventRecord/Particle.tcc0000644000175000017500000000231511747772425016626 0ustar sunsun// -*- C++ -*- // // Particle.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the templated member functions of // the Particle class. // namespace ThePEG { struct ParticleNumLess { bool operator()(tPPtr p1, tPPtr p2) { return p1->number() < p2->number(); } }; template void Particle:: PrintParticles(ostream & os, Iterator first, Iterator last, tcStepPtr step) { typedef multiset NumSet; NumSet pset(first, last); for ( NumSet::iterator i = pset.begin(); i != pset.end(); ++i ) (**i).print(os, step); } template typename std::iterator_traits::value_type Particle:: colourNeighbour(Iterator first, Iterator last, bool anti) const { if ( !hasColourInfo() || !hasColour(!anti) ) return tPPtr(); tColinePtr line = colourLine(!anti); for ( ; first != last; ++first ) if ( (**first).hasColourInfo() && (**first).hasColourLine(line, anti) ) return *first; return tPPtr(); } } thepeg-1.8.0.orig/EventRecord/SubProcessGroup.h0000644000175000017500000000775311754474155017656 0ustar sunsun// -*- C++ -*- // // SubProcessGroup.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SubProcessGroup_H #define ThePEG_SubProcessGroup_H // This is the declaration of the SubProcessGroup class. #include "ThePEG/EventRecord/SubProcess.h" namespace ThePEG { /** * A SubProcessGroup object represents a group of SubProcess * objects in dependence of a head SubProcess object. * * @see StdXCombGroup * @see MEGroup */ class SubProcessGroup: public SubProcess { public: /** * Standard constructor. * @param newIncoming the two incoming partons. * @param newCollision the Collision to which this SubProcessGroup belongs. * @param newHandler the MEBase object which generated this SubProcessGroup. */ SubProcessGroup(const PPair & newIncoming, tCollPtr newCollision = tCollPtr(), tcEventBasePtr newHandler = tcEventBasePtr()); /** * Destructor. */ virtual ~SubProcessGroup(); /** * Return a clone of this sub process group. */ virtual SubProPtr clone() const; protected: /** * Rebind to cloned objects. When a SubProcessGroup is cloned, a shallow * copy is done first, then all Particles etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned SubProcessGroup points to the cloned * Particles etc. */ virtual void rebind(const EventTranslationMap & trans); public: /** * Perform a LorentzTransformation of all particles in the sub * process. */ virtual void transform(const LorentzRotation &); /** * Return the dependent SubProcess objects */ const SubProcessVector& dependent() const { return theDependent; } /** * Access the dependent SubProcess objects */ SubProcessVector& dependent() { return theDependent; } /** * Add a dependent SubProcess */ void add(tSubProPtr sub) { dependent().push_back(sub); } public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard function for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); private: /** * The dependent subprocesses */ SubProcessVector theDependent; public: /** * Put to ostream */ virtual void printMe(ostream&) const; private: /** * Describe concrete class with persistent data. */ static ClassDescription initSubProcessGroup; /** * Private default constructor must only be used by the * PersistentIStream class via the ClassTraits class . */ SubProcessGroup() : SubProcess() {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; /** * Assignment is forbidden. */ SubProcessGroup & operator=(const SubProcessGroup &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base class of Collision. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of SubProcessGroup. */ typedef EventRecordBase NthBase; }; /** This template specialization informs ThePEG about the name of * the SubProcessGroup class and how to create it. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SubProcessGroup"; } /** Create a SubProcessGroup object. */ static TPtr create() { return TPtr::Create(SubProcessGroup()); } }; /** @endcond */ } #endif /* ThePEG_SubProcessGroup_H */ thepeg-1.8.0.orig/EventRecord/Particle.h0000644000175000017500000007463611747772425016323 0ustar sunsun// -*- C++ -*- // // Particle.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Particle_H #define ThePEG_Particle_H // This is the decalaration of the Particle class. #include "EventConfig.h" #include "ThePEG/Vectors/Lorentz5Vector.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/EventRecord/MultiColour.h" #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/PDT/ParticleData.h" namespace ThePEG { /** * The Particle class is used to describe an instance of a * particle. Properties of the corresponding particle type can be * accessed through a pointer to a ParticleData object. * * A Particle object contains pointers to other particles, such as a * list of parents and a list of children. It may also contain a * pointer to the previous or next instance of the same physical * particle if the properties of a given particle has been changed * during the generation. Coloured particles contains pointers to * ColourLine defining the colour connections to other particles. * * The Particle also has a pointer to the Step object where it was * first introduced in the Event. * * When printing a particle the format of the output is governed by * the static outputFormat string. When a particle is sent * to an ostream, the format string is written but with * keys prefixed by the \% character replaced with * infromation about the particle as follows:
\%\% is * replaced by a singel \%
\%C sets a flag so * that subsequent output of children and parents etc. will contain * colour information.
\%n is replaced by the particles * number in a fied ow width
\%s is replaced by the name * of the particle
\%i is replaced by the id number of * the particle type
\%x, \%y, \%z, \%e, \%m is replaced by * the x-, y-, z-, energy- and mass-component of the particles * momentum respectively
\%dx, \%dy, \%dz, \%dt, \%dT is * replaced by the x-, y-, z-, time- and invariant time-component of * the particles lifeLength respectively
\%Vx, \%Vy, \%Vz, * \%Vt is replaced by the x-, y-, z- and time-component of the * creation point relative to the vertex of the * collision.
\%Lx, \%Ly, \%Lz, \%Lt is replaced by the x-, * y-, z- and time-component of the creation point in the current * lab-system.
\%p[,] is replaced by a list (of numbers) * of the particles parents enclosed by [ and ] * and separated by ,, The parent from which the particle * inherits its (anti-) colour is marked by a (-)+
* \%c(,) is replaced by a list (of numbers) of the * particles children enclosed by ( and ) and * separated by ,, The child which inherits the particles * (anti-) colour is marked by a (-)+
\%> is replaced * by the number of the colour neighbor
\%< is * replaced by the number of the anti-colour neighbor
* \%^ is replaced by the number of the previous instance of * the same physical particle
\%v is replaced by the * number of the next instance of the same physical particle.
* \%l{,} is replaced by the indices of the colour lines to * which this particle is connected enclosed by { and * } and separated by ,, The line corresponding * to the (anti-) colour of the particle is prefixed by a (-)+ * * @see Event * @see Collision * @see Step * @see SubProcess * @see Lorentz5Vector * @see ColourLine * @see ColourBase */ class Particle: public EventRecordBase { public: /** Most of the Event classes are friends with each other. */ friend class Event; /** Most of the Event classes are friends with each other. */ friend class Collision; /** Most of the Event classes are friends with each other. */ friend class Step; /** Most of the Event classes are friends with each other. */ friend class SubProcess; /** ParticleData needs to be a friend. */ friend class ParticleData; struct ParticleRep; public: /** * Standard Constructor. Note that the default constructor is * private - there is no particle without a pointer to a * ParticleData object. */ Particle(tcEventPDPtr newData) : theData(newData), theRep(0) {} /** * Copy constructor. */ Particle(const Particle &); /** * Destructor. */ virtual ~Particle(); //@} /** @name Functions relating to ancestry of particles. */ //@{ /** * Returns true if and only if this particle has decayed. */ bool decayed() const { return hasRep() && !rep().theChildren.empty(); } /** * The list of decay products. */ const ParticleVector & children() const { static const ParticleVector null; return hasRep() ? rep().theChildren : null; } /** * Add a child (the childs parent pointer will be set accordingly). */ void addChild(tPPtr c) { rep().theChildren.push_back(c); (c->rep()).theParents.push_back(this); } /** * Remove the given child from the list of children of this particle * (the corresponding parent pointer of the child will also be * removed). */ void abandonChild(tPPtr child) { removeChild(child); child->removeParent(this); } /** * The list of parent particles. */ const tParticleVector & parents() const { static const tParticleVector null; return hasRep() ? rep().theParents : null; } /** * Return a set of neighboring particles coming from the same decay * as this one. The return value is a newly recalculated set * every time. It must be stored to be used further, do not directly call * e.g. siblings().begin() or siblings().end()! */ tParticleSet siblings() const; /** * Undo the decay of this particle, removing all children (and * grand children ...) from the event record */ void undecay() { if ( hasRep() ) { rep().theChildren.clear(); rep().theNext = tPPtr(); } } /** * If this particle has decayed set the corresponding decay mode. */ void decayMode(tDMPtr dm) { rep().theDecayMode = dm; } /** * If this particle has decayed get the corresponding decay mode. */ tDMPtr decayMode() const { return hasRep() ? rep().theDecayMode : tDMPtr(); } /** * Next instance. Pointer to another instance of the same * physical particle in later steps. */ tPPtr next() const { return hasRep() ? rep().theNext : PPtr(); } /** * Previous instance. Pointer to another instance of the same * physical particle in earlier steps. */ tPPtr previous() const { return hasRep() ? rep().thePrevious : tPPtr(); } /** * Original instance. If there exists another previous instance of * this particle return this instance (recursively). */ tcPPtr original() const { return previous() ? tcPPtr(previous()->original()) : tcPPtr(this); } /** * Original instance. If there exists another previous instance of * this particle return this instance (recursively). */ tPPtr original() { return previous() ? previous()->original() : tPPtr(this); } /** * Final instance. If there exists another subsequent instance of * this particle return this instance (recursively). */ tcPPtr final() const { return next() ? tcPPtr(next()->final()) : tcPPtr(this); } /** * Final instance. If there exists another subsequent instance of * this particle return this instance (recursively). */ tPPtr final() { return next() ? next()->final() : tPPtr(this); } //@} /** @name Relations to the Event and Step. */ //@{ /** * Get the first Step object where this particle occurred. */ tStepPtr birthStep() const { return hasRep() ? rep().theBirthStep : tStepPtr(); } /** * Get the order-number for this particle in the current event. */ int number() const { return hasRep() ? rep().theNumber : 0; } //@} /** @name Access the underlying ParticleData object. */ //@{ /** * Access the ParticleData object of this particle type */ const ParticleDataClass & data() const { return *theData; } /** * Access the ParticleData object of this particle type */ tcEventPDPtr dataPtr() const { return theData; } /** * Return the PDG name of this particle. */ const string & PDGName() const { return data().PDGName(); } /** * Return the PDG id number of this particle. */ long id() const { return data().id(); } //@} /** @name Functions to access the momentum. */ //@{ /** * Return the momentum of this particle. */ const Lorentz5Momentum & momentum() const { return theMomentum; } /** * Set the 3-momentum of this particle. The energy is set to be * consistent with the mass. */ void set3Momentum(const Momentum3 & p) { theMomentum.setVect(p); theMomentum.rescaleEnergy(); } /** * Set the momentum of this particle. Afterwards, the underlying * Lorentz5Momentum may have inconsistent mass. */ void setMomentum(const LorentzMomentum & p) { theMomentum = p; } /** * Set the momentum and mass. */ void set5Momentum(const Lorentz5Momentum & p) { theMomentum = p; } /** * Acces the mass of this particle. */ Energy mass() const { return momentum().mass(); } /** * Acces the mass of this particle type. */ Energy nominalMass() const { return data().mass(); } /** * Get the scale at which this particle is considered resolved. */ Energy2 scale() const { return hasRep() ? rep().theScale : -1.0*GeV2; } /** * Set the scale at which this particle is considered resolved. */ void scale(Energy2 q2) { rep().theScale = q2; } /** * Get the scale above which this particle should * not radiate. */ Energy2 vetoScale() const { return hasRep() ? rep().theVetoScale : -1.0*GeV2; } /** * Set the scale above which this particle should * not radiate. */ void vetoScale(Energy2 q2) { rep().theVetoScale = q2; } /** * Return the transverse mass (squared), calculated from the energy * and the longitudinal momentum. */ Energy2 mt2() const { return sqr(momentum().t()) - sqr(momentum().z()); } /** * Return the transverse mass (squared), calculated from the energy * and the longitudinal momentum. */ Energy mt() const { return sqrt(mt2()); } /** * Return the transverse mass (squared), calculated from the mass * and the transverse momentum. */ Energy2 perpmass2() const { return momentum().perp2() + momentum().mass2(); } /** * Return the transverse mass (squared), calculated from the mass * and the transverse momentum. */ Energy perpmass() const { return sqrt(perpmass2()); } /** * Return the (pseudo) rapidity. */ double rapidity() const { return ( Pplus() > ZERO && Pminus() > ZERO )? 0.5*log(Pplus()/Pminus()) : Constants::MaxFloat; } /** * Return the (pseudo) rapidity. */ double eta() const { Energy rho = momentum().rho(); return rho > abs(momentum().z())? 0.5*log((rho+momentum().z())/(rho-momentum().z())) : Constants::MaxFloat; } /** * Return the positive and negative light-cone momenta. */ Energy Pplus() const { return momentum().plus(); } /** * Return the positive and negative light-cone momenta. */ Energy Pminus() const { return momentum().minus(); } //@} /** @name Functions to access the position. */ //@{ /** * The creation vertex of this particle. The point is given * relative to the collision vertex. */ const LorentzPoint & vertex() const { static const LorentzPoint null; return hasRep() ? rep().theVertex : null; } /** * The creation vertex of this particle. The absolute * position in the lab is given. */ LorentzPoint labVertex() const; /** * The decay vertex of this particle. The point is given * relative to the collision vertex. */ LorentzPoint decayVertex() const { return vertex() + lifeLength(); } /** * The decay vertex of this particle. The absolute * position in the lab is given. */ LorentzPoint labDecayVertex() const { return labVertex() + lifeLength(); } /** * The life time/length. Return the Lorentz vector connecting the * creation to the decay vertes. */ const Lorentz5Distance & lifeLength() const { static const Lorentz5Distance null; return hasRep() ? rep().theLifeLength : null; } /** * Set the creation vertex relative to the collision vertex. */ void setVertex(const LorentzPoint & p) { rep().theVertex = p; } /** * Set the creation vertex in the lab frame of this particle. */ void setLabVertex(const LorentzPoint &); /** * Set the life length of this particle. The life time will be * automatically rescaled to be consistent with the invariant * distance. */ void setLifeLength(const Distance & d) { rep().theLifeLength.setVect(d); rep().theLifeLength.rescaleEnergy(); } /** * Set the life time/length of a particle. The invariant distance * may become inconsistent. */ void setLifeLength(const LorentzDistance & d) { rep().theLifeLength = d; } /** * Set the life time/length of a particle. */ void setLifeLength(const Lorentz5Distance & d) { rep().theLifeLength = d; } /** * The invariant life time of this particle. */ Time lifeTime() const { return lifeLength().m(); } //@} /** @name Functions for (Lorentz) transformations. */ //@{ /** * Do Lorentz transformations on this particle. */ void transform(const LorentzRotation & r); /** * Do Lorentz transformations on this particle. \a bx, \a by and \a * bz are the boost vector components. */ void boost(double bx, double by, double bz) { transform(LorentzRotation(Boost(bx, by, bz))); } /** * Do Lorentz transformations on this particle. \a b is the boost * vector. */ void boost(const Boost & b) { transform(LorentzRotation(b)); } /** * Rotate around the x-axis. */ void rotateX(double a); /** * Rotate around the y-axis. */ void rotateY(double a); /** * Rotate around the z-axis. */ void rotateZ(double a); /** * Rotate around the given \a axis. */ void rotate(double a, const Axis & axis); /** * Mirror in the xy-plane. */ void mirror() { theMomentum.setZ(-theMomentum.z()); } /** * Do Lorentz transformations on this particle and its decendants. */ void deepTransform(const LorentzRotation & r); /** * Do Lorentz transformations on this particle and its * decendants. \a bx, \a by and \a bz are the boost vector * components. */ void deepBoost(double bx, double by, double bz) { deepTransform(LorentzRotation(Boost(bx, by, bz))); } /** * Do Lorentz transformations on this particle and its * decendants. \a b is the boost vector. */ void deepBoost(const Boost & b) { deepTransform(LorentzRotation(b)); } /** * Rotate this particle and its decendants around the x-axis. */ void deepRotateX(double a); /** * Rotate this particle and its decendants around the y-axis. */ void deepRotateY(double a); /** * Rotate this particle and its decendants around the z-axis. */ void deepRotateZ(double a); /** * Rotate this particle and its decendants around the given \a axis. */ void deepRotate(double a, const Axis & axis); //@} /** @name Functions controlling possible mass/momentum inconsistencies. */ //@{ /** * Return the relative inconsistency in the mass component. */ double massError() const { return theMomentum.massError(); } /** * Return the relative inconsistency in the energy component. */ double energyError() const { return theMomentum.energyError(); } /** * Return the relative inconsistency in the spatial components. */ double rhoError() const { return theMomentum.rhoError(); } /** * Rescale energy, so that the invariant length/mass of the * LorentzVector agrees with the current one. */ void rescaleEnergy() { theMomentum.rescaleEnergy(); } /** * Rescale spatial component, so that the invariant length/mass of * the LorentzVector agrees with the current one. */ void rescaleRho() { theMomentum.rescaleRho(); } /** * Set the invariant length/mass member, so that it agrees with the * invariant length/mass of the LorentzVector. */ void rescaleMass() { theMomentum.rescaleMass(); } //@} /** @name Acces incormation about colour connections */ //@{ /** * True if this particle has colour information. To determine if * this particle is actually coloured, the coloured(), hasColour() or * hasAntiColour() methods should be used instead. */ bool hasColourInfo() const { return hasRep() && rep().theColourInfo; } /** * Return the colour lines to which this particles anti-colour is * connected. */ tColinePtr antiColourLine() const { return hasColourInfo() ? colourInfo()->antiColourLine() : tColinePtr(); } /** * Return the colour lines to which this particles (\a anti-)colour * is connected. */ tColinePtr colourLine(bool anti = false) const { if ( anti ) return antiColourLine(); return hasColourInfo() ? colourInfo()->colourLine() : tColinePtr(); } /** * Return true if the particle is connected to the given (\a anti-) * colour \a line. */ bool hasColourLine(tcColinePtr line, bool anti = false) const { return hasColourInfo() ? colourInfo()->hasColourLine(line, anti) : false; } /** * Return true if the particle is connected to the given anti-colour * \a line. */ bool hasAntiColourLine(tcColinePtr line) const { return hasColourLine(line, true); } /** * True if this particle type is not a colour singlet. */ bool coloured() const { return data().coloured(); } /** * True if this particle type carries (\a anti-)colour. */ bool hasColour(bool anti = false) const { return data().hasColour(anti); } /** * True if this particle type carries anti-colour. */ bool hasAntiColour() const { return data().hasAntiColour(); } /** * Get the ColourBase object. */ tcCBPtr colourInfo() const { return hasRep() ? rep().theColourInfo : CBPtr(); } /** * Get the ColourBase object. */ tCBPtr colourInfo() { if ( !rep().theColourInfo ) { switch(theData->iColour()) { case PDT::Colour6: case PDT::Colour6bar: rep().theColourInfo = new_ptr(MultiColour()); break; default: rep().theColourInfo = new_ptr(ColourBase()); } } return rep().theColourInfo; } /** * Set the ColourBase object. */ void colourInfo(tCBPtr c) { rep().theColourInfo = c; } /** * Get a pointer to the colour neighbor. Returns a particle in the * range \a first to \a last which colour is connected to the same * line as this particles anti-colour. If \a anti is true return * antiColourNeighbour(). */ template typename std::iterator_traits::value_type colourNeighbour(Iterator first, Iterator last, bool anti = false) const; /** * Get a pointer to the anti-colour neighbor. Returns a particle in * the range \a first to \a last which anti-colour is * connected to the same line as this particles colour. */ template typename std::iterator_traits::value_type antiColourNeighbour(Iterator first, Iterator last) const { return colourNeighbour(first, last, true); } /** * Set the colour neighbor. Connects the given particles colour to * the same colour line as this particles anti-colour. If \a anti is * true call antiColourNeighbour(tPPtr). */ void colourNeighbour(tPPtr, bool anti = false); /** * Set the anti-colour neighbor. Connects the given particles * anti-colour to the same colour line as this particles colour. */ void antiColourNeighbour(tPPtr p) { colourNeighbour(p, true); } /** * Connect colour. Create a colour line connecting to it this * particles colour and the given particles anti-colour. */ void antiColourConnect(tPPtr neighbour) { colourConnect(neighbour, true); } /** * Connect colour. Create a colour line connecting to it this * particles anti-colour and the given particles colour. If \a anti * is true call antiColourConnect(tPPtr). */ void colourConnect(tPPtr neighbour, bool anti = false) { colourNeighbour(neighbour, anti); } /** * Incoming colour. Return the parent particle which colour is * connected to the same colour line as this particle. If \a anti is * true return incomingAntiColour(). */ tPPtr incomingColour(bool anti = false) const; /** * Incoming anti-colour. Return the parent particle which * anti-colour is connected to the same colour line as this * particle. */ tPPtr incomingAntiColour() const { return incomingColour(true); } /** * Set incoming colour. Connect this particles colour to the same * colour line as the given particle. If \a anti * is true call incomingAntiColour(tPPtr). */ void incomingColour(tPPtr p, bool anti = false) { p->outgoingColour(this, anti); } /** * Set incoming anti-colour. Connect this particles anti colour to * the same colour line as the given particle. */ void incomingAntiColour(tPPtr p) { p->outgoingColour(this, true); } /** * Outgoing colour. Return the daughter particle which colour is * connected to the same colour line as this particle. If \a anti is * true return outgoingAntiColour(). */ tPPtr outgoingColour(bool anti = false) const; /** * Outgoing anti-colour. Return the daughter particle which * anti-colour is connected to the same colour line as this * particle. */ tPPtr outgoingAntiColour() const { return outgoingColour(true); } /** * Set outgoing colour. Connect this particles colour to the same * colour line as the given particle. If \a anti * is true call outgoingAntiColour(tPPtr). */ void outgoingColour(tPPtr, bool anti = false); /** * Set outgoing anti-colour. Connect this particles anti-colour to * the same colour line as the given particle. */ void outgoingAntiColour(tPPtr p) { outgoingColour(p, true); } /** * Specify colour flow. Calls outgoingColour(tPPtr,bool). */ void colourFlow(tPPtr child, bool anti = false) { outgoingColour(child, anti); } /** * Specify anticolour flow. Calls outgoingAntiColour(tPPtr,bool). */ void antiColourFlow(tPPtr child) { colourFlow(child, true); } /** * Remove all colour information; */ void resetColour() { if ( hasColourInfo() ) rep().theColourInfo = CBPtr(); } //@} /** @name Functions to access spin. */ //@{ /** * Return the Spin object. */ tcSpinPtr spinInfo() const { return hasRep() ? rep().theSpinInfo : SpinPtr(); } /** * Return the Spin object. */ tSpinPtr spinInfo() { return hasRep() ? rep().theSpinInfo : SpinPtr(); } /** * Set the Spin object. */ void spinInfo(tSpinPtr s) { rep().theSpinInfo = s; } //@} /** @name Accessing user-defined information. */ //@{ /** * Access user-defined information as a vector of EventInfoBase pointers. */ const EIVector & getInfo() const { static const EIVector null; return hasRep() ? rep().theExtraInfo : null; } /** * Access user-defined information as a vector of EventInfoBase pointers. */ EIVector & getInfo() { return rep().theExtraInfo; } //@} public: /** @name Accessing user-defined information. */ //@{ /** * True if this particle has instantiated the object with * information other than type and momentum. */ bool hasRep() const { return theRep; } /** * If this particle has only a type and momentum, instantiate the * rest of the information. */ void initFull(); //@} public: /** @name Input and output functions. */ //@{ /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard function for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); //@} /** * Print particle info to a stream \a os. The \a step is used to * access information about colour neighbors and other struff. */ ostream & print(ostream & os, tcStepPtr step = tcStepPtr()) const; /** * Print a range of particles. */ template static void PrintParticles(ostream & os, Iterator first, Iterator last, tcStepPtr step = tcStepPtr()); /** * Print a container of particles. */ template static inline void PrintParticles(ostream & os, const Cont & c, tcStepPtr step = tcStepPtr()) { PrintParticles(os, c.begin(), c.end(), step); } /** * Standard Init function. @see Base::Init(). */ static void Init(); /** * Specify how to print particles. The format string is analogous to * the one used by eg. the unix 'date' command as described above. */ static string outputFormat; private: /** * Standard clone function. */ virtual PPtr clone() const; /** * Rebind to cloned objects. When an Event is cloned, a shallow * copy is done first, then all Particles etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned Particle points to the cloned objects. */ virtual void rebind(const EventTranslationMap &); /** * Set the order-number for this particle in the current event. */ void number(int n) { rep().theNumber = n; } /** * Remove the given particle from the list of children. */ void removeChild(tPPtr c) { if ( hasRep() ) rep().theChildren.erase(remove(rep().theChildren.begin(), rep().theChildren.end(), c), rep().theChildren.end()); } /** * Remove the given particle from the list of parents. */ void removeParent(tPPtr p) { if ( hasRep() ) rep().theParents.erase(remove(rep().theParents.begin(), rep().theParents.end(), p), rep().theParents.end()); } /** * Set the mass of this particle. */ void mass(Energy m) { theMomentum.setMass(m); } /** * Set the invaiant life time of this particle. */ void lifeTime(Length t) { rep().theLifeLength.setTau(t); } /** * Return a reference to the bulk information of this particle. if * no ParticleRep object exists, one is created. */ ParticleRep & rep() { if ( !hasRep() ) initFull(); return *theRep; } /** * Return a reference to the bulk information of this particle. if * no ParticleRep object exists, we return the default values. */ const ParticleRep & rep() const { static const ParticleRep null; return hasRep() ? *theRep : null; } /** * The pointer to the ParticleData object */ cEventPDPtr theData; /** * The momentum. */ Lorentz5Momentum theMomentum; /** * The rest of the information in this particle is only instantiated * if needed. */ ParticleRep * theRep; public: /** * This class is used internally in the Particle class to represent * information besides momentum and type. A corresponding object * will only be instantiated if needed to save memory and time when * temporarily creating particles. */ struct ParticleRep { /** * Default constructor. */ ParticleRep() : theScale(-1.0*GeV2), theVetoScale(-1.0*GeV2), theNumber(0) {} /** * Copy constructor. */ ParticleRep(const ParticleRep &); /** * The pointers to the parents. */ tParticleVector theParents; /** * The pointers to the children. */ ParticleVector theChildren; /** * The pointer to the previous instance. */ tPPtr thePrevious; /** * The pointer to the next instance. */ PPtr theNext; /** * If this particle has decayed this is the pointer to the * corresponding decay mode. */ tDMPtr theDecayMode; /** * The pointer to the first step where this particle occurred. */ tStepPtr theBirthStep; /** * The creation point. */ LorentzPoint theVertex; /** * The life time/length. */ Lorentz5Distance theLifeLength; /** * the resolution scale. */ Energy2 theScale; /** * the veto scale. */ Energy2 theVetoScale; /** * The order-number for this particle in the current event. */ int theNumber; /** * A pointer to the colour information object. */ CBPtr theColourInfo; /** * Spin information */ SpinPtr theSpinInfo; /** * Additional used-defined information. */ EIVector theExtraInfo; }; public: /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; protected: /** * Private default constructor must only be used by the * PersistentIStream class via the ClassTraits class. */ Particle() : theRep(0) {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; private: /** * Private and non-existent assignment. */ Particle & operator=(const Particle &); /** * Describe concrete class with persistent data. */ static ClassDescription initParticle; }; /** * Write a Particle object to a stream. */ ostream & operator<<(ostream &, const Particle &); /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base class of Particle. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Collision. */ typedef EventRecordBase NthBase; }; /** This template specialization informs ThePEG about the name of * the Particle class and how to create it. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Particle"; } /** Create a Particle object. */ static TPtr create() { return TPtr::Create(Particle()); } }; /** @endcond */ } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Particle.tcc" #endif #endif /* ThePEG_Particle_H */ thepeg-1.8.0.orig/EventRecord/Step.h0000644000175000017500000004215611747772425015463 0ustar sunsun// -*- C++ -*- // // Step.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BasicStep_H #define ThePEG_BasicStep_H // This is the declaration of the Step class. #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/StandardSelectors.h" namespace ThePEG { /** * The Step class contains information of all particles present after * certain step in the event generation. There is also information * about particles which were introduced as intermediate ones in the * generation of the step. The Step may also contain one or more * SubProcesses which were generated in the step. The Step is linked * back to the Collision to which it belongs, and there may be a * pointer to the StepHandler which generated the step. * * @see Event * @see Collision * @see SubProcess * @see Particle * @see SelectorBase * @see SelectorBase */ class Step: public EventRecordBase { public: /** Most of the Event classes are friends with each other. */ friend class Collision; /** Most of the Event classes are friends with each other. */ friend class Event; public: /** * Standard constructor. * @param newCollision the Collision to which this Step belongs. * @param newHandler the handler object in charge of the generation * of this Step. */ Step(tCollPtr newCollision = tCollPtr(), tcEventBasePtr newHandler = tcEventBasePtr()) : theCollision(newCollision), theHandler(newHandler) {} /** * The copy constructor. */ Step(const Step &); /** * The destructor. */ ~Step(); /** * Return a pointer to the step handler which performed the * generation of this step. */ tcEventBasePtr handler() const { return theHandler; } /** * Return a pointer to the Collision to which this step belongs. */ tCollPtr collision() const { return theCollision; } /** * Extract particles from this Step which satisfies the * requirements given by an object of the SelectorBase class. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. * @param s SelectorBase object defining which particles should be * extracted. */ template void select(OutputIterator r, const SelectorBase & s) const; /** * Extract all final state particles in this Step. * @param r an output iterator specifying where the extracted * (pointers to) particles will be appended. */ template void selectFinalState(OutputIterator r) const { select(r, SelectFinalState()); } /** * Extract all final state particles in this Step. * @return a vector of pointers to the extracted particles. */ tPVector getFinalState() const { tPVector ret; selectFinalState(back_inserter(ret)); return ret; } /** * Return a vector of particle vectors with colour-connected * partons, where each particle vector is in a colour singlet state. * @deprecated Use the corresponding functions in ColourLine instead. */ template static vector getSinglets(PIterator first, PIterator last) { tParticleSet left(first, last); return getSinglets(left); } /** * A reference to the set of all particles in this step. */ const ParticleSet & all() const { return allParticles; } /** * A reference to the set of outgoing particles in this step. */ const ParticleSet & particles() const { return theParticles; } /** * A reference to the set of intermediate particles in this step. */ const ParticleSet & intermediates() const { return theIntermediates; } /** * A reference to the vector of sub-processes introduced in this * step. */ const SubProcessVector & subProcesses() const { return theSubProcesses; } /** * Returns the colliding particles in the collision to which this * step belongs. (If this step does not belong to a collision, this * method will probably cause a segmentation fault - This should be * fixed. @deprecated Maybe this method is not needed at all.) */ const PPair & incoming() const; /** * Get mutable particle. If the given particle is present in this * step, return its pointer otherwise return the null pointer; */ tPPtr find(tcPPtr p) const { tPPtr r = const_ptr_cast(p); if ( !member(all(), r) ) return tPPtr(); return r; } /** * Copy a particle. If the given Particle is present in this step, * insert a copy and remove the original (or make it intermediate if * it was initially added to this step). Returns the new Particle if * the copy succeeded. If the copy fails, nothing is changed. For a * successful call copyParticle(p)->previous() == p is * true. */ tPPtr copyParticle(tcPPtr p); /** * Make particles copies of eachother. Declare that pold and pnew * are two instances of the same particle. If pnew is not present in * the step it will be afterwars. Afterwards pold == * pnew->previous() && pnew == pold->next() is true. Returns * false if something went wrong. */ bool setCopy(tcPPtr pold, tPPtr pnew); /** * Insert a copy. If the given particle is present in the current * Collision, insert copy of that particle 'before' the particle. If * the particle does not belong to the current collision or if the * copy failed, nothing is changed and the null pointer is * returned. If successful insertCopy(p)->next() == p * is true. The parents of the original particle will become the * parents of the copy. */ tPPtr insertCopy(tcPPtr p); /** * Add decay product. If the \a parent is present in this step or if * it has immediate children in this step, insert the \a child and * fix up references between the two. If the parent is among the * final state particles, remove it (or make it intermediate if it * was initially added to this step). The parent/child pointers of * the affected particles will be set accordingly. If both the * parent and child/children are coloured and \a fixColour is true, * the colour flow will be set. * @return true iff the addition succeeded. */ bool addDecayProduct(tcPPtr parent, tPPtr child, bool fixColour = true); /** * Add decay products. If the \a parent is present in this step or if * it has immediate children in this step, insert the range of * children and fix up references between the two. If the parent is * among the final state particles, remove it (or make it * intermediate if it was initially added to this step). The * parent/child pointers of the affected particles will be set * accordingly. If both the parent and children are coloured and \a * fixColour is true, the colour flow will be set. The colour of the * parent will then flow to the first added child, while the anti * colour will flow to the last added child. * @return true iff the addition succeeded. */ template bool addDecayProduct(tcPPtr parent, CIterator firstChild, CIterator lastChild, bool fixColour = true) { for ( ; firstChild != lastChild; ++firstChild ) if ( !addDecayProduct(parent, *firstChild, fixColour) ) return false; return true; } /** * Add a particle to this Step. It is assumed to be already setup as * a child to a parent particle. The parent is removed from the list * of final state particles in this step. No consistency checks are * performed. @deprecated Use addDecayProduct(tPPtr child) instead. */ void addDecayNoCheck(tPPtr parent, tPPtr child); /** * Add a particle to this Step. It is assumed to be already setup as * a child to parent particles. The parents are removed from the * list of final state particles in this step. No consistency checks * are performed. */ void addDecayProduct(tPPtr child); /** * Remove the \a child form the given \a parent. The \a child is not * removed from the decay record. */ bool removeDecayProduct(tcPPtr parent, tPPtr child); /** * Remove children form the given \a parent. The children are not * removed from the decay record. */ template bool removeDecayProduct(tcPPtr parent, CIterator firstChild, CIterator lastChild) { bool success = true; for ( ; firstChild != lastChild; ++firstChild ) if ( !removeDecayProduct(parent, *firstChild) ) success = false; return success; } /** * Add decay product. Add the \a child as a decay product of all the * listed parents. The parents must satisfy the same requirements as * in the addDecayProduct(tcPPtr,tPPtr,bool) function. If any of the * parents fail false is returned and nothing is changed. The * parent/child pointers of the affected particles will be set * accordingly, but no colour flow wll be set. If \a checkfinal is * true the parents or its immediate children must be in the final * state. */ template bool addDecayProduct(Iterator firstParent, Iterator lastParent, tPPtr child, bool checkfinal = true); /** * Add the children as a decay products of all the listed * particles. The parents must satisfy the same requirements as in * the addDecayProduct(tcPPtr,tPPtr,bool) function. If any of the * parents fail false is returned and nothing is changed. The * parent/child pointers of the affected particles will be set * accordingly, but no colour flow wll be set. */ template bool addDecayProduct(PIterator firstParent, PIterator lastParent, CIterator firstChild, CIterator lastChild); /** * Fix the colour flow of particles which have been added to this * step and which have not already had their colour neighbours set. * If a neighbor is found which has not been added in this step, it * is first cloned in order not to compromise the colour flow of * previous steps. @deprecated This method should not be needed with * the current ColourLine representation of colour. */ void fixColourFlow(); /** * Return the (\a anti-)colour neighbour of the given \a particle if * one exists in the final state of this Step. The colour neighbour * has its colour connected to the same colour line as the given \a * particles anti-colour. Will return null if the given \a particle * is not in the final state of this Step. */ tPPtr colourNeighbour(tcPPtr particle, bool anti = false) const; /** * Return the anti-colour neighbour of the given \a particle if one * exists in the final state of this Step. The anti-colour neighbour * has its anti-colour connected to the same colour line as the * given \a particles colour. Will return null if the given \a * particle is not in the final state of this Step. */ tPPtr antiColourNeighbour(tcPPtr particle) const; /** * Add a range of particles to this Step. If this step belongs * to a Collision, the paticle will also be added to the * Collision. If this particle has not previously been in a Step, * the birthStep pointer of the particle will be set. */ template void addParticles(Iterator first, Iterator last); /** * Add a particle to this step. If this step belongs to a Collision, * the paticle will also be added to the Collision. If this particle * has not previously been in a Step, the birthStep pointer of the * particle will be set. */ void addParticle(tPPtr p); /** * Add a range of intermediate particles in this step. If this step * belongs to a Collision, the particles will also be added to the * Collision. If any particle has not previously been in a Step, * the birthStep pointer of the particle will be set. The particles * will be removed from the list of final state particles if * present. */ template void addIntermediates(Iterator first, Iterator last); /** * Add an intermediate particle in this Step. If this Step belongs * to a Collision, the particle will also be added to the * Collision. If this particle has not previously been in a step, * the birthStep pointer of the particle will be set. The particle * will be removed from the list of final state particles if * present. */ void addIntermediate(tPPtr p); /** * Add an intermediate particle. Particle \a p is added so that if * \a child previously was the child of \a parent, afterwards \a p * will be the child of \a parent and \a child will be the child of * \a p. */ void insertIntermediate(tPPtr p, tPPtr parent, tPPtr child); /** * Add a sub-process. All outgoing particles are added to the list * of outgoing particles in the step. All other particles in the * sub-process will be added to the list of intermediates. */ void addSubProcess(tSubProPtr); /** * Remove a sub-process. All incoming and outgoing particles are * removed as well. */ void removeSubProcess(tSubProPtr); /** * Remove (recursively) the given Particle from the Step. If * this was the last daughter of the mother Particle, the latter is * added to the list of final state particles. */ void removeParticle(tPPtr p); /** * Return true if no new particles were introduced in this step. */ bool nullStep() const; /** * Get final state particles. Given a container, return the ones * which belongs to the final state of this step. If a particle does * not belong to these, it's children (or next instance) will be * checked and possibly added instead (recursively). */ template tParticleSet getCurrent(const Cont & c) const { return getCurrent(c.begin(), c.end()); } /** * Get final state particles. Given a range of particles, return the * ones which belongs to the final state of this step. If a particle * does not belong to these, it's children (or next instance) will * be checked and possibly added instead (recursively) */ template tParticleSet getCurrent(Iterator first, Iterator last) const; /** * Return a clone of this step. */ StepPtr clone() const; public: /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard function for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); protected: /** * Used internally by the public getSinglets(...); @deprecated Use * the corresponding functions in ColourLine instead. */ static vector getSinglets(tParticleSet &); /** * Remove a particle entry from the step. Make its ancesters (if * any) present in this step. */ void removeEntry(tPPtr p); /** * Rebind to cloned objects. When a Step is cloned, a shallow copy * is done first, then all Particles etc, are cloned, * and finally this method is used to see to that the pointers in * the cloned Step points to the cloned Particles etc. */ void rebind(const EventTranslationMap & trans); /** * Get final state particles. Insert particle \a p into with the * Inserter \a o if \a p is a member of the final state of this * Step. Otherwise call the method for the children of \a p if any. */ template void addIfFinal(Inserter o, PPointer p); private: /** * Assignement is not allowed. */ Step & operator=(const Step &); /** * Setup pointer to the Collision. */ void collision(tCollPtr c) { theCollision = c; } /** * Setup pointer to the step handler. */ void handler(tcEventBasePtr sh) { theHandler = sh; } private: /** * The set of all outgoing particle in this step. */ ParticleSet theParticles; /** * The set of all intermediate particle in this step. */ ParticleSet theIntermediates; /** * The vector of all sub-processes introduced in this step. */ SubProcessVector theSubProcesses; /** * The set of all particles available in this step. */ ParticleSet allParticles; /** * Pointer to the collision to which this step belongs. */ tCollPtr theCollision; /** * Pointer ot the step handler which performed this step. */ tcEventBasePtr theHandler; public: /** * Print out debugging information for this object on std::cerr. To * be called from within a debugger via the debug() function. */ virtual void debugme() const; private: /** * Describe concrete class with persistent data. */ static ClassDescription initStep; }; /** Output a Step to an ostream */ ostream & operator<<(ostream &, const Step &); /** @cond TRAITSPECIALIZATIONS */ ThePEG_DECLARE_CLASS_TRAITS(Step,EventRecordBase); /** @endcond */ } #include "Collision.h" inline const ThePEG::PPair & ThePEG::Step::incoming() const { return collision()->incoming(); } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Step.tcc" #endif #endif /* ThePEG_BasicStep_H */ /** * Write a Step object to a stream */ thepeg-1.8.0.orig/EventRecord/ColourSinglet.cc0000644000175000017500000002141711747772425017474 0ustar sunsun// -*- C++ -*- // // ColourSinglet.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ColourSinglet class. // #include "ColourSinglet.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Repository/UseRandom.h" using namespace ThePEG; LorentzMomentum ColourSinglet::momentum() const { return Utilities::sumMomentum(partons().begin(), partons().end()); } tcPDVector ColourSinglet::getTripletData() const { tcPDVector ret; for ( int i = 0, N = partons().size(); i < N; ++i ) if ( parton(i)->data().iColour() != PDT::Colour8 ) ret.push_back(parton(i)->dataPtr()); return ret; } vector ColourSinglet::getSinglets(tcParticleSet & left) { vector ret; while ( !left.empty() ) { tcPPtr p = *left.begin(); // First just remove colour singlets. if ( !p->coloured() || !p->hasColourInfo() ) { left.erase(left.begin()); continue; } // Find a connected coulour line. tcColinePtr cl = p->colourLine(); if ( !cl ) cl = p->antiColourLine(); // Get the Colour singlet corresponding to this line. ret.push_back(ColourSinglet(cl, left)); } return ret; } ColourSinglet::ColourSinglet(tcColinePtr cl, tcParticleSet & left) { // Follow colour line forward and add coloured partons to the first // string piece. addPiece(); if ( !fill(1, true, cl, left) ) // If needed also follow colourline backward and add // anti-coloured partons. fill(1, false, cl, left); for ( Index i = 1, N = nPieces(); i <= N; ++i ) partons().insert(partons().end(), piece(i).begin(), piece(i).end()); } bool ColourSinglet:: fill(Index s0, bool forward, tcColinePtr cl, tcParticleSet & left) { tcColinePtr first = cl; tcPPtr p; while ( (p = cl->getColouredParticle(left.begin(), left.end(), !forward)) ) { left.erase(p); if ( forward ) piece(s0).push_back(p); else piece(s0).push_front(p); if ( p->hasColourLine(first, forward) ) return true; if ( !( cl = p->colourLine(forward) ) ) return false; } // If we get here we have ended up in a colour source or sink. tColinePair fork = cl->sourceNeighbours(forward); if ( !fork.first || !fork.second ) throw ColourSingletException() << "Inconsistent Colour flow." << Exception::eventerror; Junction j = addJunction(s0, forward); fill(j.first, !forward, fork.first, left); fill(j.second, !forward, fork.second, left); return false; } ColourSinglet::Junction ColourSinglet::addJunction(Index s0, bool forward) { // Add two new string pieces. Index s1 = addPiece(); Index s2 = addPiece(); // Connect the new pieces with the original. junction(s0, forward).first = s1; junction(s0, forward).second = s2; junction(s1, forward).first = s0; junction(s1, forward).second = s2; junction(s2, forward).first = s0; junction(s2, forward).second = s1; // Return the indices of the new pieces. return junction(s0, forward); } ColourSinglet ColourSinglet::splitInternal(Index sp) { if ( !sp ) { // If no piece is specified, first find all internal string pieces. vector internals; for ( Index i = 1, N = nPieces(); i <= N; ++i ) if ( sink(i).first && sink(i).second && source(i).first && source(i).second ) internals.push_back(i); // If no internal lines are found, return empty singlet. if ( internals.empty() ) return ColourSinglet(); // Otherwise pick randomly between the internal lines. sp = UseRandom::irnd(internals.size()); } vector assign(piece(sp).size()); for ( int i = 0, N = piece(sp).size(); i < N; ++i ) assign[i] = UseRandom::rndbool(); return splitInternal(sp, source(sp).first, UseRandom::rndbool()? sink(sp).first: sink(sp).second, assign); } ColourSinglet ColourSinglet:: splitDiDiQuark(tcPPair qq1, tcPPair qq2, const vector & assign) { ColourSinglet ret; // Add teo new string pieces. Junction j = addJunction(1, true); sink(1) = sink(j.first) = sink(j.second) = source(1) = source(j.first) = source(j.second) = Junction(); // Add the second quarks to one piece each piece(j.first).push_back(qq2.first); piece(j.second).push_back(qq2.second); // Add intermediate colour octets to either of the new pieces. for ( unsigned i = piece(1).size() - 2; i > 0; --i ) ((i < assign.size()? assign[i]: UseRandom::rndbool() )? piece(j.first): piece(j.second)).push_back(piece(1)[i]); // Add the first quarks to one piece each piece(j.first).push_back(qq1.first); piece(j.second).push_back(qq1.second); // Create two new singlets and let this be one of them and return // the other. ColourSinglet csa(*this, j.first); ColourSinglet csb(*this, j.second); ret.swap(csa); swap(csb); return ret; } ColourSinglet ColourSinglet:: splitDiQuarkJunction(Index sp, tcPPtr diq, tcPPair qq, const vector & assign) { ColourSinglet ret; Junction j; if ( source(sp).first && source(sp).second ) { // This is a diquark, so we remove the source junction and add // string piece sp to the source neighbours according to assign // and end with one of the quarks. j = source(sp); source(j.first) = source(j.second) = Junction(); for ( unsigned i = 0, N = piece(sp).size(); i < N; ++i ) { if ( diq == piece(sp)[i] ) { piece(j.first).push_back(qq.first); piece(j.second).push_back(qq.second); } ((i < assign.size()? assign[i]: UseRandom::rndbool() )? piece(j.first): piece(j.second)).push_back(piece(sp)[i]); } } else if ( sink(sp).first && sink(sp).second ) { // This is a anti-diquark, so we remove the source junction and add // string piece sp to the source neighbours according to assign // and end with one of the anti quarks. j = sink(sp); sink(j.first) = sink(j.second) = Junction(); // 'i' can't be unsigned here. would get infinite loop! for ( int i = piece(sp).size() - 1; i >= 0; --i ) { if ( diq == piece(sp)[i] ) { piece(j.first).push_front(qq.first); piece(j.second).push_front(qq.second); } ((static_cast(i) < assign.size()? assign[i]: UseRandom::rndbool() )? piece(j.first): piece(j.second)).push_front(piece(sp)[i]); } } else return ret; // Create two new singlets and let this be one of them and return // the other. ColourSinglet csa(*this, j.first); ColourSinglet csb(*this, j.second); ret.swap(csa); swap(csb); return ret; } ColourSinglet ColourSinglet:: splitInternal(Index sp, Index sa, Index sc, const vector & assign) { ColourSinglet ret; // If the selected string piece was not internal, return nothing. if ( !sink(sp).first || !sink(sp).second || !source(sp).first || !source(sp).second ) return ret; // If the selected adjacent pieces are not connected, return // nothing. Index sb = 0; if ( sa == source(sp).first ) sb = source(sp).second; else if ( sa == source(sp).second ) sb = source(sp).first; else return ret; Index sd = 0; if ( sc == sink(sp).first ) sd = sink(sp).second; else if ( sc == sink(sp).second ) sd = sink(sp).first; else return ret; // Copy the partons from the split string piece randomly to the // pieces to be joined. for ( unsigned i = 0, N = piece(sp).size(); i < N; ++i ) { if ( (i < assign.size()? assign[i]: UseRandom::rndbool() ) ) piece(sa).push_back(piece(sp)[i]); else piece(sb).push_back(piece(sp)[i]); } // Join the to string pieces piece(sa).insert(piece(sa).end(), piece(sc).begin(), piece(sc).end()); piece(sb).insert(piece(sb).end(), piece(sd).begin(), piece(sd).end()); source(sa) = source(sc); source(sb) = source(sd); // Create new colour singlets ColourSinglet csa(*this, sa); ColourSinglet csb(*this, sb); ret.swap(csa); swap(csb); return ret; } ColourSinglet::ColourSinglet(const ColourSinglet & cs, Index si) { addPiece(); fill(1, true, cs, si); fill(1, false, cs, si); for ( Index i = 1, N = nPieces(); i <= N; ++i ) partons().insert(partons().end(), piece(i).begin(), piece(i).end()); } void ColourSinglet:: fill(Index i0, bool forward, const ColourSinglet & cs, Index i1) { // first copy the string piece from cs. piece(i0) = cs.piece(i1); // If the piece in cs had a (forward) junction, add copy also the // connected string pieces if ( cs.junction(i1, forward).first || cs.junction(i1, forward).second ) { Junction j = addJunction(i0, forward); fill(j.first, !forward, cs, cs.junction(i1, forward).first); fill(j.second, !forward, cs, cs.junction(i1, forward).second); } return; } thepeg-1.8.0.orig/EventRecord/Particle.cc0000644000175000017500000003525611747772425016454 0ustar sunsun// -*- C++ -*- // // Particle.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined member functions of // the Particle class. // #include "Particle.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/EventRecord/ColourLine.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/DecayMode.h" #include #include #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Particle.tcc" #endif using namespace ThePEG; Particle::ParticleRep::ParticleRep(const ParticleRep & p) : theParents(p.theParents), theChildren(p.theChildren), thePrevious(p.thePrevious), theNext(p.theNext), theBirthStep(p.theBirthStep), theVertex(p.theVertex), theLifeLength(p.theLifeLength), theScale(p.theScale), theVetoScale(p.theVetoScale), theNumber(p.theNumber), theExtraInfo(p.theExtraInfo.size()) { if ( p.theColourInfo ) theColourInfo = dynamic_ptr_cast(p.theColourInfo->clone()); if ( p.theSpinInfo ) theSpinInfo = dynamic_ptr_cast(p.theSpinInfo->clone()); for ( int i = 0, N = p.theExtraInfo.size(); i < N; ++i ) theExtraInfo[i] = p.theExtraInfo[i]->clone(); } Particle::Particle(const Particle & p) : Base(p), theData(p.theData), theMomentum(p.theMomentum), theRep(p.theRep) { if ( p.theRep ) { theRep = new ParticleRep(*p.theRep); theRep->theParents.clear(); } } Particle::~Particle() { if ( theRep ) { if ( colourLine() ) colourLine()->removeColoured(this); if ( antiColourLine() ) antiColourLine()->removeAntiColoured(this); delete theRep; } theRep = 0; theData = cEventPDPtr(); } void Particle::initFull() { if ( theRep ) return; theRep = new ParticleRep; Energy width = data().generateWidth(mass()); Time lifetime = data().generateLifeTime(mass(), width); theRep->theLifeLength.setTau(lifetime); theRep->theLifeLength. setVect((momentum().vect()*(lifetime / max(mass(), Constants::epsilon*GeV)))); theRep->theLifeLength.rescaleEnergy(); } PPtr Particle::clone() const { return ptr_new(*this); } void Particle::rebind(const EventTranslationMap & trans) { for ( ParticleVector::iterator pit = rep().theChildren.begin(); pit != rep().theChildren.end(); ++pit ) *pit = trans.translate(*pit); for ( tParticleVector::iterator pit = rep().theParents.begin(); pit != rep().theParents.end(); ++pit ) *pit = trans.translate(*pit); rep().thePrevious = trans.translate(rep().thePrevious); rep().theNext = trans.translate(rep().theNext); if ( hasColourInfo() ) colourInfo()->rebind(trans); if ( spinInfo() ) spinInfo()->rebind(trans); rep().theBirthStep = trans.translate(rep().theBirthStep); for ( EIVector::const_iterator ie = rep().theExtraInfo.begin(); ie != rep().theExtraInfo.end(); ++ie ) (**ie).rebind(trans); } tParticleSet Particle::siblings() const { tParticleSet theSiblings; for ( tParticleVector::const_iterator pit = parents().begin(); pit != parents().end(); ++pit ) theSiblings.insert((*pit)->children().begin(), (*pit)->children().end()); theSiblings.erase(const_cast(this)); return theSiblings; } void Particle::colourNeighbour(tPPtr p, bool anti) { tColinePtr line = colourLine(!anti); if ( !line ) line = ColourLine::create(this, !anti); line->addColoured(p, anti); } void Particle::outgoingColour(tPPtr p, bool anti) { tColinePtr line = colourLine(anti); if ( !line ) line = ColourLine::create(this, anti); line->addColoured(p, anti); } tPPtr Particle::incomingColour(bool anti) const { if ( !hasColourInfo() ) return tPPtr(); tColinePtr line = colourLine(anti); if ( !line ) return tPPtr(); for ( int i = 0, N = parents().size(); i < N; ++i ) if ( parents()[i]->hasColourLine(line, anti) ) return parents()[i]; return tPPtr(); } tPPtr Particle::outgoingColour(bool anti) const { if ( !hasColourInfo() ) return tPPtr(); tColinePtr line = colourLine(anti); if ( !line ) return tPPtr(); for ( int i = 0, N = children().size(); i < N; ++i ) if ( children()[i]->hasColourLine(line, anti) ) return children()[i]; return tPPtr(); } LorentzPoint Particle::labVertex() const { LorentzPoint r(rep().theBirthStep && rep().theBirthStep->collision()? vertex() + rep().theBirthStep->collision()->vertex(): vertex()); return r; } void Particle::setLabVertex(const LorentzPoint & p) { rep().theVertex = ( rep().theBirthStep && rep().theBirthStep->collision()? p - rep().theBirthStep->collision()->vertex() : p ); } void Particle::transform(const LorentzRotation & r) { if ( hasRep() && spinInfo() ) spinInfo()->transform(momentum(), r); theMomentum.transform(r); if ( !hasRep() ) return; rep().theVertex.transform(r); rep().theLifeLength.transform(r); } void Particle::deepTransform(const LorentzRotation & r) { transform(r); if ( !theRep ) return; for ( int i = 0, N = children().size(); i < N; ++i ) rep().theChildren[i]->deepTransform(r); if ( rep().theNext ) rep().theNext->deepTransform(r); } void Particle::rotateX(double a) { LorentzRotation r; r.rotateX(a); transform(r); } void Particle::deepRotateX(double a) { LorentzRotation r; r.rotateX(a); deepTransform(r); } void Particle::rotateY(double a) { LorentzRotation r; r.rotateY(a); transform(r); } void Particle::deepRotateY(double a) { LorentzRotation r; r.rotateY(a); deepTransform(r); } void Particle::rotateZ(double a) { LorentzRotation r; r.rotateZ(a); transform(r); } void Particle::deepRotateZ(double a) { LorentzRotation r; r.rotateZ(a); deepTransform(r); } void Particle::rotate(double a, const Axis & axis) { LorentzRotation r; r.rotate(a, axis); transform(r); } void Particle::deepRotate(double a, const Axis & axis) { LorentzRotation r; r.rotate(a, axis); deepTransform(r); } string Particle::outputFormat = "%n3%s10%i8 %p[,]0 %c(,) %^^0%vv0 %>>0%<>0 %l{,}0\n" " %x10.3%y10.3%z10.3%e10.3%m10.3\n"; int getNumber(string::const_iterator & pos, int def) { if ( !isdigit(*pos) ) return def; def = *pos++ - '0'; while ( isdigit(*pos) ) def = 10*def + *pos++ - '0'; return def; } void writePrecision(ostream & os, string::const_iterator & pos, int defw, int defp, double x) { defw = getNumber(pos, defw); if ( *pos == '.' ) defp = getNumber(++pos, defp); int oldp = os.precision(); os << setprecision(defp) << setw(defw) << x << setprecision(oldp); } void writeStringAdjusted(ostream & os, bool left, int w, string str) { while ( !left && w-- > int(str.size()) ) os << ' '; os << str; while ( left && w-- > int(str.size()) ) os << ' '; } template void writeParticleRanges(ostream & os, const Container & co, char sep, int w) { set cnum; for ( typename Container::const_iterator it = co.begin(); it != co.end(); ++it) cnum.insert((**it).number()); bool elipsis = false; int last = -10; for ( set::iterator it = cnum.begin(); it != cnum.end(); ++it) { int n = *it; int next = 0; set::iterator itn = it; if ( ++itn != cnum.end() ) next = *itn; bool writeit = true; bool writesep = false; if ( elipsis && ( n != last + 1 || n != next - 1 ) ) elipsis = false; else if ( !elipsis && n == last + 1 && n == next -1 ) { os << ".."; elipsis = true; writeit = false; } else if ( elipsis && n == last + 1 && n == next -1 ) writeit = false; else if ( it != cnum.begin() ) writesep = true; if ( writeit ) { if ( writesep ) os << sep; os << setw(w) << n; } last = n; } } ostream & ThePEG::operator<<(ostream & os, const Particle & p) { return p.print(os, p.birthStep()); } ostream & Particle::print(ostream & os, tcStepPtr step) const { if ( !step ) step = birthStep(); tCollPtr coll = step? step->collision(): tCollPtr(); tEventPtr event = coll? coll->event(): tEventPtr(); string::const_iterator pos = Particle::outputFormat.begin(); ios::fmtflags saveflags = os.setf(ios::fixed, ios::floatfield); while ( pos != Particle::outputFormat.end() ) { if ( *pos == '%' && ++pos != Particle::outputFormat.end() ) { bool left = false; if ( *pos == '-' ) { left = true; os.setf(ios::left, ios::adjustfield); ++pos; } else { os.setf(ios::right, ios::adjustfield); } char mark; char open; char close; char sep; int w; string str; string fill; if ( pos == Particle::outputFormat.end() ) break; bool fullColour = false; switch ( *pos ) { case 'n': os << setw(getNumber(++pos, 3)) << number(); break; case 'i': os << setw(getNumber(++pos, 8)) << id(); break; case 's': writeStringAdjusted(os, left, getNumber(++pos, 8), PDGName()); break; case 'x': writePrecision(os, ++pos, 10, 3, momentum().x()/GeV); break; case 'y': writePrecision(os, ++pos, 10, 3, momentum().y()/GeV); break; case 'z': writePrecision(os, ++pos, 10, 3, momentum().z()/GeV); break; case 'e': writePrecision(os, ++pos, 10, 3, momentum().e()/GeV); break; case 'm': writePrecision(os, ++pos, 10, 3, momentum().mass()/GeV); break; case 'P': fullColour = true; case 'p': open = *++pos; sep = *++pos; close = *++pos; w = getNumber(++pos, 0); if ( parents().empty() ) break; if ( open ) os << open; writeParticleRanges(os, parents(), sep, w); if ( fullColour && hasColourInfo() && ( incomingColour() || incomingAntiColour() ) ) { if ( close ) os << open; if ( incomingColour() ) os << "+" << incomingColour()->number(); if ( incomingAntiColour() ) os << "-" << incomingAntiColour()->number(); if ( close ) os << close; } if ( close ) os << close; break; case 'l': open = *++pos; sep = *++pos; close = *++pos; w = getNumber(++pos, 0); if ( hasColourInfo() && ( colourLine() || antiColourLine() ) && event) { if ( open ) os << open; vector clines = colourInfo()->colourLines(); for ( int i = 0, N = clines.size(); i < N; ++i ) { if ( i > 0 && sep ) os << sep; clines[i]->write(os, event, false); } vector aclines = colourInfo()->antiColourLines(); for ( int i = 0, N = aclines.size(); i < N; ++i ) { if ( ( i > 0 || clines.size() ) && sep ) os << sep; aclines[i]->write(os, event, true); } if ( close ) os << close; } break; case 'C': fullColour = true; case 'c': open = *++pos; sep = *++pos; close = *++pos; w = getNumber(++pos, 0); if ( children().empty() ) break; if ( open ) os << open; writeParticleRanges(os, children(), sep, w); if ( fullColour && hasColourInfo() && ( outgoingColour() || outgoingAntiColour() ) ) { if ( close ) os << open; if ( outgoingColour() ) os << "+" << outgoingColour()->number(); if ( outgoingAntiColour() ) os << "-" << outgoingAntiColour()->number(); if ( close ) os << close; } if ( close ) os << close; break; case '>': mark = *++pos; w = getNumber(++pos, 0); if ( hasColourInfo() && step && step->colourNeighbour(this) ) { os << setw(w-1) << step->colourNeighbour(this)->number() << mark; } break; case '<': mark = *++pos; w = getNumber(++pos, 0); if ( hasColourInfo() && step && step->antiColourNeighbour(this) ) { int n = step->antiColourNeighbour(this)->number(); ostringstream oss; oss << mark << n; writeStringAdjusted(os, left, w, oss.str()); } break; case 'v': mark = *++pos; w = getNumber(++pos, 0); if ( next() ) { if ( left && mark ) os << mark; os << setw(w) << next()->number(); if ( !left && mark ) os << mark; } break; case '^': mark = *++pos; w = getNumber(++pos, 0); if ( previous() ) { if ( left && mark ) os << mark; os << setw(w) << previous()->number(); if ( !left && mark ) os << mark; } break; case 'd': switch ( *++pos ) { case 'x': writePrecision(os, ++pos, 10, 3, lifeLength().x()/mm); break; case 'y': writePrecision(os, ++pos, 10, 3, lifeLength().y()/mm); break; case 'z': writePrecision(os, ++pos, 10, 3, lifeLength().z()/mm); break; case 't': writePrecision(os, ++pos, 10, 3, lifeLength().e()/mm); break; case 'T': writePrecision(os, ++pos, 10, 3, lifeLength().tau()/mm); break; } break; case 'V': switch ( *++pos ) { case 'x': writePrecision(os, ++pos, 10, 3, vertex().x()/mm); break; case 'y': writePrecision(os, ++pos, 10, 3, vertex().y()/mm); break; case 'z': writePrecision(os, ++pos, 10, 3, vertex().z()/mm); break; case 't': writePrecision(os, ++pos, 10, 3, vertex().e()/mm); break; } case 'L': switch ( *++pos ) { case 'x': writePrecision(os, ++pos, 10, 3, labVertex().x()/mm); break; case 'y': writePrecision(os, ++pos, 10, 3, labVertex().y()/mm); break; case 'z': writePrecision(os, ++pos, 10, 3, labVertex().z()/mm); break; case 't': writePrecision(os, ++pos, 10, 3, labVertex().e()/mm); break; } break; default: os << *pos++; } } else { if ( pos != Particle::outputFormat.end() ) os << *pos++; } } os.flags(saveflags); return os; } void Particle::debugme() const { cerr << *this; EventRecordBase::debugme(); } void Particle::persistentOutput(PersistentOStream & os) const { EventConfig::putParticleData(os, theData); os << ounit(theMomentum, GeV) << bool( theRep != 0 ); if ( !theRep ) return; os << rep().theParents << rep().theChildren << rep().thePrevious << rep().theNext << rep().theBirthStep << ounit(rep().theVertex, mm) << ounit(rep().theLifeLength, mm) << ounit(rep().theScale, GeV2) << ounit(rep().theVetoScale, GeV2) << rep().theNumber << rep().theDecayMode << rep().theColourInfo << rep().theSpinInfo << rep().theExtraInfo; } void Particle::persistentInput(PersistentIStream & is, int) { bool readRep; EventConfig::getParticleData(is, theData); is >> iunit(theMomentum, GeV) >> readRep; if ( !readRep ) return; if ( !hasRep() ) theRep = new ParticleRep; is >> rep().theParents >> rep().theChildren >> rep().thePrevious >> rep().theNext >> rep().theBirthStep >> iunit(rep().theVertex, mm) >> iunit(rep().theLifeLength, mm) >> iunit(rep().theScale, GeV2) >> iunit(rep().theVetoScale, GeV2) >> rep().theNumber >> rep().theDecayMode >> rep().theColourInfo >> rep().theSpinInfo >> rep().theExtraInfo; } ClassDescription Particle::initParticle; void Particle::Init() {} ThePEG_IMPLEMENT_SET(PPtr,ParticleSet) thepeg-1.8.0.orig/EventRecord/ColourBase.h0000644000175000017500000001070011747772425016574 0ustar sunsun// -*- C++ -*- // // ColourBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ColourBase_H #define ThePEG_ColourBase_H // This is the declaration of the ColourBase class. #include "ThePEG/EventRecord/EventInfoBase.h" #include "ThePEG/EventRecord/ColourLine.h" namespace ThePEG { /** * ColourBase is the base class to be used to supply a * Particle with information about its colour * state. This base class supplies information about the * ColourLines to which the particle is * connected. This should be sufficient for most uses. If any other * info is required for a particle, it may be supplied by an object of * a sub-class of ColourBase, the additional information * would then have to be extracted by dynamically casting to the * sub-class. * * @see Particle * @see ColourLine */ class ColourBase: public EventInfoBase { public: /** ColourLine is a good friend. */ friend class ColourLine; public: /** * Destructor. */ virtual ~ColourBase(); public: /** * Return the anti-colour line to which this particle is connected. */ tColinePtr antiColourLine() const { return theAntiColourLine; } /** * Return the colour line to which this particle is connected. */ tColinePtr colourLine() const { return theColourLine; } /** * Return the anti-colour lines to which this particle is * connected. (Always only one colour line for this base class.) */ virtual vector antiColourLines() const; /** * Return the colour lines to which this particle is * connected. (Always only one colour line for this base class.) */ virtual vector colourLines() const; /** * Return true if the particle is connected to the given (\a anti-) * colour \a line. */ virtual bool hasColourLine(tcColinePtr line, bool anti = false) const; /** * Return true if the particle is connected to the given anti-colour * \a line. */ bool hasAntiColourLine(tcColinePtr line) const { return hasColourLine(line, true); } protected: /** * Set the anti-colour \a line to which this particle is connected. */ virtual void antiColourLine(tColinePtr line) { theAntiColourLine = line; } /** * Set the (\a anti-) colour line to which this particle is connected. */ virtual void colourLine(tColinePtr l, bool anti = false) { if ( anti ) antiColourLine(l); else theColourLine = l; } /** * Remove the anti-colour \a line to which this particle is connected. */ virtual void removeAntiColourLine(tcColinePtr line) { if ( antiColourLine() == line ) theAntiColourLine = tColinePtr(); } /** * Remove the (\a anti-) colour line to which this particle is connected. */ virtual void removeColourLine(tcColinePtr line, bool anti = false) { if ( anti ) removeAntiColourLine(line); else if ( colourLine() == line ) theColourLine = tColinePtr(); } public: /** * Rebind to cloned objects. When a ColourBase is cloned, a shallow * copy is done first, then all ColourLines etc, are * cloned, and finally this method is used to see to that the * pointers in the cloned ColourBase points to the cloned * ColourLines etc. */ virtual void rebind(const EventTranslationMap & trans); /** * Standard function for writing to a persistent stream. */ void persistentOutput(PersistentOStream &) const; /** * Standard functions for reading from a persistent stream. */ void persistentInput(PersistentIStream &, int); /** * Standard Init function. @see Base::Init(). */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const; private: /** * The anti-colour line to which this particle is connected. */ ColinePtr theAntiColourLine; /** * The colour line to which this particle is connected. */ ColinePtr theColourLine; private: /** * Describe concrete class with persistent data. */ static ClassDescription initColourBase; /** * Private and non-existent assignment operator. */ ColourBase & operator=(const ColourBase &); }; /** @cond TRAITSPECIALIZATIONS */ ThePEG_DECLARE_CLASS_TRAITS(ColourBase,EventInfoBase); /** @endcond */ } #endif /* ThePEG_ColourBase_H */ thepeg-1.8.0.orig/EventRecord/MultiColour.h0000644000175000017500000001204311747772425017016 0ustar sunsun// -*- C++ -*- // // MultiColour.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MultiColour_H #define THEPEG_MultiColour_H // // This is the declaration of the MultiColour class. // #include "ThePEG/EventRecord/ColourBase.h" namespace ThePEG { /** * This class is used to store colour information of RemnantParticle * objects and other particle classes with complicated colour * structures. Rather than just having a */ class MultiColour: public ColourBase { public: using ColourBase::colourLine; using ColourBase::antiColourLine; /** * Return the anti-colour lines to which this particle is * connected. */ virtual vector antiColourLines() const; /** * Return the colour lines to which this particle is * connected. */ virtual vector colourLines() const; /** * Add the given (\a anti-) colour \a line to the particle. If the base * class has no (anti-) colour line, it will also be set. */ virtual void colourLine(tColinePtr line, bool anti = false); /** * Add the given (\a anti-) colour \a line to the particle. If the base * class has no (anti-) colour line, it will also be set. */ virtual void colourLine(tColinePtr line, int index, bool anti = false); /** * Add the given anti-colour \a line to the particle. If the base * class has no anti-colour line, it will also be set. */ virtual void antiColourLine(tColinePtr line); /** * Add the given anti-colour \a line to the particle. If the base * class has no anti-colour line, it will also be set. */ virtual void antiColourLine(tColinePtr line, int index); /** * Remove the given (\a anti-) colour \a line from the particle. If * the line is the colourLine() of the base class, it will be * removed there as well. */ virtual void removeColourLine(tcColinePtr line, bool anti = false); /** * Remove the given anti-colour \a line from the particle. If the * line is the antiColourLine() of the base class, it will be * removed there as well. */ virtual void removeAntiColourLine(tcColinePtr line); /** * Return true if the particle is connected to the given (\a anti-) * colour \a line. */ virtual bool hasColourLine(tcColinePtr line, bool anti = false) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const { return new_ptr(*this); } private: /** * The set of colour lines to which a particle is attached. */ list theColourLines; /** * The set of anti-colour lines to which a particle is attached. */ list theAntiColourLines; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initMultiColour; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MultiColour & operator=(const MultiColour &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MultiColour. */ template <> struct BaseClassTrait { /** Typedef of the first base class of MultiColour. */ typedef ColourBase NthBase; }; /** This template specialization informs ThePEG about the name of * the MultiColour class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MultiColour"; } /** * The name of a file containing the dynamic library where the class * MultiColour is implemented. It may also include several, space-separated, * libraries if the class MultiColour depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "MultiColour.so"; } }; /** @endcond */ } #endif /* THEPEG_MultiColour_H */ thepeg-1.8.0.orig/EventRecord/SubProcessGroup.cc0000644000175000017500000000450511747772425020007 0ustar sunsun// -*- C++ -*- // // SubProcessGroup.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SubProcessGroup class. // #include "SubProcessGroup.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include using namespace ThePEG; SubProcessGroup:: SubProcessGroup(const PPair & newIncoming, tCollPtr newCollision, tcEventBasePtr newHandler) : SubProcess(newIncoming,newCollision,newHandler) {} SubProcessGroup::~SubProcessGroup() {} SubProPtr SubProcessGroup::clone() const { return ptr_new::ptr>(*this); } void SubProcessGroup::rebind(const EventTranslationMap & trans) { SubProcess::rebind(trans); for ( SubProcessVector::iterator sub = dependent().begin(); sub != dependent().end(); ++sub ) (*sub = trans.translate(*sub))->rebind(trans); } void SubProcessGroup::transform(const LorentzRotation & r) { SubProcess::transform(r); for ( SubProcessVector::iterator sub = dependent().begin(); sub != dependent().end(); ++sub ) (**sub).transform(r); } void SubProcessGroup::printMe(ostream& os) const { os << "head sub-process of this group with relative weight " << groupWeight() << ":\n"; SubProcess::printMe(os); os << "dependent sub-processes in this group:\n"; for ( SubProcessVector::const_iterator sub = dependent().begin(); sub != dependent().end(); ++sub ) { os << "performed by " << EventConfig::nameHandler((**sub).handler()) << " with relative weight " << (**sub).groupWeight() << "\n"; (**sub).printMe(os); } } void SubProcessGroup::persistentOutput(PersistentOStream & os) const { os << theDependent; } void SubProcessGroup::persistentInput(PersistentIStream & is, int) { is >> theDependent; } ClassDescription SubProcessGroup::initSubProcessGroup; void SubProcessGroup::Init() {} thepeg-1.8.0.orig/EventRecord/HelicityVertex.cc0000644000175000017500000000177211747772425017655 0ustar sunsun// -*- C++ -*- // // HelicityVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HelicityVertex class. // // Author: Peter Richardson // #include "SpinInfo.h" #include "HelicityVertex.h" using namespace ThePEG; AbstractNoPIOClassDescription HelicityVertex::initHelicityVertex; // Definition of the static class description member. void HelicityVertex::Init() {} void HelicityVertex::rebind(const EventTranslationMap & trans) { EventInfoBase::rebind(trans); for(unsigned int ix=0;ix<_incoming.size();++ix) { _incoming[ix]=trans.translate(_incoming[ix]); } for(unsigned int ix=0;ix<_outgoing.size();++ix) { _outgoing[ix]=trans.translate(_outgoing[ix]); } } thepeg-1.8.0.orig/EventRecord/RemnantParticle.h0000644000175000017500000001137011747772425017632 0ustar sunsun// -*- C++ -*- // // RemnantParticle.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_RemnantParticle_H #define THEPEG_RemnantParticle_H // // This is the declaration of the RemnantParticle class. // #include "ThePEG/EventRecord/Particle.h" #include "RemnantParticle.fh" #include "ThePEG/PDT/RemnantData.fh" #include "ThePEG/PDT/RemnantDecayer.fh" namespace ThePEG { /** * Here is the documentation of the RemnantParticle class. */ class RemnantParticle: public Particle { public: /** * RemnantDecayer is a friend. */ friend class RemnantDecayer; public: /** @name Standard constructors and destructors. */ //@{ /** * The standard constructor takes as argument the \a particle for * which this is the remnant and a \a decayer capable of performing * the decay. Optionally a \a parton that has been extracted. Note * that if the parton is given, the extraction may silently fail. */ RemnantParticle(const Particle & particle, RemDecPtr decayer, tPPtr parton = tPPtr()); public: /** * Modify the properties to reflect that the given \a parton was * extracted. If \a fixcolour is true a colour line is drawn from * the remnant to the extracted parton. */ bool extract(tPPtr parton, bool fixcolour = false); /** * Modify the properties to reflect that the previously extracted * parton, \a oldp, was evolved backwards to the the parton \a * newp. If \a fixcolour is true a colour line is drawn from the * remnant to the extracted parton. */ bool reextract(tPPtr oldp, tPPtr newp, bool fixcolour = false); /** * Modify the properties to reflect that the given \a parton which * was previously extracted is removed. */ bool remove(tPPtr parton); /** * Acces the extracted partons. */ const PVector & extracted() const { return theExtracted; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** * If necessary, colour-connect this remnant to the given \a parton. */ void fixColourLines(tPPtr parton); private: /** * The RemnantData object associated to this remnant. */ RemPDPtr remData; /** * The parent from which this remnant resulted. */ tcPPtr parent; /** * The set of extracted partons. */ PVector theExtracted; protected: /** * Private default constructor must only be used by the * PersistentIStream class via the ClassTraits class. */ RemnantParticle() {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initRemnantParticle; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ RemnantParticle & operator=(const RemnantParticle &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of RemnantParticle. */ template <> struct BaseClassTrait { /** Typedef of the first base class of RemnantParticle. */ typedef Particle NthBase; }; /** This template specialization informs ThePEG about the name of * the RemnantParticle class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RemnantParticle"; } /** Create a Particle object. */ static TPtr create() { return TPtr::Create(RemnantParticle()); } }; /** @endcond */ } #endif /* THEPEG_RemnantParticle_H */ thepeg-1.8.0.orig/EventRecord/EventConfig.h0000644000175000017500000001170011747772425016746 0ustar sunsun// -*- C++ -*- // // EventConfig.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventConfig_H #define ThePEG_EventConfig_H /** \file EventConfig.h * This is the main config header file for the Event classes. Do not * make changes in this file. If these classes are used outside of * ThePEG you probably need to need to modify base classes persistency * scheme etc. If so, edit a copy of the file which can be included * instead of this file using the macro * ThePEG_ALTERNATIVE_EVENT_RECORD. */ #ifndef ThePEG_NOT_ThePEG #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Rebinder.fh" #include "ThePEG/Persistency/PersistentOStream.fh" #include "ThePEG/Persistency/PersistentIStream.fh" #ifndef ThePEG_ALTERNATIVE_EVENT_RECORD #include "ThePEG/Vectors/Lorentz5Vector.h" #include "ThePEG/Vectors/LorentzRotation.h" namespace ThePEG { /** EventRecordBase is the base class of all event record classes. It * must be typedefed to a class which allows for garbage * collection, since none of the event record classes are deleted * explicitly. */ typedef Base EventRecordBase; /** Alias for a reference counted pointer to EventRecordBase. */ typedef Ptr::pointer EventBasePtr; /** Alias for a reference counted pointer to const EventRecordBase. */ typedef Ptr::const_pointer cEventBasePtr; /** Alias for a transient pointer to EventRecordBase. */ typedef Ptr::transient_pointer tEventBasePtr; /** Alias for a transient pointer to const EventRecordBase. */ typedef Ptr::transient_const_pointer tcEventBasePtr; /** Alias for a rebinder object able to relate pointers to original * objects to pointers to their clones. */ typedef Rebinder EventTranslationMap; /** ParticleClass is the name used for Particle in the event record classes. */ typedef Particle ParticleClass; /** ParticleDataClass is the name used for ParticleData in the event * record classes. */ typedef ParticleData ParticleDataClass; /** Alias for a reference counted pointer to ParticleDataClass. */ typedef Ptr::pointer EventPDPtr; /** Alias for a reference counted pointer to const ParticleDataClass. */ typedef Ptr::const_pointer cEventPDPtr; /** Alias for a transient pointer to ParticleDataClass. */ typedef Ptr::transient_pointer tEventPDPtr; /** Alias for a transient pointer to const ParticleDataClass. */ typedef Ptr::transient_const_pointer tcEventPDPtr; /** A vector of transient pointers to Particle. */ typedef vector tParticleVector; /** A vector of pointers to Particle. */ typedef vector ParticleVector; /** A set of pointers to Particle. */ typedef set > ParticleSet; /** A set of transient pointers to Particle. */ typedef set > tParticleSet; /** A set of transient pointers to const Particle. */ typedef set > tcParticleSet; /** A vector of pointers to Step. */ typedef vector StepVector; /** A vector of pointers to SubProcess. */ typedef vector SubProcessVector; /** A vector of transient pointers to SubProcess. */ typedef vector tSubProcessVector; /** A vector of pointers to Collision. */ typedef vector CollisionVector; /** A set of pointers to Step. */ typedef set > StepSet; /** A set of pointers to SubProcess. */ typedef set > SubProcessSet; /** A helper class to facilitate persistent input and output. */ struct EventConfig { /** * Optional pointer to the current EventGenerator. * If \a currentGenerator is set during persistent output, only the * PDG number of a particle type is written rather than the full * ParticleData object. Also only the name of handlers is written * rather than the full objects. When this is read back in again, * the \a currentGenerator must be set so that conversion from * name/number back to objects can be done. */ static tcEventBasePtr currentGenerator; /** Write a handler object to a persistent stream. */ static void putHandler(PersistentOStream & os, tcEventBasePtr h); /** Read a handler object from a persistent stream. */ static void getHandler(PersistentIStream & is, tcEventBasePtr & h); /** Write a ParticleData object to a persistent stream. */ static void putParticleData(PersistentOStream & os, tcEventPDPtr pd); /** Read a ParticleData object from a persistent stream. */ static void getParticleData(PersistentIStream & is, cEventPDPtr & pd); /** Return the name of a handler object. */ static string nameHandler(tcEventBasePtr h); }; } #else #include ThePEG_ALTERNATIVE_EVENT_RECORD #endif #endif /* ThePEG_NOT_ThePEG */ #endif /* ThePEG_EventConfig_H */ thepeg-1.8.0.orig/EventRecord/ColourBase.cc0000644000175000017500000000317111747772425016736 0ustar sunsun// -*- C++ -*- // // ColourBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ColourBase class. // #include "ColourBase.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; ColourBase::~ColourBase() {} EIPtr ColourBase::clone() const { return new_ptr(*this); } bool ColourBase::hasColourLine(tcColinePtr line, bool anti) const { return ( anti? ( antiColourLine() == line ): ( colourLine() == line ) ); } vector ColourBase::antiColourLines() const { return antiColourLine()? vector(1, antiColourLine()): vector(); } vector ColourBase::colourLines() const { return colourLine()? vector(1, colourLine()): vector(); } void ColourBase::rebind(const EventTranslationMap & trans) { theAntiColourLine = trans.translate(theAntiColourLine); theColourLine = trans.translate(theColourLine); } void ColourBase::persistentOutput(PersistentOStream & os) const { os << theAntiColourLine << theColourLine; } void ColourBase::persistentInput(PersistentIStream & is, int) { is >> theAntiColourLine >> theColourLine; } ClassDescription ColourBase::initColourBase; void ColourBase::Init() {} thepeg-1.8.0.orig/EventRecord/Makefile.in0000644000175000017500000004765411756366734016456 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = EventRecord ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGEvent_la_LIBADD = am__objects_1 = Event.lo Collision.lo SubProcess.lo SubProcessGroup.lo \ Step.lo Particle.lo EventInfoBase.lo ColourLine.lo \ ColourBase.lo SpinInfo.lo EventConfig.lo ColourSinglet.lo \ RemnantParticle.lo MultiColour.lo HelicityVertex.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGEvent_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGEvent_la_OBJECTS = $(am_libThePEGEvent_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGEvent_la_SOURCES) DIST_SOURCES = $(libThePEGEvent_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = Event.cc Collision.cc SubProcess.cc SubProcessGroup.cc Step.cc Particle.cc \ EventInfoBase.cc ColourLine.cc ColourBase.cc SpinInfo.cc \ EventConfig.cc ColourSinglet.cc RemnantParticle.cc MultiColour.cc \ HelicityVertex.cc DOCFILES = EventConfig.h Collision.h Event.h Particle.h ParticleTraits.h \ SelectorBase.h StandardSelectors.h Step.h SubProcess.h SubProcessGroup.h \ EventInfoBase.h ColourLine.h ColourBase.h SpinInfo.h \ ColourSinglet.h TmpTransform.h RemnantParticle.h MultiColour.h \ HelicityVertex.h RhoDMatrix.h INCLUDEFILES = $(DOCFILES) Collision.tcc \ Particle.fh Particle.tcc \ Step.tcc SubProcess.tcc RemnantParticle.fh HelicityVertex.fh noinst_LTLIBRARIES = libThePEGEvent.la libThePEGEvent_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu EventRecord/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu EventRecord/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGEvent.la: $(libThePEGEvent_la_OBJECTS) $(libThePEGEvent_la_DEPENDENCIES) $(EXTRA_libThePEGEvent_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGEvent_la_OBJECTS) $(libThePEGEvent_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Collision.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColourBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColourLine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColourSinglet.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Event.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EventConfig.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EventInfoBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HelicityVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiColour.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Particle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RemnantParticle.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpinInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Step.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SubProcess.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SubProcessGroup.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/EventRecord/RhoDMatrix.h0000644000175000017500000000636711754473550016570 0ustar sunsun// -*- C++ -*- // // RhoDMatrix.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RhoDMatrix_H #define ThePEG_RhoDMatrix_H // This is the declaration of the RhoDMatrix class. #include "ThePEG/PDT/PDT.h" #include "ThePEG/Helicity/HelicityDefinitions.h" #include namespace ThePEG { /** * The RhoDMatrix class is designed to implement the storage of the * rho and D matrices which are required for the spin correlation * algorithm. The matrix stores the spin as 2s+1. * * @author Peter Richardson * */ class RhoDMatrix { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor with undefined spin. */ RhoDMatrix() : _spin(), _ispin() {} /** * Standard constructor giving the spin as 2s+1. The matrix starts out averaged, * unless the second argument is false, when it is zeroed. */ RhoDMatrix(PDT::Spin inspin, bool average = true) : _spin(inspin), _ispin(abs(int(inspin))) { assert(_ispin <= MAXSPIN); // initialize to average for(size_t ix=0; ix<_ispin; ++ix) for(size_t iy=0; iy<_ispin; ++iy) _matrix[ix][iy] = (average && ix==iy) ? 1./_ispin : 0.; } //@} public: /** @name Access matrix elements. */ //@{ /** * Return an element of the matrix. */ Complex operator() (size_t ix, size_t iy) const { assert(ix < _ispin); assert(iy < _ispin); return _matrix[ix][iy]; } /** * Set an element of the matrix. */ Complex & operator() (size_t ix, size_t iy) { assert(ix < _ispin); assert(iy < _ispin); return _matrix[ix][iy]; } /** * renormalise the matrix so it has unit trace */ void normalize() { #ifndef NDEBUG static const double epsa=1e-30, epsb=1e-10; #endif Complex norm = 0.; for(size_t ix=0; ix<_ispin; ++ix) norm += _matrix[ix][ix]; assert(norm.real() > epsa); assert(norm.imag()/norm.real() < epsb); double invnorm = 1./norm.real(); for(size_t ix=0; ix<_ispin; ++ix) for(size_t iy=0; iy<_ispin; ++iy) _matrix[ix][iy]*=invnorm; } //@} /** @name Access the spin. */ //@{ /** * Get the spin. The spin is returned as 2J+1 in units of hbar/2. */ PDT::Spin iSpin() const { return _spin; } //@} /** * Output the spin density matrix for debugging purposes. */ friend ostream & operator<<(ostream & os, const RhoDMatrix & rd); private: /** * 2s+1 for the particle. */ PDT::Spin _spin; /** * Storage of 2s+1 for speed. */ size_t _ispin; /** * Spin matrix size */ enum { MAXSPIN = 5 }; /** * Storage for the matrix allowing up to spin 2 particles. */ // Deliberately not using vector<> to avoid calls to 'new' // from this commonly used class. Complex _matrix[MAXSPIN][MAXSPIN]; }; /** Output operator */ inline ostream & operator<<(ostream & os, const RhoDMatrix & rd) { for (size_t ix = 0; ix < rd._ispin; ++ix) { for (size_t iy = 0; iy < rd._ispin; ++iy) os << rd._matrix[ix][iy] << " "; os << '\n'; } return os; } } #endif /* ThePEG_RhoDMatrix_H */ thepeg-1.8.0.orig/EventRecord/MultiColour.cc0000644000175000017500000000776611747772425017174 0ustar sunsun// -*- C++ -*- // // MultiColour.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MultiColour class. // #include "MultiColour.h" #include "ThePEG/Interface/ClassDocumentation.h" #include #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; vector MultiColour::antiColourLines() const { return vector(theAntiColourLines.begin(), theAntiColourLines.end()); } vector MultiColour::colourLines() const { return vector(theColourLines.begin(), theColourLines.end()); } bool MultiColour::hasColourLine(tcColinePtr line, bool anti) const { return ( anti? ( find(theAntiColourLines.begin(),theAntiColourLines.end(),line) != theAntiColourLines.end() ): ( find(theColourLines.begin(),theColourLines.end(),line) != theColourLines.end() ) ); } void MultiColour::colourLine(tColinePtr line, bool anti) { if ( anti ) antiColourLine(line); else { if ( !colourLine() ) ColourBase::colourLine(line); if(find(theColourLines.begin(),theColourLines.end(),line)== theColourLines.end()) theColourLines.push_back(line); } } void MultiColour::colourLine(tColinePtr line, int index, bool anti) { if ( anti ) { antiColourLine(line,index); return; } if ( !colourLine() ) ColourBase::colourLine(line); if(find(theColourLines.begin(),theColourLines.end(),line)!=theColourLines.end()) return; int ix=0; for(list::iterator it=theColourLines.begin(); it!=theColourLines.end();++it) { ++ix; if(ix==index) { it = theColourLines.insert(it,line); ++it; removeColourLine(*it); if ( !colourLine() ) ColourBase::colourLine(line); return; } } for(;ix::iterator it=theAntiColourLines.begin(); it!=theAntiColourLines.end();++it) { ++ix; if(ix==index) { it = theAntiColourLines.insert(it,line); ++it; removeAntiColourLine(*it); if ( !antiColourLine() ) ColourBase::antiColourLine(line); return; } } for(;ix> theColourLines >> theAntiColourLines; } ClassDescription MultiColour::initMultiColour; // Definition of the static class description member. void MultiColour::Init() { static ClassDocumentation documentation ("There is no documentation for the MultiColour class"); } thepeg-1.8.0.orig/EventRecord/Makefile.am0000644000175000017500000000161011754473550016414 0ustar sunsunmySOURCES = Event.cc Collision.cc SubProcess.cc SubProcessGroup.cc Step.cc Particle.cc \ EventInfoBase.cc ColourLine.cc ColourBase.cc SpinInfo.cc \ EventConfig.cc ColourSinglet.cc RemnantParticle.cc MultiColour.cc \ HelicityVertex.cc DOCFILES = EventConfig.h Collision.h Event.h Particle.h ParticleTraits.h \ SelectorBase.h StandardSelectors.h Step.h SubProcess.h SubProcessGroup.h \ EventInfoBase.h ColourLine.h ColourBase.h SpinInfo.h \ ColourSinglet.h TmpTransform.h RemnantParticle.h MultiColour.h \ HelicityVertex.h RhoDMatrix.h INCLUDEFILES = $(DOCFILES) Collision.tcc \ Particle.fh Particle.tcc \ Step.tcc SubProcess.tcc RemnantParticle.fh HelicityVertex.fh noinst_LTLIBRARIES = libThePEGEvent.la libThePEGEvent_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/EventRecord/TmpTransform.h0000644000175000017500000000411511747772425017175 0ustar sunsun// -*- C++ -*- // // TmpTransform.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_TmpTransform_H #define THEPEG_TmpTransform_H // // This is the declaration of the TmpTransform class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * This is a wrapper class to be used to temporarily make a Lorentz * transform of an object. When created a pointer to an object and a * LorentzRotation is provided, and the objects transform(const * LorentzRotation &) function is called. When the destructed the * inverse tansformation is performed. In this way one can make sure * that the inverse transformation is performed even if the function * where the TmpTransform is created returns or throws an exception. */ template class TmpTransform { public: /** * The contructor will call the transform(const LorentzRotation &) * of an object pointed to by \a p with \a r as argument. */ TmpTransform(Ptr p, const LorentzRotation & r) : ptr(p), rot(r) { ptr->transform(rot); } /** * The destructor performs the inverse of the transformation done in * the constructor. */ ~TmpTransform() { rot.invert(); ptr->transform(rot); } private: /** * A pointer to the object being transformed. */ Ptr ptr; /** * The rotation performed in the constructor. */ LorentzRotation rot; private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ TmpTransform & operator=(const TmpTransform &); /** * The default constructor is private and must never be called. * In fact, it should not even be implemented. */ TmpTransform(); /** * The copy constructor is private and must never be called. * In fact, it should not even be implemented. */ TmpTransform(const TmpTransform &); }; } #endif /* THEPEG_TmpTransform_H */ thepeg-1.8.0.orig/Analysis/0000755000175000017500000000000011756460367013731 5ustar sunsunthepeg-1.8.0.orig/Analysis/FactoryBase.h0000644000175000017500000004111611747772425016310 0ustar sunsun// -*- C++ -*- // // FactoryBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_FactoryBase_H #define THEPEG_FactoryBase_H // // This is the declaration of the FactoryBase class. // #include "ThePEG/Interface/Interfaced.h" #include "FactoryBase.fh" namespace AIDA { class IHistogram1D; class IHistogram2D; class IDataPointSet; class IAnalysisFactory; class ITree; class IHistogramFactory; class IDataPointSetFactory; } namespace ThePEG { /** * Here is the documentation of the FactoryBase class. This * abstract class is used to wrap the interface to a particular * AIDA-compliant histogram package to be used in * AnalysisHandlers in ThePEG. Concrete subclasses must * implement the doinitrun() function to create an object of a class * inheriting from AIDA::IAnalysisFactory and assign it with the * analysisFactory(AIDA::IAnalysisFactory*) function before calling * doinitrun() for the FactoryBase base class. * * A FactoryBase object should be assigned to the EventGenerator * object controlling a run, and AnalysisHandlers should * access it via the Generator with the generator() function. * * @see \ref FactoryBaseInterfaces "The interfaces" * defined for FactoryBase. */ class FactoryBase: public Interfaced { public: /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef AIDA::IHistogram1D * tH1DPtr; /** * Convenient typedef for pointer to const AIDA::IHistogram1D. */ typedef const AIDA::IHistogram1D * tcH1DPtr; /** * Convenient typedef for pointer to AIDA::IHistogram2D. */ typedef AIDA::IHistogram2D * tH2DPtr; /** * Convenient typedef for pointer to const AIDA::IHistogram2D. */ typedef const AIDA::IHistogram2D * tcH2DPtr; /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef AIDA::IDataPointSet * tDSetPtr; /** * Convenient typedef for pointer to const AIDA::IHistogram1D. */ typedef const AIDA::IDataPointSet * tcDSetPtr; public: /** * DataFiller is a helper class to facilitate adding data to a * DataPointSet. For a D-dimensional DataPointSet N*3*D numbers should * be added with the standard << operator ordered as x-value, * x-upper-error, x-lower-error, y-value, y-upper-error, etc.. Only * when the DataFIller object is detleted will the points be added. */ class DataFiller { public: /** * The standard constructor needs a IDataPointSet as argument. */ DataFiller(AIDA::IDataPointSet * dps) : dset(dps) {} /** * Copy constructor. */ DataFiller(const DataFiller & df) : dset(df.dset) {} /** * Destructor. Will commit the pints filled to the underlying * IDataPointSet. */ ~DataFiller(); /** * Add a number to measurement currently being read. */ DataFiller & operator<<(double x) { v.push_back(x); return *this; } /** * Automatic conversion to the underlying IDataPointSet. */ operator AIDA::IDataPointSet * () { return dset; } private: /** * The underlying IDataPointSet. */ AIDA::IDataPointSet * dset; /** * The collected numbers to be committed to the IDataPointSet. */ deque v; }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ FactoryBase(); /** * The copy constructor. */ FactoryBase(const FactoryBase &); /** * The destructor. */ virtual ~FactoryBase(); //@} public: /** @name Simple access functions. */ //@{ /** * Together with suffix(), the name of the file where the resulting * histograms will be stored. If empty, generator()->filename() will * be used instead. */ const string & filename() const { return theFilename; } /** * Together with filename(), the name of the file where the * resulting histograms will be stored. */ const string & suffix() const { return theSuffix; } /** * The format in which the histograms are stored in the output file. */ const string & storeType() const { return theStoreType; } //@} /** @name Manipulate histograms */ //@{ /** * Rescale the given \a histogram so that the integral over the bins * will give the correct integrated cross section for the observable * in the given \a unit. */ virtual void normalizeToXSec(tH1DPtr histogram, CrossSection unit = picobarn) const = 0; /** * Rescale the given \a histogram so that the integral over the bins * will give the correct integrated cross section for the observable * in the given \a unit. */ virtual void normalizeToXSec(tH2DPtr histogram, CrossSection unit = picobarn) const = 0; /** * Rescale the given \a histogram so that the integral over the bins * gives the fraction of the total cross section generated which is * contained in the bins. */ virtual void normalizeToXSecFraction(tH1DPtr histogram) const = 0; /** * Rescale the given \a histogram so that the integral over the bins * gives the fraction of the total cross section generated which is * contained in the bins. */ virtual void normalizeToXSecFraction(tH2DPtr histogram) const = 0; /** * Rescale the given \a histogram so that the integral over the bins * gives one. */ virtual void normalizeToUnity(tH1DPtr histogram) const = 0; /** * Rescale the given \a histogram so that the integral over the bins * gives one. */ virtual void normalizeToUnity(tH2DPtr histogram) const = 0; //@} /** @name Access the underlying AIDA objects. */ //@{ /** * Access the underlying AIDA::IAnalysisFactory object. */ AIDA::IAnalysisFactory & analysisFactory() const { return *theAnalysisFactory; } /** * Access the underlying AIDA::ITree object. */ AIDA::ITree & tree() const; /** * A pointer to the underlying AIDA::IHistogramFactory object. */ AIDA::IHistogramFactory & histogramFactory() const; /** * A pointer to the underlying AIDA::IDataPointSetFactory object. */ AIDA::IDataPointSetFactory & dataSetFactory() const; /** * Create a new directory in the underlying AIDA tree. */ void mkdir(const string & path); /** * Create a new directory in the underlying AIDA tree. */ void mkdirs(const string & path); /** * Set the default working directory for the underlying AIDA tree. */ void cd(const string & path); /** * Create and return a AIDA::IHistogram1D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * The title of the histogram will be set to the name part of the path. * @param nb the number of bins in the histogram. * @param lo the lower edge of the histogram. * @param up the upper edge of the histogram. * @return a pointer to the created AIDA::IHistogram1D object. */ tH1DPtr createHistogram1D(const string & path, int nb, double lo, double up); /** * Create and return a AIDA::IHistogram1D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * @param title the title of the histogram. * @param nb the number of bins in the histogram. * @param lo the lower edge of the histogram. * @param up the upper edge of the histogram. * @return a pointer to the created AIDA::IHistogram1D object. */ tH1DPtr createHistogram1D(const string & path, const string & title, int nb, double lo, double up); /** * Create and return a AIDA::IHistogram1D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * @param title the title of the histogram. * @param edges A vector of bin edges specifying th bins. * @return a pointer to the created AIDA::IHistogram1D object. */ tH1DPtr createHistogram1D(const string & path, const string & title, const std::vector & edges); /** * Create and return a AIDA::IHistogram2D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * The title of the histogram will be set to the name part of the path. * @param nbx the number of x-bins in the histogram. * @param xlo the lower x-edge of the histogram. * @param xup the upper x-edge of the histogram. * @param nbx the number of y-bins in the histogram. * @param xlo the lower y-edge of the histogram. * @param xup the upper y-edge of the histogram. * @return a pointer to the created AIDA::IHistogram1D object. */ tH2DPtr createHistogram2D(const string & path, int nbx, double xlo, double xup, int nby, double ylo, double yup); /** * Create and return a AIDA::IHistogram2D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * @param title the title of the histogram. * @param nbx the number of x-bins in the histogram. * @param xlo the lower x-edge of the histogram. * @param xup the upper x-edge of the histogram. * @param nby the number of y-bins in the histogram. * @param ylo the lower y-edge of the histogram. * @param yup the upper y-edge of the histogram. * @return a pointer to the created AIDA::IHistogram1D object. */ tH2DPtr createHistogram2D(const string & path, const string & title, int nbx, double xlo, double xup, int nby, double ylo, double yup); /** * Create and return a AIDA::IHistogram2D object in the underlying * AIDA histogram factory. Note that the histogram factory is * responsible for deleting this histogram. * @param path the full path of where the histogram should be placed * in the underlying AIDA tree (on the form * "/dir/subdir/histogramname"). Not that the directory part of the * path typically must already exist in the tree. The directories * can be created with mkdir(string) or mkdirs(string). * @param title the title of the histogram. * @param xedges A vector of bin edges specifying the x-bins. * @param yedges A vector of bin edges specifying the y-bins. * @return a pointer to the created AIDA::IHistogram1D object. */ tH2DPtr createHistogram2D(const string & path, const string & title, const std::vector & xedges, const std::vector & yedges); /** * Create a IDataPointSet with the given \a path and \a title and * containing points with the given number of dimensions, \a * dim. The returned object is a DataFiller which can be used to * facilitate the addition of data points to the set or be converted * to a pointer to the created IDataPointSet. */ DataFiller createDataSet(const string & path, const string & title, int dim); /** * Used by a \a client object to indicate that he has required * histograms from this factory. It is guaranteed that the clients * finish() function is called before the underlying AIDA::ITree is * committed and the AIDA::IHistogramFactory is deleted together * with all histograms. */ void registerClient(tIPtr client); //@} protected: /** * Set the underlying AIDA::IAnalysisFactory object. Note that this * surrenders the controll of the factory to the FactoryBase * object which will delete it in the finish() function. Typically * this function should be called by a concrete subclass in the * doinitrun() function before the doinitrun() function of this * class is called. */ void analysisFactory(AIDA::IAnalysisFactory * x) { theAnalysisFactory = x; } /** * Delete all associated AIDA objects. Note that the tree is not * explicitly committed. */ void clear(); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * Together with theSuffix, the name of the file where the resulting * histograms will be stored. If empty, generator()->filename() will * be used instead. */ string theFilename; /** * Together with theFilename, the name of the file where the * resulting histograms will be stored. */ string theSuffix; /** * The format in which the histograms are stored in the output file. */ string theStoreType; /** * A pointer to the underlying AIDA::IAnalysisFactory object. */ AIDA::IAnalysisFactory * theAnalysisFactory; /** * A pointer to the underlying AIDA::ITree object. */ AIDA::ITree * theTree; /** * A pointer to the underlying AIDA::IHistogramFactory object. */ AIDA::IHistogramFactory * theHistogramFactory; /** * A pointer to the underlying AIDA::IDataPointSetFactory object. */ AIDA::IDataPointSetFactory * theDataSetFactory; /** * A set of client objects which have required histograms from this * factory. */ set clients; private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class with persistent data. */ static AbstractClassDescription initFactoryBase; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ FactoryBase & operator=(const FactoryBase &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of FactoryBase. */ template <> struct BaseClassTrait { /** Typedef of the first base class of FactoryBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of * the FactoryBase class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::FactoryBase"; } }; /** @endcond */ } #endif /* THEPEG_FactoryBase_H */ thepeg-1.8.0.orig/Analysis/RivetAnalysis.h0000644000175000017500000001204111747772425016676 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_RivetAnalysis_H #define THEPEG_RivetAnalysis_H // // This is the declaration of the RivetAnalysis class. // #include "ThePEG/Handlers/AnalysisHandler.h" #include "Rivet/AnalysisHandler.hh" namespace ThePEG { /** * Here is the documentation of the RivetAnalysis class. * * @see \ref RivetAnalysisInterfaces "The interfaces" * defined for RivetAnalysis. */ class RivetAnalysis: public ThePEG::AnalysisHandler { public: /** * The default constructor. */ RivetAnalysis(); public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(ThePEG::tEventPtr event, long ieve, int loop, int state); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(ThePEG::PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(ThePEG::PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual ThePEG::IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual ThePEG::IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the read phase. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ThePEG::ClassDescription initRivetAnalysis; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ RivetAnalysis & operator=(const RivetAnalysis &); private: /** * The Analyses to use */ vector _analyses; /** * The base name of the output file. */ string filename; /** * Enable debugging information from Rivet */ bool debug; /** * The RivetAnalysisHandler */ Rivet::AnalysisHandler * _rivet; /** * Event count */ unsigned long _nevent; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of RivetAnalysis. */ template <> struct BaseClassTrait { /** Typedef of the first base class of RivetAnalysis. */ typedef AnalysisHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the RivetAnalysis class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RivetAnalysis"; } /** * The name of a file containing the dynamic library where the class * RivetAnalysis is implemented. It may also include several, space-separated, * libraries if the class RivetAnalysis depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "RivetAnalysis.so"; } }; /** @endcond */ } #endif /* THEPEG_RivetAnalysis_H */ thepeg-1.8.0.orig/Analysis/XSecCheck.cc0000644000175000017500000000464311747772425016050 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the XSecCheck class. // #include "XSecCheck.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/EventRecord/Event.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "XSecCheck.tcc" #endif #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; XSecCheck::~XSecCheck() {} IBPtr XSecCheck::clone() const { return new_ptr(*this); } IBPtr XSecCheck::fullclone() const { return new_ptr(*this); } void XSecCheck::analyze(tEventPtr event, long ieve, int loop, int state) { AnalysisHandler::analyze(event, ieve, loop, state); sumw += event->weight(); } void XSecCheck::dofinish() { AnalysisHandler::dofinish(); CrossSection xsec = sumw*generator()->histogramScale(); if ( abs(xsec - target) > tol*abs(xsec + target) ) Throw() << "The total cross section of this run, " << xsec/picobarn << " picobarn, dit not match the target value, " << target/picobarn << " picobarn." << Exception::warning; } void XSecCheck::persistentOutput(PersistentOStream & os) const { os << ounit(target, picobarn) << tol << sumw; } void XSecCheck::persistentInput(PersistentIStream & is, int) { is >> iunit(target, picobarn) >> tol >> sumw; } ClassDescription XSecCheck::initXSecCheck; // Definition of the static class description member. void XSecCheck::Init() { static ClassDocumentation documentation ("The XSecCheck class is a simple analysis class used for testing " "purposes. If the total cross section does not match the one specified " "by TargetXSec, an exception will be thrown."); static Parameter interfaceTargetXSec ("TargetXSec", "The expected total cross section in units of picobarn.", &XSecCheck::target, picobarn, ZERO, ZERO, ZERO, true, false, Interface::lowerlim); interfaceTargetXSec.setHasDefault(false); static Parameter interfaceTolerance ("Tolerance", "The relative tolerance accepted when comparing the total cross " "section with TargetXSec.", &XSecCheck::tol, 0.01, 0.0, 1.0, true, false, Interface::limited); interfaceTolerance.setHasDefault(false); } thepeg-1.8.0.orig/Analysis/HepMCFile.h0000644000175000017500000001253711747772425015647 0ustar sunsun// -*- C++ -*- // // HepMCFile.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_HepMCFile_H #define THEPEG_HepMCFile_H // // This is the declaration of the HepMCFile class. // #include #include #include "ThePEG/Handlers/AnalysisHandler.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Repository/EventGenerator.h" #include "HepMC/IO_BaseClass.h" namespace ThePEG { /** \ingroup Analysis * The HepMCFile class outputs ThePEG events in HepMC format. * * @see \ref HepMCFileInterfaces "The interfaces" * defined for HepMCFile. */ class HepMCFile: public AnalysisHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ HepMCFile(); /** * The copy constructor. */ HepMCFile(const HepMCFile &); //@} public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initHepMCFile; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ HepMCFile & operator=(const HepMCFile &); private: /** * Last event that should be written out as HepMC format */ long _eventNumber; /** * The HepMC format */ int _format; /** * The HepMC filename */ string _filename; /** * The HepMC I/O handler */ HepMC::IO_BaseClass *_hepmcio; /** * The HepMC dump file */ ofstream _hepmcdump; /** * Selector for the choice of units */ int _unitchoice; /** * Choice of output precision in GenEvent format */ unsigned int _geneventPrecision; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of HepMCFile. */ template <> struct BaseClassTrait { /** Typedef of the first base class of HepMCFile. */ typedef AnalysisHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the HepMCFile class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::HepMCFile"; } /** Return the name(s) of the shared library (or libraries) be loaded to get * access to the HepMCFile class and any other class on which it depends * (except the base class). */ static string library() { return "HepMCAnalysis.so"; } }; /** @endcond */ } #endif /* THEPEG_HepMCFile_H */ thepeg-1.8.0.orig/Analysis/HepMCFile.cc0000644000175000017500000001221611747772425015777 0ustar sunsun// -*- C++ -*- // // HepMCFile.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HepMCFile class. // #include "HepMCFile.h" #include #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Config/HepMCHelper.h" #include "HepMC/IO_GenEvent.h" #include "HepMC/IO_AsciiParticles.h" using namespace ThePEG; HepMCFile::HepMCFile() : _eventNumber(1), _format(1), _filename(), _unitchoice(), _geneventPrecision(16) {} // Cannot copy streams. // Let doinitrun() take care of their initialization. HepMCFile::HepMCFile(const HepMCFile & x) : AnalysisHandler(x), _eventNumber(x._eventNumber), _format(x._format), _filename(x._filename), _hepmcio(), _hepmcdump(), _unitchoice(x._unitchoice), _geneventPrecision(x._geneventPrecision) {} IBPtr HepMCFile::clone() const { return new_ptr(*this); } IBPtr HepMCFile::fullclone() const { return new_ptr(*this); } void HepMCFile::doinitrun() { AnalysisHandler::doinitrun(); // set default filename unless user-specified name exists if ( _filename.empty() ) _filename = generator()->filename() + ".hepmc"; switch ( _format ) { default: { HepMC::IO_GenEvent * tmpio = new HepMC::IO_GenEvent(_filename.c_str(), ios::out); tmpio->precision(_geneventPrecision); _hepmcio = tmpio; break; } case 2: _hepmcio = new HepMC::IO_AsciiParticles(_filename.c_str(), ios::out); break; case 5: _hepmcio = 0; _hepmcdump.open(_filename.c_str()); break; } } void HepMCFile::dofinish() { if (_hepmcio) { delete _hepmcio; _hepmcio = 0; } else _hepmcdump.close(); AnalysisHandler::dofinish(); cout << "\nHepMCFile: generated HepMC output.\n"; } void HepMCFile::analyze(tEventPtr event, long, int, int) { if (event->number() > _eventNumber) return; Energy eUnit; Length lUnit; switch (_unitchoice) { default: eUnit = GeV; lUnit = millimeter; break; case 1: eUnit = MeV; lUnit = millimeter; break; case 2: eUnit = GeV; lUnit = centimeter; break; case 3: eUnit = MeV; lUnit = centimeter; break; } HepMC::GenEvent * hepmc = HepMCConverter::convert(*event, false, eUnit, lUnit); if (_hepmcio) _hepmcio->write_event(hepmc); else hepmc->print(_hepmcdump); delete hepmc; } void HepMCFile::persistentOutput(PersistentOStream & os) const { os << _eventNumber << _format << _filename << _unitchoice << _geneventPrecision; } void HepMCFile::persistentInput(PersistentIStream & is, int) { is >> _eventNumber >> _format >> _filename >> _unitchoice >> _geneventPrecision; } ClassDescription HepMCFile::initHepMCFile; // Definition of the static class description member. void HepMCFile::Init() { static ClassDocumentation documentation ("This analysis handler will output the event record in HepMC format."); static Parameter interfacePrintEvent ("PrintEvent", "The number of events that should be printed.", &HepMCFile::_eventNumber, 1, 0, 0, false, false, Interface::lowerlim); static Switch interfaceFormat ("Format", "Output format (1 = GenEvent, 2 = AsciiParticles, 5 = HepMC dump)", &HepMCFile::_format, 1, false, false); static SwitchOption interfaceFormatGenEvent (interfaceFormat, "GenEvent", "IO_GenEvent format", 1); static SwitchOption interfaceFormatAsciiParticles (interfaceFormat, "AsciiParticles", "Deprecated (IO_AsciiParticles format)", 2); static SwitchOption interfaceFormatDump (interfaceFormat, "Dump", "Event dump (human readable)", 5); static Parameter interfaceFilename ("Filename", "Name of the output file", &HepMCFile::_filename, ""); static Parameter interfacePrecision ("Precision", "Choice of output precision for the GenEvent format " " (as number of digits).", &HepMCFile::_geneventPrecision, 16, 6, 16, false, false, Interface::limited); static Switch interfaceUnits ("Units", "Unit choice for energy and length", &HepMCFile::_unitchoice, 0, false, false); static SwitchOption interfaceUnitsGeV_mm (interfaceUnits, "GeV_mm", "Use GeV and mm as units.", 0); static SwitchOption interfaceUnitsMeV_mm (interfaceUnits, "MeV_mm", "Use MeV and mm as units.", 1); static SwitchOption interfaceUnitsGeV_cm (interfaceUnits, "GeV_cm", "Use GeV and cm as units.", 2); static SwitchOption interfaceUnitsMeV_cm (interfaceUnits, "MeV_cm", "Use MeV and cm as units.", 3); } thepeg-1.8.0.orig/Analysis/RivetAnalysis.cc0000644000175000017500000001113111747772425017033 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the RivetAnalysis class. // #include "RivetAnalysis.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Vectors/HepMCConverter.h" #include "ThePEG/Config/HepMCHelper.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "HepMC/GenEvent.h" #include "Rivet/AnalysisHandler.hh" #include "Rivet/Tools/Logging.hh" using namespace ThePEG; RivetAnalysis::RivetAnalysis() : debug(false), _rivet(), _nevent(0) {} void RivetAnalysis::analyze(ThePEG::tEventPtr event, long ieve, int loop, int state) { ++_nevent; AnalysisHandler::analyze(event, ieve, loop, state); // Rotate to CMS, extract final state particles and call analyze(particles). // convert to hepmc HepMC::GenEvent * hepmc = ThePEG::HepMCConverter::convert(*event); // analyse the event CurrentGenerator::Redirect stdout(cout); if ( _rivet ) _rivet->analyze(*hepmc); // delete hepmc event delete hepmc; } ThePEG::IBPtr RivetAnalysis::clone() const { return new_ptr(*this); } ThePEG::IBPtr RivetAnalysis::fullclone() const { return new_ptr(*this); } void RivetAnalysis::persistentOutput(ThePEG::PersistentOStream & os) const { os << _analyses << filename << debug; } void RivetAnalysis::persistentInput(ThePEG::PersistentIStream & is, int) { is >> _analyses >> filename >> debug; } ThePEG::ClassDescription RivetAnalysis::initRivetAnalysis; // Definition of the static class description member. void RivetAnalysis::Init() { static ThePEG::ClassDocumentation documentation ("The RivetAnalysis class is a simple class to allow analyses" " from the Rivet library to be called from ThePEG"); static ThePEG::ParVector interfaceAnalyses ("Analyses", "The names of the Rivet analyses to use", &RivetAnalysis::_analyses, -1, "", "","" "", false, false, ThePEG::Interface::nolimits); static Parameter interfaceFilename ("Filename", "The name of the file where the AIDA histograms are put. If empty, " "the run name will be used instead. '.aida' will in any case be " "appended to the file name.", &RivetAnalysis::filename, "", true, false); static Switch interfaceDebug ("Debug", "Enable debug information from Rivet", &RivetAnalysis::debug, false, true, false); static SwitchOption interfaceDebugNo (interfaceDebug, "No", "Disable debug information.", false); static SwitchOption interfaceDebugYes (interfaceDebug, "Yes", "Enable debug information from Rivet.", true); interfaceAnalyses.rank(10); } void RivetAnalysis::dofinish() { AnalysisHandler::dofinish(); if( _nevent > 0 && _rivet ) { CurrentGenerator::Redirect stdout(cout); _rivet->setCrossSection(generator()->integratedXSec()/picobarn); _rivet->finalize(); string fname = filename; if ( fname.empty() ) fname = generator()->runName() + ".aida"; _rivet->writeData(fname); } delete _rivet; _rivet = 0; } void RivetAnalysis::doinit() { AnalysisHandler::doinit(); if(_analyses.empty()) throw ThePEG::Exception() << "Must have at least one analysis loaded in " << "RivetAnalysis::doinitrun()" << ThePEG::Exception::runerror; // check that analysis list is available _rivet = new Rivet::AnalysisHandler; //(fname); _rivet->addAnalyses(_analyses); if ( _rivet->analysisNames().size() != _analyses.size() ) { throw ThePEG::Exception() << "Rivet could not find all requested analyses.\n" << "Use 'rivet --list-analyses' to check availability.\n" << ThePEG::Exception::runerror; } delete _rivet; _rivet = 0; } void RivetAnalysis::doinitrun() { AnalysisHandler::doinitrun(); // create Rivet analysis handler CurrentGenerator::Redirect stdout(cout); _rivet = new Rivet::AnalysisHandler; //(fname); _rivet->addAnalyses(_analyses); // check that analysis list is still available if ( _rivet->analysisNames().size() != _analyses.size() ) { throw ThePEG::Exception() << "Rivet could not find all requested analyses.\n" << "Use 'rivet --list-analyses' to check availability.\n" << ThePEG::Exception::runerror; } _rivet->init(); if ( debug ) Rivet::Log::setLevel("Rivet",Rivet::Log::DEBUG); } thepeg-1.8.0.orig/Analysis/XSecCheck.h0000644000175000017500000001226211747772425015706 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_XSecCheck_H #define THEPEG_XSecCheck_H // // This is the declaration of the XSecCheck class. // #include "ThePEG/Handlers/AnalysisHandler.h" namespace ThePEG { /** * The XSecCheck class is a simple analysis class used for testing * purposes. If the total cross section does not match the one * specified by TargetXSec, an exception will * be thrown. * * @see \ref XSecCheckInterfaces "The interfaces" * defined for XSecCheck. */ class XSecCheck: public AnalysisHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ XSecCheck() : target(ZERO), tol(0.01), sumw(0.0) {} /** * The destructor. */ virtual ~XSecCheck(); //@} public: /** * The exception class used if the target cross section was not met. */ struct UnexpectedXSec: public Exception {}; public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun() { AnalysisHandler::doinitrun(); sumw = 0.0; } /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The expected total cross section. */ CrossSection target; /** * The relative tolerance accepted when comparing the total cross * section with the target. */ double tol; /** * The sum of the weights of the events analyzed. */ double sumw; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initXSecCheck; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ XSecCheck & operator=(const XSecCheck &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of XSecCheck. */ template <> struct BaseClassTrait { /** Typedef of the first base class of XSecCheck. */ typedef AnalysisHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the XSecCheck class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::XSecCheck"; } /** * The name of a file containing the dynamic library where the class * XSecCheck is implemented. It may also include several, space-separated, * libraries if the class XSecCheck depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "XSecCheck.so"; } }; /** @endcond */ } #endif /* THEPEG_XSecCheck_H */ thepeg-1.8.0.orig/Analysis/LWHFactory.cc0000644000175000017500000000560111747772425016225 0ustar sunsun// -*- C++ -*- // // LWHFactory.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LWHFactory class. // #include "LWHFactory.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/EventGenerator.h" #ifndef LWH #define LWH ThePEGLWH #endif #include "AnalysisFactory.h" using namespace ThePEG; void LWHFactory::doinitrun() { analysisFactory(new LWH::AnalysisFactory); FactoryBase::doinitrun(); } void LWHFactory::normalizeToXSec(tH1DPtr histogram, CrossSection unit) const { LWH::Histogram1D * h = dynamic_cast(histogram); if ( h ) h->normalize(h->sumAllBinHeights()*generator()->integratedXSec()/ (generator()->sumWeights()*unit)); } void LWHFactory::normalizeToXSecFraction(tH1DPtr histogram) const { LWH::Histogram1D * h = dynamic_cast(histogram); if ( h ) h->normalize(h->sumAllBinHeights()/generator()->sumWeights()); } void LWHFactory::normalizeToUnity(tH1DPtr histogram) const { LWH::Histogram1D * h = dynamic_cast(histogram); if ( h ) h->normalize(1.0); } void LWHFactory::normalizeToXSec(tH2DPtr histogram, CrossSection unit) const { LWH::Histogram2D * h = dynamic_cast(histogram); if ( h ) h->normalize(h->sumAllBinHeights()*generator()->integratedXSec()/ (generator()->sumWeights()*unit)); } void LWHFactory::normalizeToXSecFraction(tH2DPtr histogram) const { LWH::Histogram2D * h = dynamic_cast(histogram); if ( h ) h->normalize(h->sumAllBinHeights()/generator()->sumWeights()); } void LWHFactory::normalizeToUnity(tH2DPtr histogram) const { LWH::Histogram2D * h = dynamic_cast(histogram); if ( h ) h->normalize(1.0); } void LWHFactory::persistentOutput(PersistentOStream &) const {} void LWHFactory::persistentInput(PersistentIStream &, int) {} ClassDescription LWHFactory::initLWHFactory; // Definition of the static class description member. void LWHFactory::Init() { static ClassDocumentation documentation ("This class represents the Light-Weight Histogram package which " "implements the most rudimentary histogramming facilities according " "to the AIDA interface " "specifications. Currently the only thing that is supported is " "simple, equally binned, one dimensional histograms. If you are " "using AnalysisHandlers which accesses other features in the AIDA " "interface you may end up with an ungraceful crash."); } thepeg-1.8.0.orig/Analysis/GraphvizPlot.h0000644000175000017500000001200411747772425016531 0ustar sunsun// -*- C++ -*- // // Graphviz.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_GraphvizPlot_H #define THEPEG_GraphvizPlot_H // // This is the declaration of the GraphvizPlot class. // #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Handlers/AnalysisHandler.h" namespace ThePEG { /** \ingroup Analysis * The GraphvizPlot class generates * an output of the tree structure of the event which can be viewed using dot. * * @see \ref GraphvizPlotInterfaces "The interfaces" * defined for GraphvizPlot. */ class GraphvizPlot: public AnalysisHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ GraphvizPlot() : _eventNumber(1), _quiet(false) {} //@} public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} /** * Helper function to obtain the name of a particle. */ string particleName(tcPPtr) const; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initGraphvizPlot; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GraphvizPlot & operator=(const GraphvizPlot &); private: /** * Event number that should be drawn */ long _eventNumber; /** * Tell the object not to write out messages to the standard output. */ bool _quiet; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of GraphvizPlot. */ template <> struct BaseClassTrait { /** Typedef of the first base class of GraphvizPlot. */ typedef AnalysisHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the GraphvizPlot class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::GraphvizPlot"; } /** Return the name(s) of the shared library (or libraries) be loaded to get * access to the GraphvizPlot class and any other class on which it depends * (except the base class). */ static string library() { return "GraphvizPlot.so"; } }; /** @endcond */ } #endif /* THEPEG_GraphvizPlot_H */ thepeg-1.8.0.orig/Analysis/FactoryBase.cc0000644000175000017500000001375011747772425016451 0ustar sunsun// -*- C++ -*- // // FactoryBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FactoryBase class. // #include "FactoryBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "AIDA_helper.h" using namespace ThePEG; FactoryBase::FactoryBase() : theFilename(""), theSuffix("aida"), theStoreType("xml"), theAnalysisFactory(0), theTree(0), theHistogramFactory(0), theDataSetFactory(0) {} FactoryBase::FactoryBase(const FactoryBase & x) : Interfaced(x), theFilename(x.theFilename), theSuffix(x.theSuffix), theStoreType(x.theStoreType), theAnalysisFactory(0), theTree(0), theHistogramFactory(0), theDataSetFactory(0) {} FactoryBase::~FactoryBase() {} FactoryBase::DataFiller::~DataFiller() { int N = v.size()/(3*dset->dimension()); for ( int i = 0; i < N; ++i ) { AIDA::IDataPoint * p = dset->addPoint(); for ( int j = 0; j < p->dimension(); ++j ) { p->coordinate(j)->setValue(v.front()); v.pop_front(); p->coordinate(j)->setErrorPlus(v.front()); v.pop_front(); p->coordinate(j)->setErrorMinus(v.front()); v.pop_front(); } } } void FactoryBase::clear() { if ( theTree ) delete theTree; if ( theAnalysisFactory ) delete theAnalysisFactory; theHistogramFactory = 0; theDataSetFactory = 0; theTree = 0; theAnalysisFactory = 0; } void FactoryBase::dofinish() { Interfaced::dofinish(); for_each(clients, mem_fun(&InterfacedBase::finish)); tree().commit(); clear(); } void FactoryBase::doinitrun() { Interfaced::doinitrun(); string file = filename(); if ( file == "" ) file = generator()->filename(); file += "." + suffix(); if ( file[0] != '/' ) file = generator()->path() + "/" + file; theTree = analysisFactory().createTreeFactory()->create (file, storeType(), false, true); theTree->setOverwrite(false); theHistogramFactory = analysisFactory().createHistogramFactory(tree()); theDataSetFactory = analysisFactory().createDataPointSetFactory(tree()); } void FactoryBase::persistentOutput(PersistentOStream & os) const { os << theFilename << theSuffix << theStoreType; } void FactoryBase::persistentInput(PersistentIStream & is, int) { clear(); is >> theFilename >> theSuffix >> theStoreType; } AbstractClassDescription FactoryBase::initFactoryBase; // Definition of the static class description member. void FactoryBase::Init() { static ClassDocumentation documentation ("There is no documentation for the FactoryBase class"); static Parameter interfaceFilename ("Filename", "Together with Suffix, the name of the file " "where the resulting histograms will be stored. If empty, the run-name " "provided by the current EventGenerator will be used instead.", &FactoryBase::theFilename, "", true, false); static Parameter interfaceSuffix ("Suffix", "Together with Filename, the name of the file " "where the resulting histograms will be stored.", &FactoryBase::theSuffix, "aida", true, false); static Parameter interfaceStoreType ("StoreType", "The format in which the histograms are stored in the output file. " "The allowed values depend on the actual AIDA implementation used.", &FactoryBase::theStoreType, "xml", true, false); } AIDA::ITree & FactoryBase::tree() const { return *theTree; } AIDA::IHistogramFactory & FactoryBase::histogramFactory() const { return *theHistogramFactory; } AIDA::IDataPointSetFactory & FactoryBase::dataSetFactory() const { return *theDataSetFactory; } void FactoryBase::mkdir(const string & path) { tree().mkdir(path); } void FactoryBase::mkdirs(const string & path) { tree().mkdirs(path); } void FactoryBase::cd(const string & path) { tree().cd(path); } FactoryBase::tH1DPtr FactoryBase::createHistogram1D(const string & path, int nb, double lo, double up) { return histogramFactory().createHistogram1D(path, nb, lo, up); } FactoryBase::tH1DPtr FactoryBase::createHistogram1D(const string & path, const string & title, int nb, double lo, double up) { return histogramFactory().createHistogram1D(path, title, nb, lo, up); } FactoryBase::tH1DPtr FactoryBase::createHistogram1D(const string & path, const string & title, const std::vector & edges) { return histogramFactory().createHistogram1D(path, title, edges); } FactoryBase::tH2DPtr FactoryBase::createHistogram2D(const string & path, int nbx, double xlo, double xup, int nby, double ylo, double yup) { return histogramFactory().createHistogram2D(path, nbx, xlo, xup, nby, ylo, yup); } FactoryBase::tH2DPtr FactoryBase::createHistogram2D(const string & path, const string & title, int nbx, double xlo, double xup, int nby, double ylo, double yup) { return histogramFactory().createHistogram2D(path, title, nbx, xlo, xup, nby, ylo, yup); } FactoryBase::tH2DPtr FactoryBase::createHistogram2D(const string & path, const string & title, const std::vector & xedges, const std::vector & yedges) { return histogramFactory().createHistogram2D(path, title, xedges, yedges); } FactoryBase::DataFiller FactoryBase::createDataSet(const string & path, const string & title, int dim) { return DataFiller(dataSetFactory().create(path, title, dim)); } void FactoryBase::registerClient(tIPtr client) { initrun(); clients.insert(client); } thepeg-1.8.0.orig/Analysis/LWH/0000755000175000017500000000000011756460367014363 5ustar sunsunthepeg-1.8.0.orig/Analysis/LWH/DataPointSetFactory.h0000644000175000017500000007436611747772425020444 0ustar sunsun// -*- C++ -*- // // DataPointSetFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_DataPointSetFactory_H #define LWH_DataPointSetFactory_H // // This is the declaration of the DataPointSetFactory class. // #include "AIDataPointSetFactory.h" #include "DataPointSet.h" #include "Histogram1D.h" #include "Tree.h" #include #include namespace LWH { using namespace AIDA; /** * Basic user-level interface for creating a factory * of IDataPointSet. The created objects are assumed to be * managed by the tree which is associated to the factory. */ class DataPointSetFactory: public IDataPointSetFactory { public: /** * Standard constructor. */ DataPointSetFactory(Tree & t) : tree(&t) {} /** * Destructor. */ virtual ~DataPointSetFactory() {} /** * Create an empty IDataPointSet. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param title The title of the IDataPointSet. * @param dim The dimension of the IDataPoints that can be stored * in the set. * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const std::string & title, int dim) { DataPointSet * dset = new DataPointSet(dim); dset->setTitle(title); if ( !tree->insert(path, dset) ) { delete dset; dset = 0; throw std::runtime_error("LWH could not create DataPointSet '" + title + "'." ); } return dset; } /** * Create an empty IDataPointSet. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). * All the directories in the path must exist. The * characther `/` cannot be used in names; it is only * used to delimit directories within paths. * @param dim The dimension of the IDataPoints that can be stored * in the set. * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & pathAndTitle, int dim) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return create(pathAndTitle, title, dim); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param y The array of the y values * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & path, const std::string & title, const std::vector & y, const std::vector & ey) { return createY(path, title, y, ey, ey); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param y The array of the y values * @param eyp The array with the plus errors on y * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & path, const std::string & title, const std::vector & y, const std::vector & eyp, const std::vector & eym) { IDataPointSet * dset = create(path, title, 2); std::vector x, ex; for ( int i = 0, N = y.size(); i < N; ++i ) { dset->addPoint(DataPoint(2)); x.push_back(i); ex.push_back(0); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, eyp, eym) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data along y (the x value is the index of the y value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param y The array of the y values * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. * */ virtual IDataPointSet * createY(const std::string & pathAndTitle, const std::vector & y, const std::vector & ey) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createY(pathAndTitle, title, y, ey); } /** * Create a two dimensional IDataPointSet providing the data along y (the x * value is the index of the y value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param y The array of the y values * @param eyp The array with the plus errors on y * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createY(const std::string & pathAndTitle, const std::vector & y, const std::vector & eyp, const std::vector & eym) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createY(pathAndTitle, title, y, eyp, eym); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param ex The array with the symmetric errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & path, const std::string & title, const std::vector & x, const std::vector & ex) { return createX(path, title, x, ex, ex); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param exp The array with the plus errors on x * @param exm The array with the minus errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & path, const std::string & title, const std::vector & x, const std::vector & exp, const std::vector & exm) { IDataPointSet * dset = create(path, title, 2); std::vector y, ey; for ( int i = 0, N = x.size(); i < N; ++i ) { dset->addPoint(DataPoint(2)); y.push_back(i); ey.push_back(0); } if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, ey, ey) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param ex The array with the symmetric errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & pathAndTitle, const std::vector & x, const std::vector & ex) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createX(pathAndTitle, title, x, ex, ex); } /** * Create a two dimensional IDataPointSet providing the data along x (the y * value is the index of the x value in the array). * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param exp The array with the plus errors on x * @param exm The array with the minus errors on x * @return The created IDataPointSet. */ virtual IDataPointSet * createX(const std::string & pathAndTitle, const std::vector & x, const std::vector & exp, const std::vector & exm) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createX(pathAndTitle, title, x, exp, exm); } /** * Create a two dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & path, const std::string & title, const std::vector & x, const std::vector & y, const std::vector & exp, const std::vector & eyp, const std::vector & exm, const std::vector & eym) { IDataPointSet * dset = create(path, title, 2); for ( int i = 0, N = y.size(); i < N; ++i ) dset->addPoint(DataPoint(2)); if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, eyp, eym) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a two dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & path, const std::string & title, const std::vector & x, const std::vector & y, const std::vector & ex, const std::vector & ey) { return createXY(path, title, x, y, ex, ey, ex, ey); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & pathAndTitle, const std::vector & x, const std::vector & y, const std::vector & exp, const std::vector & eyp, const std::vector & exm, const std::vector & eym) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXY(pathAndTitle, title, x, y, exp, eyp, exm, eym); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @return The created IDataPointSet. */ virtual IDataPointSet * createXY(const std::string & pathAndTitle, const std::vector & x, const std::vector & y, const std::vector & ex, const std::vector & ey) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXY(pathAndTitle, title, x, y, ex, ey, ex, ey); } /** * Create a three dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param ezp The array with the plus errors on z * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @param ezm The array with the minus errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & path, const std::string & title, const std::vector & x, const std::vector & y, const std::vector & z, const std::vector & exp, const std::vector & eyp, const std::vector & ezp, const std::vector & exm, const std::vector & eym, const std::vector & ezm) { IDataPointSet * dset = create(path, title, 3); for ( int i = 0, N = y.size(); i < N; ++i ) dset->addPoint(DataPoint(3)); if ( !dset->setCoordinate(0, x, exp, exm) || !dset->setCoordinate(1, y, eyp, eym) || !dset->setCoordinate(2, z, ezp, ezm) ) throw std::runtime_error("LWH could add points to DataPointSet '" + title + "'." ); return dset; } /** * Create a three dimensional IDataPointSet providing the data. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param title The title of the IDataPointSet. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @param ez The array with the symmetric errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & path, const std::string & title, const std::vector & x, const std::vector & y, const std::vector & z, const std::vector & ex, const std::vector & ey, const std::vector & ez) { return createXYZ(path, title, x, y, z, ex, ey, ez, ex, ey, ez); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param exp The array with the plus errors on x * @param eyp The array with the plus errors on y * @param ezp The array with the plus errors on z * @param exm The array with the minus errors on x * @param eym The array with the minus errors on y * @param ezm The array with the minus errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & pathAndTitle, const std::vector & x, const std::vector & y, const std::vector & z, const std::vector & exp, const std::vector & eyp, const std::vector & ezp, const std::vector & exm, const std::vector & eym, const std::vector & ezm) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXYZ(pathAndTitle, title, x, y, z, exp, eyp, ezp, exm, eym, ezm); } /** * Create a two dimensional IDataPointSet providing the data. * @param pathAndTitle The path of the IDataPointSet. The path can either be * a relative or full path. The last part of the path is * used as the title. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the * directories in the path must exist. The characther * `/` cannot be used in names; it is only used to * delimit directories within paths. * @param x The array of the x values * @param y The array of the y values * @param z The array of the z values * @param ex The array with the symmetric errors on x * @param ey The array with the symmetric errors on y * @param ez The array with the symmetric errors on z * @return The created IDataPointSet. */ virtual IDataPointSet * createXYZ(const std::string & pathAndTitle, const std::vector & x, const std::vector & y, const std::vector & z, const std::vector & ex, const std::vector & ey, const std::vector & ez) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createXYZ(pathAndTitle, title, x, y, z, ex, ey, ez, ex, ey, ez); } /** * Make a copy of a given IDataPointSet. * @param path The path of the IDataPointSet. The path can either be a * relative or full path. ("/folder1/folder2/dataTitle" and * "../folder/dataTitle" are valid paths). All the directories * in the path must exist. The characther `/` cannot be used * in names; it is only used to delimit directories within paths. * @param dataPointSet The IDataPointSet to be copied. * @return The copy of the given IDataPointSet. */ virtual IDataPointSet * createCopy(const std::string & path, const IDataPointSet & dataPointSet) { IDataPointSet * dset = create(path, dataPointSet.title(), dataPointSet.dimension()); for ( int i = 0, N = dataPointSet.size(); i < N; ++i ) dset->addPoint(*dataPointSet.point(i)); return dset; } /** * Destroy a given IDataPointSet. * @param dataPointSet The IDataPointSet to be destroyed. * @return false If dataPointSet cannot be destroyed. */ virtual bool destroy(IDataPointSet * dataPointSet) { IManagedObject * mo = dynamic_cast(dataPointSet); if ( !mo ) return false; return tree->rm(tree->findPath(*mo)); } /** * Create an IDataPointSet from an IHistogram1D. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param hist The IHistogram1D from which the data is taken. * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const IHistogram1D & hist, const std::string & = "") { IDataPointSet * dset = create(path, hist.title(), 2); std::vector x, y, ex, ey; for ( int i = 2, N = hist.axis().bins() + 2; i < N; ++i ) { dset->addPoint(DataPoint(2)); x.push_back(hist.binMean(i - 2)); ex.push_back(hist.axis().binWidth(i - 2)); y.push_back(hist.binHeight(i - 2)); ey.push_back(hist.binError(i - 2)); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, ey, ey) ) throw std::runtime_error("LWH could add points to DataPointSet '" + hist.title() + "'." ); return dset; } /** * Create an IDataPointSet from an IHistogram2D. * @param path The path of the IDataPointSet. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path * must exist. The characther `/` cannot be used in * names; it is only used to delimit directories within * paths. * @param hist The IHistogram2D from which the data is taken. * @param options Options, currently not specified * @return The newly created IDataPointSet. */ virtual IDataPointSet * create(const std::string & path, const IHistogram2D & hist, const std::string & = "") { IDataPointSet * dset = create(path, hist.title(), 3); std::vector x, y, z, ex, ey, ez; for ( int ix = 2, Nx = hist.xAxis().bins() + 2; ix < Nx; ++ix ) for ( int iy = 2, Ny = hist.yAxis().bins() + 2; iy < Ny; ++iy ) { dset->addPoint(DataPoint(3)); //x.push_back(hist.binMean(i - 2)); // < "Dynamic" version // Shouldn't IAxis have a binCentre(size_t binId) method? // (According to Java AIDA v3.3.0 API) x.push_back((hist.xAxis().binLowerEdge(ix - 2) + hist.xAxis().binUpperEdge(ix - 2))/2.0); ex.push_back(hist.xAxis().binWidth(ix - 2)/2.0); y.push_back((hist.yAxis().binLowerEdge(iy - 2) + hist.yAxis().binUpperEdge(iy - 2))/2.0); ey.push_back(hist.yAxis().binWidth(iy - 2)/2.0); const double binwidth = hist.xAxis().binWidth(ix - 2)* hist.yAxis().binWidth(iy - 2); z.push_back(hist.binHeight(ix - 2, iy - 2)/binwidth); ez.push_back(hist.binError(ix - 2, iy - 2)/binwidth); } if ( !dset->setCoordinate(0, x, ex, ex) || !dset->setCoordinate(1, y, ey, ey) || !dset->setCoordinate(2, z, ez, ez) ) throw std::runtime_error("LWH could not add points to DataPointSet '" + hist.title() + "'." ); return dset; } /** * LWH cannot handle a IHistogram3D. */ virtual IDataPointSet * create(const std::string &, const IHistogram3D &, const std::string & = "") { return error("IHistogram3D"); } /** * LWH cannot handle a ICloud1. */ virtual IDataPointSet * create(const std::string &, const ICloud1D &, const std::string & = "") { return error("ICloud1D"); } /** * LWH cannot handle a ICloud2D. */ virtual IDataPointSet * create(const std::string &, const ICloud2D &, const std::string & = "") { return error("ICloud2D"); } /** * LWH cannot handle a ICloud3D. */ virtual IDataPointSet * create(const std::string &, const ICloud3D &, const std::string & = "") { return error("ICloud3D"); } /** * LWH cannot handle a IProfile1D. */ virtual IDataPointSet * create(const std::string &, const IProfile1D &, const std::string & = "") { return error("IProfile1D"); } /** * LWH cannot handle a IProfile2D. */ virtual IDataPointSet * create(const std::string &, const IProfile2D &, const std::string & = "") { return error("IProfile2D"); } /** * LWH cannot handle the addition of data points. */ virtual IDataPointSet * add(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error("addition of data points"); } /** * LWH cannot handle the subtraction of data points. */ virtual IDataPointSet * subtract(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error("subtraction of data points"); } /** * LWH cannot handle the multiplication of data points. */ virtual IDataPointSet * multiply(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error("multiplication of data points"); } /** * LWH cannot handle the division of data points. */ virtual IDataPointSet * divide(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error("division of data points"); } /** * LWH cannot handle the weighted mean of data points. */ virtual IDataPointSet * weightedMean(const std::string &, const IDataPointSet &, const IDataPointSet &) { return error("weighted means of data points"); } private: /** Throw a suitable error. */ template static T * error(std::string feature) { throw std::runtime_error("LWH cannot handle " + feature + "."); } /** The tree where the actual data sets are stored. */ Tree * tree; }; } #endif thepeg-1.8.0.orig/Analysis/LWH/VariAxis.h0000644000175000017500000001176611747772425016276 0ustar sunsun// -*- C++ -*- // // VariAxis.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_VariAxis_H #define LWH_VariAxis_H // // This is the declaration of the VariAxis class representing // #include #include #include #include #include "AIAxis.h" namespace LWH { using namespace AIDA; /** * An VariAxis represents a binned histogram axis. A 1D Histogram would have * one VariAxis representing the X axis, while a 2D Histogram would have two * axes representing the X and Y VariAxis. */ class VariAxis: public IAxis { public: /** * Standard constructor. */ VariAxis(const std::vector & edges) { for ( int i = 0, N = edges.size(); i < N; ++i ) binco[edges[i]] = 0; std::map::iterator it = binco.begin(); for ( int i = 0, N = edges.size(); i < N; ++i ) (it++)->second = i; } /** * Copy constructor. */ VariAxis(const VariAxis & a) : IAxis(a), binco(a.binco) {} /// Destructor. virtual ~VariAxis() { } /** * Check if the IAxis has fixed binning, i.e. if all the bins have * the same width. @return true if the binning is * fixed, false otherwise. * */ bool isFixedBinning() const {return false; } /** * Get the lower edge of the IAxis. * @return The IAxis's lower edge. * */ double lowerEdge() const { if ( binco.size() ) return binco.begin()->first; return 0; } /** * Get the upper edge of the IAxis. * @return The IAxis's upper edge. * */ double upperEdge() const { if ( !binco.size() ) return 0; std::map::const_iterator last = binco.end(); return (--last)->first; } /** * The number of bins (excluding underflow and overflow) on the IAxis. * @return The IAxis's number of bins. * */ int bins() const { return binco.size() - 1; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is Double.NEGATIVE_INFINITY. * */ std::pair binEdges(int index) const { std::pair edges(0.0, 0.0); if ( !binco.size() ) return edges; std::map::const_iterator lo = binco.end(); std::map::const_iterator up = binco.begin(); if ( index >= 0 ) while ( index-- >= 0 && up != binco.end() ) lo = up++; edges.first = ( lo == binco.end() )? -std::numeric_limits::max(): lo->first; edges.second = ( up == binco.end() )? std::numeric_limits::max(): up->first; return edges; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is Double.NEGATIVE_INFINITY. * */ double binLowerEdge(int index) const { return binEdges(index).first; } /** * Get the upper edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The upper edge of the corresponding bin; for the overflow * bin this is Double.POSITIVE_INFINITY. * */ double binUpperEdge(int index) const { return binEdges(index).second; } /** * Get the width of the specified bin. * @param index The bin number: 0 to bins()-1) for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The width of the corresponding bin. * */ double binWidth(int index) const { std::pair edges = binEdges(index); return edges.second - edges.first; } /** * Convert a coordinate on the axis to a bin number. If the * coordinate is less than the lowerEdge UNDERFLOW is returned; if * the coordinate is greater or equal to the upperEdge OVERFLOW is * returned. * @param coord The coordinate to be converted. * @return The corresponding bin number. * */ int coordToIndex(double coord) const { std::map::const_iterator up = binco.upper_bound(coord); if ( up == binco.begin() ) return UNDERFLOW_BIN; else if ( up == binco.end() ) return OVERFLOW_BIN; else return up->second - 1; } /** * Return the midpoint of the specified bin. No checking is * performed to ensure the argument is a valid bin. */ double binMidPoint(int index) const { std::pair edges = binEdges(index); return (edges.second + edges.first)/2.0; } private: /** * A map relating the lower edge of a bin to the corresponding bin * number. */ std::map binco; }; } #endif /* LWH_VariAxis_H */ thepeg-1.8.0.orig/Analysis/LWH/Histogram2D.h0000644000175000017500000006477611747772425016704 0ustar sunsun// -*- C++ -*- #ifndef LWH_Histogram2D_H #define LWH_Histogram2D_H // // This is the declaration of the Histogram1D class. // #include "AIHistogram2D.h" #include "ManagedObject.h" #include "Axis.h" #include "VariAxis.h" #include #include #include namespace LWH { using namespace AIDA; /** * User level interface to 1D Histogram. */ class Histogram2D: public IHistogram2D, public ManagedObject { public: /** HistFactory is a friend. */ friend class HistogramFactory; public: /** * Standard constructor. */ Histogram2D(int nx, double lox, double upx, int ny, double loy, double upy) : xfax(new Axis(nx, lox, upx)), xvax(0), yfax(new Axis(ny, loy, upy)), sum(nx + 2, std::vector(ny + 2)), sumw(nx + 2, std::vector(ny + 2)), sumw2(nx + 2, std::vector(ny + 2)), sumxw(nx + 2, std::vector(ny + 2)), sumx2w(nx + 2, std::vector(ny + 2)), sumyw(nx + 2, std::vector(ny + 2)), sumy2w(nx + 2, std::vector(ny + 2)) { xax = xfax; yax = yfax; } /** * Standard constructor for variable bin width. */ Histogram2D(const std::vector & xedges, const std::vector & yedges) : xfax(0), xvax(new VariAxis(xedges)), yfax(0), yvax(new VariAxis(xedges)), sum(xedges.size() + 1, std::vector(yedges.size() + 1)), sumw(xedges.size() + 1, std::vector(yedges.size() + 1)), sumw2(xedges.size() + 1, std::vector(yedges.size() + 1)), sumxw(xedges.size() + 1, std::vector(yedges.size() + 1)), sumx2w(xedges.size() + 1, std::vector(yedges.size() + 1)), sumyw(xedges.size() + 1, std::vector(yedges.size() + 1)), sumy2w(xedges.size() + 1, std::vector(yedges.size() + 1)) { xax = xvax; yax = yvax; } /** * Copy constructor. */ Histogram2D(const Histogram2D & h) : IBaseHistogram(h), IHistogram(h), IHistogram2D(h), ManagedObject(h), xfax(0), xvax(0), yfax(0), yvax(0), sum(h.sum), sumw(h.sumw), sumw2(h.sumw2), sumxw(h.sumxw), sumx2w(h.sumx2w) , sumyw(h.sumyw), sumy2w(h.sumy2w){ const VariAxis * hxvax = dynamic_cast(h.xax); if ( hxvax ) xax = xvax = new VariAxis(*hxvax); else xax = xfax = new Axis(dynamic_cast(*h.xax)); const VariAxis * hyvax = dynamic_cast(h.yax); if ( hyvax ) yax = yvax = new VariAxis(*hyvax); else yax = yfax = new Axis(dynamic_cast(*h.yax)); } /// Destructor. virtual ~Histogram2D() { delete xax; delete yax; } /** * Get the Histogram's title. * @return The Histogram's title. */ std::string title() const { return theTitle; } /** * Get the Histogram's name. * @return The Histogram's name */ std::string name() const { return title(); } /** * Set the histogram title. * @param title The title. * @return false If title cannot be changed. */ bool setTitle(const std::string & title) { theTitle = title; return true; } /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); return *anno; } /** * Get the Histogram's dimension. * @return The Histogram's dimension. */ int dimension() const { return 2; } /** * Reset the Histogram; as if just created. * @return false If something goes wrong. */ bool reset() { const int nx = xax->bins() + 2; const int ny = yax->bins() + 2; sum = std::vector< std::vector >(nx, std::vector(ny)); sumw = std::vector< std::vector >(nx, std::vector(ny)); sumw2 = sumw; sumxw = sumw; sumx2w = sumw; sumyw = sumw; sumy2w = sumw; return true; } /** * Get the number of in-range entries in the Histogram. * @return The number of in-range entries. * */ int entries() const { int si = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) si += sum[ix][iy]; return si; } /** * Sum of the entries in all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * This is equivalent to the number of times the * method fill was invoked. * @return The sum of all the entries. */ int allEntries() const { return entries() + extraEntries(); } /** * Number of entries in the UNDERFLOW and OVERFLOW bins. * @return The number of entries outside the range of the IHistogram. */ int extraEntries() const { int esum = sum[0][0] + sum[1][0] + sum[0][1] + sum[1][1]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) esum += sum[ix][0] + sum[ix][1]; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) esum += sum[0][iy] + sum[1][iy]; return esum; } /** * Number of equivalent entries, * i.e. SUM[ weight ] ^ 2 / SUM[ weight^2 ] * @return The number of equivalent entries. */ double equivalentBinEntries() const { double sw = 0.0; double sw2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { sw += sumw[ix][iy]; sw2 += sumw2[ix][iy]; } return sw2/(sw*sw); } /** * Sum of in-range bin heights in the IHistogram, * UNDERFLOW and OVERFLOW bins are excluded. * @return The sum of the in-range bins heights. * */ double sumBinHeights() const { double sw = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) sw += sumw[ix][iy]; return sw; } /** * Sum of the heights of all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * @return The sum of all the bins heights. */ double sumAllBinHeights() const { return sumBinHeights() + sumExtraBinHeights(); } /** * Sum of heights in the UNDERFLOW and OVERFLOW bins. * @return The sum of the heights of the out-of-range bins. */ double sumExtraBinHeights() const { int esum = sumw[0][0] + sumw[1][0] + sumw[0][1] + sumw[1][1]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) esum += sumw[ix][0] + sumw[ix][1]; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) esum += sumw[0][iy] + sumw[1][iy]; return esum; } /** * Minimum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The minimum height among the in-range bins. */ double minBinHeight() const { double minw = sumw[2][2]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) minw = std::min(minw, sumw[ix][iy]); return minw; } /** * Maximum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The maximum height among the in-range bins. */ double maxBinHeight() const{ double maxw = sumw[2][2]; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) maxw = std::max(maxw, sumw[ix][iy]); return maxw; } /** * Fill the IHistogram1D with a value and the * corresponding weight. * @param x The value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). */ bool fill(double x, double y, double weight = 1.) { int ix = xax->coordToIndex(x) + 2; int iy = yax->coordToIndex(y) + 2; ++sum[ix][iy]; sumw[ix][iy] += weight; sumxw[ix][iy] += x*weight; sumx2w[ix][iy] += x*x*weight; sumyw[ix][iy] += y*weight; sumy2w[ix][iy] += y*y*weight; sumw2[ix][iy] += weight*weight; return weight >= 0 && weight <= 1; } /** * The weighted mean along the x-axis of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMeanX(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] != 0.0? sumxw[ix][iy]/sumw[ix][iy]: ( xvax? xvax->binMidPoint(xindex): xfax->binMidPoint(xindex) ); }; /** * The weighted mean along the y-axis of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMeanY(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] != 0.0? sumyw[ix][iy]/sumw[ix][iy]: ( yvax? yvax->binMidPoint(yindex): xfax->binMidPoint(yindex) ); }; /** * The weighted x-RMS of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRmsX(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? xax->binWidth(xindex): std::sqrt(std::max(sumw[ix][iy]*sumx2w[ix][iy] - sumxw[ix][iy]*sumxw[ix][iy], 0.0))/sumw[ix][iy]; }; /** * The weighted y-RMS of a bin. * @param xindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param yindex The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRmsY(int xindex, int yindex) const { int ix = xindex + 2; int iy = yindex + 2; return sumw[ix][iy] == 0.0 || sum[ix][iy] < 2? yax->binWidth(yindex): std::sqrt(std::max(sumw[ix][iy]*sumy2w[ix][iy] - sumyw[ix][iy]*sumyw[ix][iy], 0.0))/sumw[ix][iy]; }; /** * Number of entries in the corresponding bin (ie the number of * times fill was called for this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. */ int binEntries(int xindex, int yindex) const { return sum[xindex + 2][yindex + 2]; } /** * Sum of all the entries of the bins along a given x bin. * This is equivalent to projectionX().binEntries(index). * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesX(int index) const { int ret = 0; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) ret += sum[index + 2][iy]; return ret; } /** * Sum of all the entries of the bins along a given y bin. * This is equivalent to projectionY().binEntries(index). * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesY(int index) const { int ret = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) ret += sum[ix][index + 2]; return ret; } /** * Total height of the corresponding bin (ie the sum of the weights * in this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. */ double binHeight(int xindex, int yindex) const { /// @todo While this is compatible with the reference AIDA /// implementation, it is not the bin height! return sumw[xindex + 2][yindex + 2]; } /** * Sum of all the heights of the bins along a given x bin. * This is equivalent to projectionX().binHeight(index). * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightX(int index) const { double ret = 0; for ( int iy = 2; iy < yax->bins() + 2; ++iy ) ret += sumw[index + 2][iy]; return ret; } /** * Sum of all the heights of the bins along a given y bin. * This is equivalent to projectionY().binHeight(index). * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightY(int index) const { double ret = 0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) ret += sumw[ix][index + 2]; return ret; } /** * The error of a given bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ double binError(int xindex, int yindex) const { return std::sqrt(sumw2[xindex + 2][yindex + 2]); } /** * The mean of the IHistogram2D along the x axis. * @return The mean of the IHistogram2D along the x axis. * */ double meanX() const { double s = 0.0; double sx = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sx += sumxw[ix][iy]; } return s != 0.0? sx/s: 0.0; } /** * The mean of the IHistogram2D along the y axis. * @return The mean of the IHistogram2D along the y axis. * */ double meanY() const { double s = 0.0; double sy = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sy += sumyw[ix][iy]; } return s != 0.0? sy/s: 0.0; } /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ double rmsX() const { double s = 0.0; double sx = 0.0; double sx2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sx += sumxw[ix][iy]; sx2 += sumx2w[ix][iy]; } return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s: xax->upperEdge() - xax->lowerEdge(); } /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ double rmsY() const { double s = 0.0; double sy = 0.0; double sy2 = 0.0; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) for ( int iy = 2; iy < yax->bins() + 2; ++iy ) { s += sumw[ix][iy]; sy += sumyw[ix][iy]; sy2 += sumy2w[ix][iy]; } return s != 0.0? std::sqrt(std::max(s*sy2 - sy*sy, 0.0))/s: yax->upperEdge() - yax->lowerEdge(); } /** The weights. */ double getSumW(int xindex, int yindex) const { return sumw[xindex + 2][yindex + 2]; } /** The squared weights. */ double getSumW2(int xindex, int yindex) const { return sumw2[xindex + 2][yindex + 2]; } /** The weighted x-values. */ double getSumXW(int xindex, int yindex) const { return sumxw[xindex + 2][yindex + 2]; } /** The weighted x-square-values. */ double getSumX2W(int xindex, int yindex) const { return sumx2w[xindex + 2][yindex + 2]; } /** The weighted x-values. */ double getSumYW(int xindex, int yindex) const { return sumyw[xindex + 2][yindex + 2]; } /** The weighted x-square-values. */ double getSumY2W(int xindex, int yindex) const { return sumy2w[xindex + 2][yindex + 2]; } /** * Get the x axis of the IHistogram2D. * @return The x coordinate IAxis. */ const IAxis & xAxis() const { return *xax; } /** * Get the y axis of the IHistogram2D. * @return The y coordinate IAxis. */ const IAxis & yAxis() const { return *yax; } /** * Get the bin number corresponding to a given coordinate along the * x axis. This is a convenience method, equivalent to * axis().coordToIndex(coord). * @param coord The coordinalte along the x axis. * @return The corresponding bin number. */ int coordToIndexX(double coord) const { return xax->coordToIndex(coord); } /** * Get the bin number corresponding to a given coordinate along the * y axis. This is a convenience method, equivalent to * axis().coordToIndex(coord). * @param coord The coordinalte along the y axis. * @return The corresponding bin number. */ int coordToIndexY(double coord) const { return yax->coordToIndex(coord); } /** * Add to this Histogram2D the contents of another IHistogram2D. * @param h The Histogram2D to be added to this IHistogram2D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const Histogram2D & h) { if ( xax->upperEdge() != h.xax->upperEdge() || xax->lowerEdge() != h.xax->lowerEdge() || xax->bins() != h.xax->bins() ) return false; if ( yax->upperEdge() != h.yax->upperEdge() || yax->lowerEdge() != h.yax->lowerEdge() || yax->bins() != h.yax->bins() ) return false; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { sum[ix][iy] += h.sum[ix][iy]; sumw[ix][iy] += h.sumw[ix][iy]; sumxw[ix][iy] += h.sumxw[ix][iy]; sumx2w[ix][iy] += h.sumx2w[ix][iy]; sumyw[ix][iy] += h.sumyw[ix][iy]; sumy2w[ix][iy] += h.sumy2w[ix][iy]; sumw2[ix][iy] += h.sumw2[ix][iy]; } return true; } /** * Add to this IHistogram1D the contents of another IHistogram1D. * @param hist The IHistogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const IHistogram2D & hist) { return add(dynamic_cast(hist)); } /** * Scale the contents of this histogram with the given factor. * @param s the scaling factor to use. */ bool scale(double s) { for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { sumw[ix][iy] *= s; sumxw[ix][iy] *= s; sumx2w[ix][iy] *= s; sumyw[ix][iy] *= s; sumy2w[ix][iy] *= s; sumw2[ix][iy] *= s*s; } return true; } /** * Scale the given histogram so that the integral over all bins * (including overflow) gives \a intg. This function also corrects * for the bin-widths, which means that it should only be run once * for each histogram. Further rescaling must be done with the * scale(double) function. */ void normalize(double intg) { double oldintg = sumAllBinHeights(); if ( oldintg == 0.0 ) return; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) { double fac = intg/oldintg; if ( ix >= 2 && iy >= 2 ) fac /= (xax->binUpperEdge(ix - 2) - xax->binLowerEdge(ix - 2))* (yax->binUpperEdge(iy - 2) - yax->binLowerEdge(iy - 2)); sumw[ix][iy] *= fac; sumxw[ix][iy] *= fac; sumx2w[ix][iy] *= fac; sumyw[ix][iy] *= fac; sumy2w[ix][iy] *= fac; sumw2[ix][iy] *= fac*fac; } } /** * Return the integral over the histogram bins assuming it has been * normalize()d. */ // double integral() const { // double intg = sumw[0] + sumw[1]; // for ( int i = 2; i < ax->bins() + 2; ++i ) // is this right? Leave out bin width factor? // intg += sumw[ix][iy]*(ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); // return intg; // } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the histogram in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { //std::cout << "Writing out histogram " << name << " in AIDA file format!" << std::endl; os << " \n upperEdge() << "\" numberOfBins=\"" << xax->bins() << "\" min=\"" << xax->lowerEdge() << "\" direction=\"x\""; if ( xvax ) { os << ">\n"; for ( int i = 0, N = xax->bins() - 1; i < N; ++i ) os << " binUpperEdge(i) << "\"/>\n"; os << " \n"; } else { os << "/>\n"; } os << " upperEdge() << "\" numberOfBins=\"" << yax->bins() << "\" min=\"" << yax->lowerEdge() << "\" direction=\"y\""; if ( yvax ) { os << ">\n"; for ( int i = 0, N = yax->bins() - 1; i < N; ++i ) os << " binUpperEdge(i) << "\"/>\n"; os << " \n"; } else { os << "/>\n"; } os << " \n \n \n \n \n \n"; for ( int ix = 0; ix < xax->bins() + 2; ++ix ) for ( int iy = 0; iy < yax->bins() + 2; ++iy ) if ( sum[ix][iy] ) { os << " \n"; } os << " \n " << std::endl; return true; } /** * Write out the histogram in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x w w2 n'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "#2D " << path << "/" << name << " " << xax->lowerEdge() << " " << xax->bins() << " " << xax->upperEdge() << " " << yax->lowerEdge() << " " << yax->bins() << " " << yax->upperEdge() << " \"" << title() << "\"" << std::endl; for ( int ix = 2; ix < xax->bins() + 2; ++ix ) { for ( int iy = 2; iy < yax->bins() + 2; ++iy ) os << 0.5*(xax->binLowerEdge(ix - 2)+xax->binUpperEdge(ix - 2)) << " " << 0.5*(yax->binLowerEdge(iy - 2)+yax->binUpperEdge(iy - 2)) << " " << sumw[ix][iy] << " " << sqrt(sumw2[ix][iy]) << " " << sum[ix][iy] << std::endl; os << std::endl; } os << std::endl; return true; } #ifdef HAVE_ROOT /** * Write out the histogram in Root file format. */ //bool writeROOT(std::ostream & os, std::string path, std::string name) { bool writeROOT(TFile* file, std::string path, std::string name) { //std::cout << "Writing out histogram " << name.c_str() << " in ROOT file format" << std::endl; TH1D* hist1d; int nbins; if (!vax || vax->isFixedBinning() ) {//equidistant binning (easier case) nbins = ax->bins(); hist1d = new TH1D(name.c_str(), title().c_str(), nbins, ax->lowerEdge(), ax->upperEdge()); } else { nbins = vax->bins(); double* bins = new double[nbins+1]; for (int i=0; ibinEdges(i).first; } bins[nbins] = vax->binEdges(nbins-1).second; //take last bin right border hist1d = new TH1D(name.c_str(), title().c_str(), nbins, bins); delete [] bins; } double entries = 0; for ( int i = 0; i < nbins + 2; ++i ) { if ( sum[ix][iy] ) { //i==0: underflow->RootBin(0), i==1: overflow->RootBin(NBins+1) entries = entries + sum[ix][iy]; int j=i; if (i==0) j=0; //underflow else if (i==1) j=nbins+1; //overflow if (i>=2) j=i-1; //normal bin entries hist1d->SetBinContent(j, sumw[ix][iy]); hist1d->SetBinError(j, sqrt(sumw2[ix][iy])); //hist1d->Fill(binMean(i), sumw[ix][iy]); } } hist1d->Sumw2(); hist1d->SetEntries(entries); std::string DirName; //remove preceding slash from directory name, else ROOT error for (unsigned int i=1; iGet(DirName.c_str())) file->mkdir(DirName.c_str()); file->cd(DirName.c_str()); hist1d->Write(); delete hist1d; return true; } #endif private: /** The title */ std::string theTitle; /** The axis. */ IAxis * xax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * xfax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * xvax; /** The axis. */ IAxis * yax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * yfax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * yvax; /** The counts. */ std::vector< std::vector > sum; /** The weights. */ std::vector< std::vector > sumw; /** The squared weights. */ std::vector< std::vector > sumw2; /** The weighted x-values. */ std::vector< std::vector > sumxw; /** The weighted x-square-values. */ std::vector< std::vector > sumx2w; /** The weighted y-values. */ std::vector< std::vector > sumyw; /** The weighted y-square-values. */ std::vector< std::vector > sumy2w; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_Histogram1D_H */ thepeg-1.8.0.orig/Analysis/LWH/AIAnalysisFactory.h0000644000175000017500000000247711747772425020074 0ustar sunsun// -*- C++ -*- // // AIAnalysisFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIAnalysisFactory_H #define LWH_AIAnalysisFactory_H #ifndef LWH_USING_AIDA #include /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IDataPointSetFactory; class IFitFactory; class IFunctionFactory; class IPlotterFactory; class ITupleFactory; class ITreeFactory; class ITree; class IHistogramFactory; class IAnalysisFactory { public: virtual ~IAnalysisFactory() {} virtual ITreeFactory * createTreeFactory() = 0; virtual IHistogramFactory * createHistogramFactory(ITree & tree) = 0; virtual IDataPointSetFactory * createDataPointSetFactory(ITree &) = 0; virtual ITupleFactory * createTupleFactory(ITree &) = 0; virtual IFunctionFactory * createFunctionFactory(ITree &) = 0; virtual IFitFactory * createFitFactory() = 0; virtual IPlotterFactory * createPlotterFactory(int = 0, char * * = 0, const std::string & = "", const std::string & = "") = 0; }; } /** @endcond */ #else #include "AIDA/IAnalysisFactory.h" #endif #endif /* LWH_AIAnalysisFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/DataPointSet.h0000644000175000017500000002542011747772425017077 0ustar sunsun// -*- C++ -*- // // DataPointSet.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_DataPointSet_H #define LWH_DataPointSet_H // // This is the declaration of the DataPointSet class representing // #include #include #include #include #include "AIDataPointSet.h" #include "ManagedObject.h" #include "DataPoint.h" namespace LWH { using namespace AIDA; /** * An DataPointSet represents a binned histogram axis. A 1D Histogram would have * one DataPointSet representing the X axis, while a 2D Histogram would have two * axes representing the X and Y DataPointSet. */ class DataPointSet: public IDataPointSet, public ManagedObject { public: /** * Standard constructor takes the dimension, \a D, of the data * points as argument. */ DataPointSet(int D): dim(D) {} /** * Destructor. */ virtual ~DataPointSet() {} /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); } /** * Get the data set's title. * @return The data set's title. */ std::string title() const { return theTitle; } /** * Get the data set's title. * @return The data set's title. */ std::string name() const { return theTitle; } /** * Set the data set's title. * @param title The title. * @return false If title cannot be changed. */ bool setTitle(const std::string & title) { theTitle = title; return true; } /** * Get the dimension of the IDataPoints that can be stored in the set. * @return The dimension of the IDataPoints storable in the set. * */ int dimension() const { return dim; } /** * Remove all the IDataPoints in the set. * After this the IDataPointSet is as just created. */ void clear() { dset.clear(); } /** * Get the current size of the IDataPointSet, i.e. the number * of IDataPoints contained in the set. * @return The size of the IDataPointSet. */ int size() const { return dset.size(); } /** * Get the IDataPoint at a give index in the set. * @param index The IDataPoint index. * @return The corresponding IDataPoint. */ IDataPoint * point(int index) { return &(dset[index]); } /** * Set the values and errors of a given coordinate all at once. If * this method is called on an empty IDataPointSet, a number of * points equal to the size of the arrays provided is created; if * the IDataPointSet is not empty the dimension of the array must * match with the size of the IDataPointSet. * @param coord The coordinate's index * @param val The array of the values for the given coordinate * @param err The array with the symmetric errors. * @return false if an illegal coordinate is provided or if there is * a mismatch between the size of the array and the size of the * IDataPointSet. */ bool setCoordinate(int coord, const std::vector & val, const std::vector & err) { return setCoordinate(coord, val, err, err); } /** * Set the values and errors of a given coordinate all at once. If * this method is called on an empty IDataPointSet, a number of * points equal to the size of the arrays provided is created; if * the IDataPointSet is not empty the dimension of the array must * match with the size of the IDataPointSet. * @param coord The coordinate's index * @param val The array of the values for the given coordinate * @param errp The array with the plus errors. * @param errm The array with the minus errors. * @return false if an illegal coordinate is provided or if there is * a mismatch between the size of the array and the size of the * IDataPointSet. * */ bool setCoordinate(int coord, const std::vector & val, const std::vector & errp, const std::vector & errm) { if ( coord < 0 || coord >= dimension() ) return false; if ( val.size() != dset.size() || errp.size() != dset.size() || errm.size() != dset.size() ) return false; for ( int i = 0, N = val.size(); i < N; ++i ) { dset[i].coordinate(coord)->setValue(val[i]); dset[i].coordinate(coord)->setErrorPlus(errp[i]); dset[i].coordinate(coord)->setErrorMinus(errm[i]); } return true; } /** * Return the data point at the given index. * @return 0 if index is out of range. */ const IDataPoint * point(int index) const { if ( index < 0 || unsigned(index) >= dset.size() ) return 0; return &(dset[index]); } /** * Add a new empty IDataPoint at the end of the set. * @return The newly added point. */ IDataPoint * addPoint() { dset.push_back(DataPoint(dimension())); return &(dset.back()); } /** * Add a copy of an IDataPoint at the end of the set. * @param point The IDataPoint to be added. * @return false If the point has the wrong dimension or * if the point cannot be added. */ bool addPoint(const IDataPoint & point) { if ( dimension() && dimension() != point.dimension() ) return false; dset.push_back(DataPoint(point)); return true; } /** * Remove the IDataPoint at a given index. * @param index The index of the IDataPoint to be removed. * @return false If the index is < 0 or >= size(). */ bool removePoint(int index) { if ( index < 0 || unsigned(index) >= dset.size() ) return false; dset.erase(dset.begin() + index); return true; } /** * Get the lower value for a give axis. * @param coord The coordinate of the axis. * @return The lower edge of the corresponding axis. * If coord < 0 or coord >= dimension(), or if the * set is empty NaN is returned. */ double lowerExtent(int coord) const { if ( dset.empty() ) return std::numeric_limits::quiet_NaN(); if ( coord < 0 || coord >= dimension() ) return std::numeric_limits::quiet_NaN(); double low = dset[0].coordinate(coord)->value(); for ( int i = 1, N = dset.size(); i < N; ++i ) low = std::min(low, dset[i].coordinate(coord)->value()); return low; } /** * Get the upper value for a give axis. * @param coord The coordinate of the axis. * @return The upper edge of the corresponding axis. * If coord < 0 or coord >= dimension(), or if the set * is empty NaN is returned. */ double upperExtent(int coord) const { if ( dset.empty() ) return std::numeric_limits::quiet_NaN(); if ( coord < 0 || coord >= dimension() ) return std::numeric_limits::quiet_NaN(); double upp = dset[0].coordinate(coord)->value(); for ( int i = 1, N = dset.size(); i < N; ++i ) upp = std::max(upp, dset[i].coordinate(coord)->value()); return upp; } /** * Scales the values and the errors of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scale(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setValue(m->value()*scale); m->setErrorPlus(m->errorPlus()*scale); m->setErrorMinus(m->errorPlus()*scale); } return true; } /** * Scales the values of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scaleValues(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setValue(m->value()*scale); } return true; } /** * Scales the errors of all the measurements * of each point by a given factor. * @param scale The scale factor. * @return false If an illegal scaleFactor is provided. */ bool scaleErrors(double scale) { for ( int i = 0, N = dset.size(); i < N; ++i ) for ( int j = 0, M = dset[i].dimension(); j < M; ++j ) { IMeasurement * m = dset[i].coordinate(j); m->setErrorPlus(m->errorPlus()*scale); m->setErrorMinus(m->errorPlus()*scale); } return true; } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the data set in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { os << " \n"; for ( int d = 0; d < dimension(); ++d ) os << " \n"; for ( int i = 0, N = size(); i < N; ++i ) { os << " \n"; for ( int j = 0, M = dimension(); j < M; ++j ) os << " coordinate(j)->value() << "\" errorPlus=\"" << point(i)->coordinate(j)->errorPlus() << "\" errorMinus=\"" << point(i)->coordinate(j)->errorMinus() << "\"/>\n"; os << " \n"; } os << " " << std::endl; return true; } /** * Write out the data set in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x1 x2 ... xn * dx1+ dx2+ ... dxn+ dx1- dx2- ... dxn-'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "# " << path << "/" << name << " " << size() << " \"" << title() << " \" dimension " << dimension() << std::endl; for ( int i = 0, N = size(); i < N; ++i ) { for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->value() << " "; for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->errorPlus() << " "; for ( int j = 0, M = dimension(); j < M; ++j ) os << point(i)->coordinate(j)->errorMinus() << " "; os << std::endl; } os << std::endl; return true; } private: /** The title */ std::string theTitle; /** * The included data points. */ std::vector dset; /** * The dimension of the points in this set. */ unsigned int dim; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_DataPointSet_H */ thepeg-1.8.0.orig/Analysis/LWH/AIDataPoint.h0000644000175000017500000000165611747772425016642 0ustar sunsun// -*- C++ -*- // // AIDataPoint.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIDataPoint_H #define LWH_AIDataPoint_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IMeasurement; /** * Basic user-level interface class for holding and managing * a single set of "measurements". * * @author The AIDA team (http://aida.freehep.org/) * */ class IDataPoint { public: virtual ~IDataPoint() {} virtual int dimension() const = 0; virtual IMeasurement * coordinate(int coord) = 0; virtual const IMeasurement * coordinate(int coord) const = 0; }; } /** @endcond */ #else #include "AIDA/IDataPoint.h" #endif #endif /* LWH_AIDataPoint_H */ thepeg-1.8.0.orig/Analysis/LWH/Histogram1D.h0000644000175000017500000003327611747772425016672 0ustar sunsun// -*- C++ -*- // // Histogram1D.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_Histogram1D_H #define LWH_Histogram1D_H // // This is the declaration of the Histogram1D class. // #include "AIHistogram1D.h" #include "ManagedObject.h" #include "Axis.h" #include "VariAxis.h" #include #include namespace LWH { using namespace AIDA; /** * User level interface to 1D Histogram. */ class Histogram1D: public IHistogram1D, public ManagedObject { public: /** HistFactory is a friend. */ friend class HistogramFactory; public: /** * Standard constructor. */ Histogram1D(int n, double lo, double up) : fax(new Axis(n, lo, up)), vax(0), sum(n + 2), sumw(n + 2), sumw2(n + 2), sumxw(n + 2), sumx2w(n + 2) { ax = fax; } /** * Standard constructor for variable bin width. */ Histogram1D(const std::vector & edges) : fax(0), vax(new VariAxis(edges)), sum(edges.size() + 1), sumw(edges.size() + 1), sumw2(edges.size() + 1), sumxw(edges.size() + 1), sumx2w(edges.size() + 1) { ax = vax; } /** * Copy constructor. */ Histogram1D(const Histogram1D & h) : IBaseHistogram(h), IHistogram(h), IHistogram1D(h), ManagedObject(h), fax(0), vax(0), sum(h.sum), sumw(h.sumw), sumw2(h.sumw2), sumxw(h.sumxw), sumx2w(h.sumx2w) { const VariAxis * hvax = dynamic_cast(h.ax); if ( vax ) ax = vax = new VariAxis(*hvax); else ax = fax = new Axis(dynamic_cast(*h.ax)); } /// Destructor. virtual ~Histogram1D() { delete ax; } /** * Get the Histogram's title. * @return The Histogram's title. */ std::string title() const { return theTitle; } /** * Get the Histogram's title. * @return The Histogram's title. */ std::string name() const { return theTitle; } /** * Set the histogram title. * @param title The title. * @return false If title cannot be changed. */ bool setTitle(const std::string & title) { theTitle = title; return true; } /** * Not implemented in LWH. will throw an exception. */ IAnnotation & annotation() { throw std::runtime_error("LWH cannot handle annotations"); } /** * Not implemented in LWH. will throw an exception. */ const IAnnotation & annotation() const { throw std::runtime_error("LWH cannot handle annotations"); } /** * Get the Histogram's dimension. * @return The Histogram's dimension. */ int dimension() const { return 1; } /** * Reset the Histogram; as if just created. * @return false If something goes wrong. */ bool reset() { sum = std::vector(ax->bins() + 2); sumw = std::vector(ax->bins() + 2); sumxw = std::vector(ax->bins() + 2); sumx2w = std::vector(ax->bins() + 2); sumw2 = std::vector(ax->bins() + 2); return true; } /** * Get the number of in-range entries in the Histogram. * @return The number of in-range entries. * */ int entries() const { int si = 0; for ( int i = 2; i < ax->bins() + 2; ++i ) si += sum[i]; return si; } /** * Sum of the entries in all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * This is equivalent to the number of times the * method fill was invoked. * @return The sum of all the entries. */ int allEntries() const { return entries() + extraEntries(); } /** * Number of entries in the UNDERFLOW and OVERFLOW bins. * @return The number of entries outside the range of the IHistogram. */ int extraEntries() const { return sum[0] + sum[1]; } /** * Number of equivalent entries, * i.e. SUM[ weight ] ^ 2 / SUM[ weight^2 ] * @return The number of equivalent entries. */ double equivalentBinEntries() const { double sw = 0.0; double sw2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { sw += sumw[i]; sw2 += sumw2[i]; } return sw2/(sw*sw); } /** * Sum of in-range bin heights in the IHistogram, * UNDERFLOW and OVERFLOW bins are excluded. * @return The sum of the in-range bins heights. * */ double sumBinHeights() const { double sw = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) sw += sumw[i]; return sw; } /** * Sum of the heights of all the IHistogram's bins, * i.e in-range bins, UNDERFLOW and OVERFLOW. * @return The sum of all the bins heights. */ double sumAllBinHeights() const { return sumBinHeights() + sumExtraBinHeights(); } /** * Sum of heights in the UNDERFLOW and OVERFLOW bins. * @return The sum of the heights of the out-of-range bins. */ double sumExtraBinHeights() const { return sumw[0] + sumw[1]; } /** * Minimum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The minimum height among the in-range bins. */ double minBinHeight() const { double minw = sumw[2]; for ( int i = 3; i < ax->bins() + 2; ++i ) minw = std::min(minw, sumw[i]); return minw; } /** * Maximum height of the in-range bins, * i.e. not considering the UNDERFLOW and OVERFLOW bins. * @return The maximum height among the in-range bins. */ double maxBinHeight() const{ double maxw = sumw[2]; for ( int i = 3; i < ax->bins() + 2; ++i ) maxw = std::max(maxw, sumw[i]); return maxw; } /** * Fill the IHistogram1D with a value and the * corresponding weight. * @param x The value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). */ bool fill(double x, double weight = 1.) { int i = ax->coordToIndex(x) + 2; ++sum[i]; sumw[i] += weight; sumxw[i] += x*weight; sumx2w[i] += x*x*weight; sumw2[i] += weight*weight; return weight >= 0 && weight <= 1; } /** * The weighted mean of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin. */ double binMean(int index) const { int i = index + 2; return sumw[i] != 0.0? sumxw[i]/sumw[i]: ( vax? vax->binMidPoint(index): fax->binMidPoint(index) ); }; /** * The weighted RMS of a bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The RMS of the corresponding bin. */ double binRms(int index) const { int i = index + 2; return sumw[i] == 0.0 || sum[i] < 2? ax->binWidth(index): std::sqrt(std::max(sumw[i]*sumx2w[i] - sumxw[i]*sumxw[i], 0.0))/sumw[i]; }; /** * Number of entries in the corresponding bin (ie the number of * times fill was called for this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. */ int binEntries(int index) const { return sum[index + 2]; } /** * Total height of the corresponding bin (ie the sum of the weights * in this bin). * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. */ double binHeight(int index) const { return sumw[index + 2]; } /** * The error of a given bin. * @param index The bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ double binError(int index) const { return std::sqrt(sumw2[index + 2]); } /** * The mean of the whole IHistogram1D. * @return The mean of the IHistogram1D. */ double mean() const { double s = 0.0; double sx = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; } return s != 0.0? sx/s: 0.0; } /** * The RMS of the whole IHistogram1D. * @return The RMS if the IHistogram1D. */ double rms() const { double s = 0.0; double sx = 0.0; double sx2 = 0.0; for ( int i = 2; i < ax->bins() + 2; ++i ) { s += sumw[i]; sx += sumxw[i]; sx2 += sumx2w[i]; } return s != 0.0? std::sqrt(std::max(s*sx2 - sx*sx, 0.0))/s: ax->upperEdge() - ax->lowerEdge(); } /** * Get the x axis of the IHistogram1D. * @return The x coordinate IAxis. */ const IAxis & axis() const { return *ax; } /** * Get the bin number corresponding to a given coordinate along the * x axis. This is a convenience method, equivalent to * axis().coordToIndex(coord). * @param coord The coordinalte along the x axis. * @return The corresponding bin number. */ int coordToIndex(double coord) const { return ax->coordToIndex(coord); } /** * Add to this Histogram1D the contents of another IHistogram1D. * @param h The Histogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const Histogram1D & h) { if ( ax->upperEdge() != h.ax->upperEdge() || ax->lowerEdge() != h.ax->lowerEdge() || ax->bins() != h.ax->bins() ) return false; for ( int i = 0; i < ax->bins() + 2; ++i ) { sum[i] += h.sum[i]; sumw[i] += h.sumw[i]; sumxw[i] += h.sumxw[i]; sumx2w[i] += h.sumx2w[i]; sumw2[i] += h.sumw2[i]; } return true; } /** * Add to this IHistogram1D the contents of another IHistogram1D. * @param hist The IHistogram1D to be added to this IHistogram1D. * @return false If the IHistogram1Ds binnings are incompatible. */ bool add(const IHistogram1D & hist) { return add(dynamic_cast(hist)); } /** * Scale the contents of this histogram with the given factor. * @param s the scaling factor to use. */ bool scale(double s) { for ( int i = 0; i < ax->bins() + 2; ++i ) { sumw[i] *= s; sumxw[i] *= s; sumx2w[i] *= s; sumw2[i] *= s*s; } return true; } /** * Scale the given histogram so that the integral over all bins * (including overflow) gives \a intg. This function also corrects * for the bin-widths, which means that it should only be run once * for each histogram. Further rescaling must be done with the * scale(double) function. */ void normalize(double intg) { double oldintg = sumAllBinHeights(); if ( oldintg == 0.0 ) return; for ( int i = 0; i < ax->bins() + 2; ++i ) { double fac = intg/oldintg; if ( i >= 2 ) fac /= (ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); sumw[i] *= fac; sumxw[i] *= fac; sumx2w[i] *= fac; sumw2[i] *= fac*fac; } } /** * Return the integral over the histogram bins assuming it has been * normalize()d. */ double integral() const { double intg = sumw[0] + sumw[1]; for ( int i = 2; i < ax->bins() + 2; ++i ) intg += sumw[i]*(ax->binUpperEdge(i - 2) - ax->binLowerEdge(i - 2)); return intg; } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } /** * Write out the histogram in the AIDA xml format. */ bool writeXML(std::ostream & os, std::string path, std::string name) { os << " \n upperEdge() << "\" numberOfBins=\"" << ax->bins() << "\" min=\"" << ax->lowerEdge() << "\" direction=\"x\""; if ( vax ) { os << ">\n"; for ( int i = 0, N = ax->bins() - 1; i < N; ++i ) os << " binUpperEdge(i) << "\"/>\n"; os << " \n"; } else { os << "/>\n"; } os << " \n \n \n \n"; for ( int i = 0; i < ax->bins() + 2; ++i ) if ( sum[i] ) { os << " \n"; } os << " \n " << std::endl; return true; } /** * Write out the histogram in a flat text file suitable for * eg. gnuplot to read. The coloums are layed out as 'x w w2 n'. */ bool writeFLAT(std::ostream & os, std::string path, std::string name) { os << "# " << path << "/" << name << " " << ax->lowerEdge() << " " << ax->bins() << " " << ax->upperEdge() << " \"" << title() << " \"" << std::endl; for ( int i = 2; i < ax->bins() + 2; ++i ) os << 0.5*(ax->binLowerEdge(i - 2) + ax->binUpperEdge(i - 2)) << " " << sumw[i] << " " << sqrt(sumw2[i]) << " " << sum[i] << std::endl; os << std::endl; return true; } private: /** The title */ std::string theTitle; /** The axis. */ IAxis * ax; /** Pointer (possibly null) to a axis with fixed bin width. */ Axis * fax; /** Pointer (possibly null) to a axis with fixed bin width. */ VariAxis * vax; /** The counts. */ std::vector sum; /** The weights. */ std::vector sumw; /** The squared weights. */ std::vector sumw2; /** The weighted x-values. */ std::vector sumxw; /** The weighted x-square-values. */ std::vector sumx2w; /** dummy pointer to non-existen annotation. */ IAnnotation * anno; }; } #endif /* LWH_Histogram1D_H */ thepeg-1.8.0.orig/Analysis/LWH/AITreeFactory.h0000644000175000017500000000142011747772425017173 0ustar sunsun// -*- C++ -*- // // AITreeFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AITreeFactory_H #define LWH_AITreeFactory_H #ifndef LWH_USING_AIDA #include /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ITree; class ITreeFactory { public: virtual ~ITreeFactory() {} virtual ITree * create(const std::string &, const std::string & = "", bool = false, bool = false, const std::string & = "") = 0; }; } /** @endcond */ #else #include "AIDA/ITreeFactory.h" #endif #endif /* LWH_AITreeFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/Axis.h0000644000175000017500000000736511747772425015454 0ustar sunsun// -*- C++ -*- // // Axis.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_Axis_H #define LWH_Axis_H // // This is the declaration of the Axis class representing // #include #include #include #include "AIAxis.h" namespace LWH { using namespace AIDA; /** * An Axis represents a binned histogram axis. A 1D Histogram would have * one Axis representing the X axis, while a 2D Histogram would have two * axes representing the X and Y Axis. */ class Axis: public IAxis { public: /** * Standard constructor. */ Axis(int n, double lo, double up) : lower(lo), upper(up), nbins(n) {} /** * Copy constructor. */ Axis(const Axis & a) : IAxis(a), lower(a.lower), upper(a.upper), nbins(a.nbins) {} /// Destructor. virtual ~Axis() { } /** * Check if the IAxis has fixed binning, i.e. if all the bins have * the same width. @return true if the binning is * fixed, false otherwise. * */ bool isFixedBinning() const {return true; } /** * Get the lower edge of the IAxis. * @return The IAxis's lower edge. * */ double lowerEdge() const { return lower; } /** * Get the upper edge of the IAxis. * @return The IAxis's upper edge. * */ double upperEdge() const { return upper; } /** * The number of bins (excluding underflow and overflow) on the IAxis. * @return The IAxis's number of bins. * */ int bins() const { return nbins; } /** * Get the lower edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The lower edge of the corresponding bin; for the * underflow bin this is Double.NEGATIVE_INFINITY. * */ double binLowerEdge(int index) const { return index < 0? -std::numeric_limits::max(): lower + double(std::min(index, nbins))*binWidth(0); } /** * Get the upper edge of the specified bin. * @param index The bin number: 0 to bins()-1 for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The upper edge of the corresponding bin; for the overflow * bin this is Double.POSITIVE_INFINITY. * */ double binUpperEdge(int index) const { return index >= nbins? std::numeric_limits::max(): lower + double(std::max(index, -1) + 1)*binWidth(0); } /** * Get the width of the specified bin. * The argument gives the bin number: 0 to bins()-1) for the in-range bins * or OVERFLOW or UNDERFLOW. * @return The width of the corresponding bin. * */ double binWidth(int) const { return (upper - lower)/double(nbins); } /** * Convert a coordinate on the axis to a bin number. If the * coordinate is less than the lowerEdge UNDERFLOW is returned; if * the coordinate is greater or equal to the upperEdge OVERFLOW is * returned. * @param coord The coordinate to be converted. * @return The corresponding bin number. * */ int coordToIndex(double coord) const { if ( coord >= upper ) return OVERFLOW_BIN; else if ( coord < lower ) return UNDERFLOW_BIN; else return int((coord - lower)/binWidth(0)); } /** * Return the midpoint of the specified bin. No checking is * performed to ensure the argument is a valid bin. */ double binMidPoint(int index) const { return lower + (double(index) + 0.5)*binWidth(0); } private: /** The lower edge. */ double lower; /** The upper edge. */ double upper; /** The number of bins. */ int nbins; }; } #endif /* LWH_Axis_H */ thepeg-1.8.0.orig/Analysis/LWH/TreeFactory.h0000644000175000017500000000471011747772425016766 0ustar sunsun// -*- C++ -*- // // TreeFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_TreeFactory_H #define LWH_TreeFactory_H // // This is the declaration of the TreeFactory class. // #include "AITreeFactory.h" #include #include #include "Tree.h" namespace LWH { using namespace AIDA; /** * The creator of trees. */ class TreeFactory: public ITreeFactory { public: /// Destructor. virtual ~TreeFactory() { clear(); } /** * Creates a new tree that is not associated with a store. */ ITree * create() { Tree * tree = new Tree; trees.insert(tree); return tree; } /** * Creates a new Tree and associates it with a store. * The store is assumed to be write-only. * The store will be created. * @param storeName The name of the store, if empty (""), the tree is * created in memory and therefore will not be associated * with a file. */ Tree * createTree(const std::string & storeName) { return new Tree(storeName); } /** * Creates a new Tree and associates it with a store. * The store is assumed to be write-only. * The store will be created. * @param storeName The name of the store, if empty (""), the tree is * created in memory and therefore will not be associated * with a file. * @param storeType must be "xml". * @param readOnly must be false since we cannot read in trees. * @param createNew must be true indicating that the file will be created */ ITree * create(const std::string & storeName, const std::string & storeType = "", bool readOnly = false, bool createNew = false, const std::string & = "") { if ( storeType != "xml" && storeType != "" && storeType != "flat" ) throw std::runtime_error("Can only store trees in xml or flat format."); if ( readOnly || !createNew ) throw std::runtime_error("Cannot read in trees."); return new Tree(storeName, storeType != "flat"); } private: /** Delete all trees. */ void clear() { for ( std::set::iterator it = trees.begin(); it != trees.end(); ++it ) delete *it; trees.clear(); } /** The created trees. */ std::set trees; }; } #endif /* LWH_TreeFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/AIAxis.h0000644000175000017500000000170711747772425015660 0ustar sunsun// -*- C++ -*- // // AIAxis.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIAxis_H #define LWH_AIAxis_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IAxis { public: virtual ~IAxis() {} virtual bool isFixedBinning() const = 0; virtual double lowerEdge() const = 0; virtual double upperEdge() const = 0; virtual int bins() const = 0; virtual double binLowerEdge(int index) const = 0; virtual double binUpperEdge(int index) const = 0; virtual double binWidth(int) const = 0; virtual int coordToIndex(double coord) const = 0; enum { UNDERFLOW_BIN = -2, OVERFLOW_BIN = -1 }; }; } /** @endcond */ #else #include "AIDA/IAxis.h" #endif #endif /* LWH_AIAxis_H */ thepeg-1.8.0.orig/Analysis/LWH/DataPoint.h0000644000175000017500000000410211747772425016415 0ustar sunsun// -*- C++ -*- // // DataPoint.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_DataPoint_H #define LWH_DataPoint_H // // This is the declaration of the DataPoint class representing // #include #include #include #include "AIDataPoint.h" #include "Measurement.h" namespace LWH { using namespace AIDA; /** * An DataPoint represents a binned histogram axis. A 1D Histogram would have * one DataPoint representing the X axis, while a 2D Histogram would have two * axes representing the X and Y DataPoint. */ class DataPoint: public IDataPoint { public: /** * Construct a data point with a given number of dimensions. */ DataPoint(int dim = 2) : m(dim) {} /** * Copy constructor. */ DataPoint(const DataPoint & d) : IDataPoint(d), m(d.m) {} /** * Copy from any IDataPoint. */ DataPoint(const IDataPoint & id) : m(id.dimension()) { for ( int i = 0, N = m.size(); i < N; ++i ) m[i] = Measurement(id.coordinate(i)->value(), id.coordinate(i)->errorPlus(), id.coordinate(i)->errorMinus()); } /** * Destructor. */ virtual ~DataPoint() {} /** * Get the dimension of the IDataPoint, i.e. the number * of coordinates the point has. * @return The dimension. */ int dimension() const { return m.size(); } /** * Get the IMeasurement for a given coordinate. * @param coord The coordinate. * @return The corresponding IMeasurement. */ IMeasurement * coordinate(int coord) { return &(m[coord]); } /** * Get the IMeasurement for a given coordinate. * @param coord The coordinate. * @return The corresponding IMeasurement. */ const IMeasurement * coordinate(int coord) const { return &(m[coord]); } private: /** * The included measurements. */ std::vector m; }; } #endif /* LWH_DataPoint_H */ thepeg-1.8.0.orig/Analysis/LWH/AIMeasurement.h0000644000175000017500000000157011747772425017237 0ustar sunsun// -*- C++ -*- // // AIMeasurement.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIMeasurement_H #define LWH_AIMeasurement_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IMeasurement { public: virtual ~IMeasurement() {} virtual double value() const = 0; virtual double errorPlus() const = 0; virtual double errorMinus() const = 0; virtual bool setValue(double value) = 0; virtual bool setErrorPlus(double errorPlus) = 0; virtual bool setErrorMinus(double errorMinus) = 0; }; } /** @endcond */ #else #include "AIDA/IMeasurement.h" #endif #endif /* LWH_AIMeasurement_H */ thepeg-1.8.0.orig/Analysis/LWH/AIManagedObject.h0000644000175000017500000000137311747772425017436 0ustar sunsun// -*- C++ -*- // // AIManagedObject.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIManagedObject_H #define LWH_AIManagedObject_H #ifndef LWH_USING_AIDA #include /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ITree; class IManagedObject { public: virtual ~IManagedObject() {} virtual std::string name() const = 0; virtual void * cast(const std::string & className) const = 0; }; } /** @endcond */ #else #include "AIDA/IManagedObject.h" #endif #endif /* LWH_AIManagedObject_H */ thepeg-1.8.0.orig/Analysis/LWH/AIDataPointSetFactory.h0000644000175000017500000001101111747772425020630 0ustar sunsun// -*- C++ -*- // // AIDataPointSetFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIDataPointSetFactory_H #define LWH_AIDataPointSetFactory_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IDataPointSet; class IHistogram1D; class IDataPointSetFactory { public: virtual ~IDataPointSetFactory() { /* nop */; } virtual IDataPointSet * create(const std::string &, const std::string &, int ) = 0; virtual IDataPointSet * create(const std::string &, int) = 0; virtual IDataPointSet * createY(const std::string &, const std::string &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createY(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createY(const std::string &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createY(const std::string &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createX(const std::string &, const std::string &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createX(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createX(const std::string &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createX(const std::string &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXY(const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createXYZ(const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &, const std::vector &) = 0; virtual IDataPointSet * createCopy(const std::string &, const IDataPointSet &) = 0; virtual bool destroy(IDataPointSet *) = 0; virtual IDataPointSet * create(const std::string &, const IHistogram1D &, const std::string & = "") = 0; }; } /** @endcond */ #else #include "AIDA/IDataPointSetFactory.h" #endif #endif /* LWH_AIDataPointSetFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/AnalysisFactory.h0000644000175000017500000000751011747772425017653 0ustar sunsun// -*- C++ -*- // // AnalysisFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AnalysisFactory_H #define LWH_AnalysisFactory_H // // This is the declaration of the AnalysisFactory class. // #include "AIAnalysisFactory.h" #include "TreeFactory.h" #include "HistogramFactory.h" #include "DataPointSetFactory.h" #include /** * The LWH namespace contains a Light-Weight Histogram package which * implements the most rudimentary histogramming facilities according * to the AIDA interface * specifications. Currently the only thing that is supported is * simple, equally binned, one dimensional histograms and data * points. It is mainly intended to be used in applications where one * needs to fill simple histograms and output them. With LWH it is * then possible to do this without the overhead of a full AIDA * implementation, but still having the option to use a full * implementation later on with minimal changes. Note also that since * LWH consists only of header files, the installation is trivial - * just put the header files where they can be found by your compiler. */ namespace LWH { using namespace AIDA; /** * The "master" factory from which other factories are obtained. * Typically accessed by: *
IAnalysisFactory* af = AIDA_createAnalysisFactory();
*/ class AnalysisFactory: public IAnalysisFactory { public: /// Destructor. virtual ~AnalysisFactory() { clear(); } /** * Create an ITreeFactory. * @return The ITreeFactory. */ ITreeFactory * createTreeFactory() { return new TreeFactory; } /** * Create an HistogramFactory. * @param tree The ITree which created histograms will be associated to. * @return The IHistogramFactory. * */ IHistogramFactory * createHistogramFactory(ITree & tree) { Tree & tr = dynamic_cast(tree); HistogramFactory * hf = new HistogramFactory(tr); histfacs.insert(hf); return hf; } /** * Not implemented in LWH. * @return null pointer always. * */ IDataPointSetFactory * createDataPointSetFactory(ITree & tree) { Tree & tr = dynamic_cast(tree); DataPointSetFactory * df = new DataPointSetFactory(tr); datafacs.insert(df); return df; } /** * Not implemented in LWH. * @return null pointer always. */ ITupleFactory * createTupleFactory(ITree &) { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IFunctionFactory * createFunctionFactory(ITree &) { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IPlotterFactory * createPlotterFactory(int = 0, char * * = 0, const std::string & = "", const std::string & = "") { return 0; } /** * Not implemented in LWH. * @return null pointer always. */ IFitFactory * createFitFactory() { return 0; } private: /** Delete all produced factories. */ void clear() { for ( std::set::iterator it = histfacs.begin(); it != histfacs.end(); ++it ) delete *it; for ( std::set::iterator it = datafacs.begin(); it != datafacs.end(); ++it ) delete *it; for ( std::set::iterator it = treefacs.begin(); it != treefacs.end(); ++it ) delete *it; histfacs.clear(); datafacs.clear(); treefacs.clear(); } /** The histogram factories. */ std::set histfacs; /** The dataset factories. */ std::set datafacs; /** The tree factories. */ std::set treefacs; }; } #endif /* LWH_AnalysisFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/AITree.h0000644000175000017500000000242211747772425015646 0ustar sunsun// -*- C++ -*- // // AITree.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AITree_H #define LWH_AITree_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IManagedObject; class ITree { public: virtual ~ITree() {} virtual std::string storeName() const = 0; virtual IManagedObject * find(const std::string & name) = 0; virtual std::string pwd() const = 0; virtual bool commit() = 0; virtual bool close() = 0; virtual bool mkdir(const std::string &) = 0; virtual bool mkdirs(const std::string &) = 0; virtual bool cd(const std::string &) = 0; virtual bool rmdir(const std::string & str) = 0; virtual bool rm(const std::string & str) = 0; virtual std::string findPath(const IManagedObject & o) const = 0; virtual bool mv(const std::string & oldo, const std::string & newo) = 0; virtual void setOverwrite(bool o = true) = 0; virtual bool cp(const std::string &, const std::string &, bool = false) = 0; }; } /** @endcond */ #else #include "AIDA/ITree.h" #endif #endif /* LWH_AITree_H */ thepeg-1.8.0.orig/Analysis/LWH/AIDataPointSet.h0000644000175000017500000000367211747772425017316 0ustar sunsun// -*- C++ -*- // // AIDataPointSet.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIDataPointSet_H #define LWH_AIDataPointSet_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IAnnotation; class IDataPoint; /** * Basic user-level interface class for holding and managing * a single set of "data points". * * @author The AIDA team (http://aida.freehep.org/) * */ class IDataPointSet { public: virtual ~IDataPointSet() { /* nop */; } virtual IAnnotation & annotation() = 0; virtual const IAnnotation & annotation() const = 0; virtual std::string title() const = 0; virtual bool setTitle(const std::string & title) = 0; virtual int dimension() const = 0; virtual void clear() = 0; virtual int size() const = 0; virtual IDataPoint * point(int index) = 0; virtual bool setCoordinate(int coord, const std::vector & val, const std::vector & err) = 0; virtual bool setCoordinate(int coord, const std::vector & val, const std::vector & errp, const std::vector & errm) = 0; virtual const IDataPoint * point(int index) const = 0; virtual IDataPoint * addPoint() = 0; virtual bool addPoint(const IDataPoint & point) = 0; virtual bool removePoint(int index) = 0; virtual double lowerExtent(int coord) const = 0; virtual double upperExtent(int coord) const = 0; virtual bool scale(double scaleFactor) = 0; virtual bool scaleValues(double scaleFactor) = 0; virtual bool scaleErrors(double scaleFactor) = 0; virtual void * cast(const std::string & className) const = 0; }; } /** @endcond */ #else #include "AIDA/IDataPointSet.h" #endif #endif /* LWH_AIDataPointSet_H */ thepeg-1.8.0.orig/Analysis/LWH/AIHistogram1D.h0000644000175000017500000000355411747772425017100 0ustar sunsun// -*- C++ -*- // // AIHistogram1D.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIHistorgram1D_H #define LWH_AIHistorgram1D_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class IAnnotation; class IBaseHistogram { public: virtual ~IBaseHistogram() {} virtual std::string title() const = 0; virtual bool setTitle(const std::string & title) = 0; virtual int dimension() const = 0; virtual bool reset() = 0; virtual int entries() const = 0; }; class IHistogram : virtual public IBaseHistogram { public: virtual ~IHistogram() {} virtual int allEntries() const = 0; virtual int extraEntries() const = 0; virtual double equivalentBinEntries() const = 0; virtual double sumBinHeights() const = 0; virtual double sumAllBinHeights() const = 0; virtual double sumExtraBinHeights() const = 0; virtual double minBinHeight() const = 0; virtual double maxBinHeight() const = 0; }; class IAxis; class IHistogram1D: virtual public IHistogram { public: virtual ~IHistogram1D() {} virtual bool fill(double x, double weight = 1.) = 0; virtual double binMean(int index) const = 0; virtual int binEntries(int index) const = 0; virtual double binHeight(int index) const = 0; virtual double binError(int index) const = 0; virtual double mean() const = 0; virtual double rms() const = 0; virtual const IAxis & axis() const = 0; virtual int coordToIndex(double coord) const = 0; virtual bool add(const IHistogram1D & hist) = 0; virtual bool scale(double scaleFactor) = 0; }; } /** @endcond */ #else #include "AIDA/IHistogram1D.h" #endif #endif /* LWH_AIHistorgram1D_H */ thepeg-1.8.0.orig/Analysis/LWH/Tree.h0000644000175000017500000002647011747772425015445 0ustar sunsun// -*- C++ -*- // // Tree.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_Tree_H #define LWH_Tree_H // // This is the declaration of the Tree class. // #include "AITree.h" #include "ManagedObject.h" #include #include #include #include #include #include namespace LWH { using namespace AIDA; /** * The Tree class is a simple implementation of the AIDA::ITree * interface. */ class Tree: public ITree { public: /** The AnalysisFactory is a friend. */ friend class AnalysisFactory; /** A path is a vector of directory names. */ typedef std::vector Path; /** A set of paths */ typedef std::set PathSet; /** Map of paths to objects. */ typedef std::map ObjMap; public: /** * The standard constructor. */ Tree(std::string storename, bool xml = true) : name(storename), flat(!xml), cwd("/"), overwrite(true) { dirs.insert(Path()); } /** * The default constructor. */ Tree(): name(""), flat(false), cwd("/") { dirs.insert(Path()); } /** * The copy constructor. */ Tree(const Tree & dt) : ITree(dt), name(dt.name), flat(dt.flat), dirs(dt.dirs), objs(dt.objs), cwd(dt.cwd), overwrite(true) {} /// Destructor. virtual ~Tree() { for ( ObjMap::iterator it = objs.begin(); it != objs.end(); ++it ) delete it->second; } /** * Get the name of the store. * @return The store's name. */ std::string storeName() const { return name; } /** * Get the IManagedObject at a given path in the ITree. The path can either be * absolute or relative to the current working directory. * @param path The path. * @return The corresponding IManagedObject. */ IManagedObject * find(const std::string & path) { ObjMap::const_iterator it = objs.find(path); return it == objs.end()? (IManagedObject *)0: it->second; } /** * LWH cannot get a mounted ITree at a given path in the current ITree. * @return 0 always. */ ITree * findTree(const std::string &) { return 0; } /** * Change to a given directory. * @param dir The absolute or relative path of the directory we are * changing to. * @return false If the path does not exist. */ bool cd(const std::string & dir) { PathSet::iterator it = dirs.find(purgepath(str2pth(fullpath(sts(dir))))); if ( it == dirs.end() ) return false; cwd = pth2str(*it); return true; } /** * Insert the ManagedObject \a o in the tree with the path \a str. */ bool insert(std::string str, IManagedObject * o) { Path path = purgepath(str2pth(fullpath(str))); if ( dirs.find(path) == dirs.end() ) { std::string fullname = pth2str(path); path.pop_back(); if ( dirs.find(path) != dirs.end() ) { ObjMap::iterator old = objs.find(fullname); if ( old == objs.end() || overwrite ) { if ( old != objs.end() ) { delete old->second; objs.erase(old); } objs[fullname] = o; return true; } } } return false; } /** * Get the path of the current working directory. * @return The path of the current working directory. */ std::string pwd() const { return cwd; } /** * Not implemented in LWH. * @return false always. * */ bool ls(const std::string & = ".", bool = false, std::ostream & = std::cout) const { return false; } /** * Not implemented in LWH. */ std::vector listObjectNames(const std::string & = ".", bool = false) const { return std::vector(); } /** * Not implemented in LWH. */ std::vector listObjectTypes(const std::string & = ".", bool = false) const { return std::vector(); } /** * Create a new directory. Given a path only the last directory * in it is created if all the intermediate subdirectories already exist. * @param dir The absolute or relative path of the new directory. * @return false If a subdirectory within the path does * not exist or it is not a directory. Also if the directory already exists. */ bool mkdir(const std::string & dir) { Path p = purgepath(str2pth(fullpath(sts(dir)))); Path base = p; base.pop_back(); if ( dirs.find(base) == dirs.end() ) return false; dirs.insert(p); return true; } /** * Create a directory recursively. Given a path the last directory * and all the intermediate non-existing subdirectories are created. * @param dir The absolute or relative path of the new directory. * @return false If an intermediate subdirectory * is not a directory, or if the directory already exists. */ bool mkdirs(const std::string & dir) { return mkdirs(purgepath(str2pth(fullpath(sts(dir))))); } /** * Create a directory recursively. Given a Path the last directory * and all the intermediate non-existing subdirectories are created. * @param p The full Path of the new directory. * @return false If an intermediate subdirectory * is not a directory, or if the directory already exists. */ bool mkdirs(Path p) { if ( dirs.find(p) != dirs.end() ) return true; dirs.insert(p); p.pop_back(); return mkdirs(p); } /** * Remove a directory and all the contents underneeth. * @param dir The absolute or relative path of the directory to be removed. * @return false If path does not exist or if it is not * a directory or if the directory is not empty. */ bool rmdir(const std::string & dir) { Path path = purgepath(str2pth(fullpath(sts(dir)))); if ( dirs.find(path) == dirs.end() ) return false; for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( it->first.substr(0, dir.length()) == dir ) return false; dirs.erase(path); return true; } /** * Remove and delete an IManagedObject by specifying its path. * @param path The absolute or relative path of the IManagedObject to be * removed. * @return false If path does not exist. */ bool rm(const std::string & path) { ObjMap::iterator it = objs.find(fullpath(path)); if ( it == objs.end() ) return false; delete it->second; objs.erase(it); return true; } /** * Get the full path of an IManagedObject. * @param o The IManagedObject whose path is to be returned. * @return The object's absolute path. * If the object does not exist, an empty string is returned. */ std::string findPath(const IManagedObject & o) const { for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) if ( it->second == &o ) return it->first; return ""; } /** * Move an IManagedObject or a directory from one directory to another. * @param oldp The path of the IManagedObject [not direcoty] to be moved. * @param newp The path of the diretory in which the object has to be * moved to. * @return false If either path does not exist. */ bool mv(const std::string & oldp, const std::string & newp) { Path newpath = purgepath(str2pth(fullpath(sts(newp)))); std::string foldp = fullpath(oldp); Path oldpath = purgepath(str2pth(foldp)); ObjMap::iterator it = objs.find(foldp); if ( it == objs.end() ) return false; if ( dirs.find(newpath) != dirs.end() ) return false; newpath.push_back(oldpath.back()); if ( !insert(pth2str(newpath), it->second) ) return false; objs.erase(foldp); return true; } /** * Print all histograms to the current filename. * @return false if something went wrong. */ bool commit() { std::ofstream of(name.c_str()); if ( !of ) return false; if ( !flat ) of << "\n\n" << "\n" << "" << std::endl; for ( ObjMap::const_iterator it = objs.begin(); it != objs.end(); ++it ) { ManagedObject * o = dynamic_cast(it->second); if ( !o ) continue; std::string path = it->first.substr(0, it->first.rfind('/')); std::string name = it->first.substr(it->first.rfind('/') + 1); if ( flat ) o->writeFLAT(of, path, name); else o->writeXML(of, path, name); } if ( !flat ) of << "" << std::endl; return of.good(); } /** * Not implemented in LWH. */ void setOverwrite(bool o = true) { overwrite = o; } /** * Not implemented in LWH. * @return false always. */ bool cp(const std::string &, const std::string &, bool = false) { return false; } /** * Not implemented in LWH. * @return false always. */ bool symlink(const std::string &, const std::string &) { return false; } /** * Not implemented in LWH. * @return false always. */ bool mount(const std::string &, ITree &, const std::string &) { return false; } /** * Not implemented in LWH. * @return false always. */ bool unmount(const std::string &) { return false; } /** * Calls commit(). */ bool close() { return commit(); } /** * Not implemented in LWH. * @return null pointer always. */ void * cast(const std::string &) const { return 0; } protected: /** Strip trailing slash. */ std::string sts(std::string s) const { if ( s[s.length() - 1] == '/' ) s = s.substr(0, s.length() - 1); if ( s[s.length() - 1] == '/' ) return ""; return s; } /** Strip trailing name */ std::string stn(std::string s) const { std::string::size_type slash = s.rfind('/'); return s.substr(0, slash); } /** Get proper full path from possibly relative path. */ std::string fullpath(std::string d) const { if ( d[0] != '/' ) d = cwd + "/" + d; return pth2str(purgepath(str2pth(d))); } /** Convert a string containing a path to a Path object. */ Path str2pth(std::string s) const { Path pth; std::string::size_type i = s.find_first_not_of("/"); while ( i != std::string::npos ) { s = s.substr(i); i = s.find_first_of("/"); pth.push_back(s.substr(0, i)); if ( i == std::string::npos ) return pth; s = s.substr(i); i = s.find_first_not_of("/"); } return pth; } /** Convert a Path object to a corresponding string. */ std::string pth2str(const Path & pth) const { std::string str; for ( int i = 0, N = pth.size(); i < N; ++i ) str += "/" + pth[i]; return str; } /** Remove '..' and '.' components of the given Path object. */ Path purgepath(const Path & pth) const { Path p; for ( int i = 0, N = pth.size(); i < N; ++i ) { if ( pth[i] == ".." ) p.pop_back(); else if ( pth[i] != "." ) p.push_back(pth[i]); } return p; } private: /** The filename to print histograms to. */ std::string name; /** If true write histograms in FLAT format, otherwise in XML. */ bool flat; /** The set of defined directories. */ PathSet dirs; /** The set of defined objects. */ ObjMap objs; /** The current working directory. */ std::string cwd; /** Overwrite strategy. */ bool overwrite; }; } #endif /* LWH_Tree_H */ thepeg-1.8.0.orig/Analysis/LWH/AIHistogram2D.h0000644000175000017500000001455711747772425017106 0ustar sunsun// -*- C++ -*- // // AIHistogram2D.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIHistogram2D_H #define LWH_AIHistogram2D_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ #include "AIHistogram1D.h" namespace AIDA { class IAxis; class IHistogram2D : virtual public IHistogram { public: virtual ~IHistogram2D() { /* nop */; } /** * Fill the IHistogram2D with a couple of values and the * corresponding weight. * @param x The x value to be filled in. * @param y The y value to be filled in. * @param weight The corresponding weight (by default 1). * @return false If the weight is <0 or >1 (?). * */ virtual bool fill(double x, double y, double weight = 1.) = 0; /** * The weighted mean along the x axis of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin along the x axis. * */ virtual double binMeanX(int indexX, int indexY) const = 0; /** * The weighted mean along the y axis of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The mean of the corresponding bin along the y axis. * */ virtual double binMeanY(int indexX, int indexY) const = 0; /** * Number of entries in the corresponding bin (ie the number of times fill was called for this bin). * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding bin. * */ virtual int binEntries(int indexX, int indexY) const = 0; /** * Sum of all the entries of the bins along a given x bin. * This is equivalent to projectionX().binEntries(index). * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesX(int index) const = 0; /** * Sum of all the entries of the bins along a given y bin. * This is equivalent to projectionY().binEntries(index). * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The number of entries in the corresponding set of bins. * */ virtual int binEntriesY(int index) const = 0; /** * Total height of a give bin (ie the sum of the weights in this bin). * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The height of the corresponding bin. * */ virtual double binHeight(int indexX, int indexY) const = 0; /** * Sum of all the heights of the bins along a given x bin. * This is equivalent to projectionX().binHeight(index). * @param index The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightX(int index) const = 0; /** * Sum of all the heights of the bins along a given y bin. * This is equivalent to projectionY().binHeight(index). * @param index The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The sum of the heights in the corresponding set of bins. * */ virtual double binHeightY(int index) const = 0; /** * The error of a given bin. * @param indexX The x bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @param indexY The y bin number (0...N-1) or OVERFLOW or UNDERFLOW. * @return The error on the corresponding bin. * */ virtual double binError(int indexX, int indexY) const = 0; /** * The mean of the IHistogram2D along the x axis. * @return The mean of the IHistogram2D along the x axis. * */ virtual double meanX() const = 0; /** * The mean of the IHistogram2D along the y axis. * @return The mean of the IHistogram2D along the y axis. * */ virtual double meanY() const = 0; /** * The RMS of the IHistogram2D along the x axis. * @return The RMS if the IHistogram2D along the x axis. * */ virtual double rmsX() const = 0; /** * The RMS of the IHistogram2D along the y axis. * @return The RMS if the IHistogram2D along the y axis. * */ virtual double rmsY() const = 0; /** * Get the x axis of the IHistogram2D. * @return The x coordinate IAxis. * */ virtual const IAxis & xAxis() const = 0; /** * Get the y axis of the IHistogram2D. * @return The y coordinate IAxis. * */ virtual const IAxis & yAxis() const = 0; /** * Get the bin number corresponding to a given coordinate along the x axis. * This is a convenience method, equivalent to xAxis().coordToIndex(coord). * @see IAxis#coordToIndex(double) * @param coord The coordinalte along the x axis. * @return The corresponding bin number. * */ virtual int coordToIndexX(double coord) const = 0; /** * Get the bin number corresponding to a given coordinate along the y axis. * This is a convenience method, equivalent to yAxis().coordToIndex(coord). * @see IAxis#coordToIndex(double) * @param coord The coordinalte along the y axis. * @return The corresponding bin number. * */ virtual int coordToIndexY(double coord) const = 0; /** * Add to this IHistogram2D the contents of another IHistogram2D. * @param hist The IHistogram2D to be added to this IHistogram2D. * @return false If the IHistogram2Ds binnings are incompatible. * */ virtual bool add(const IHistogram2D & hist) = 0; virtual bool scale(double scaleFactor) = 0; }; // class } // namespace AIDA /** @endcond */ #else #include "AIDA/IHistogram2D.h" #endif #endif /* LWH_AIHistogram2D_H */ thepeg-1.8.0.orig/Analysis/LWH/HistogramFactory.h0000644000175000017500000010372711747772425020034 0ustar sunsun// -*- C++ -*- // // HistogramFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_HistogramFactory_H #define LWH_HistogramFactory_H // // This is the declaration of the HistogramFactory class. // #include "AIHistogramFactory.h" #include "Histogram1D.h" #include "Histogram2D.h" #include "Tree.h" #include #include namespace LWH { using namespace AIDA; /** * User level interface for factory classes of Histograms (binned, * unbinned, and profile). The created objects are assumed to be * managed by the tree which is associated to the factory. So far only * one-dimensional histograms are implemented in LWH. */ class HistogramFactory: public IHistogramFactory { public: /** * Standard constructor. */ HistogramFactory(Tree & t) : tree(&t) {} /** * Destructor. */ virtual ~HistogramFactory() {} /** * Destroy an IBaseHistogram object. * @param hist The IBaseHistogram to be destroyed. * @return false If the histogram cannot be destroyed. */ bool destroy(IBaseHistogram * hist) { IManagedObject * mo = dynamic_cast(hist); if ( !mo ) return false; return tree->rm(tree->findPath(*mo)); } /** * LWH cannot create a ICloud1D, an unbinned 1-dimensional histogram. */ ICloud1D * createCloud1D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error("ICloud1D"); } /** * LWH cannot create a ICloud1D, an unbinned 1-dimensional histogram. */ ICloud1D * createCloud1D(const std::string &) { return error("ICloud1D"); } /** * LWH cannot create a copy of an ICloud1D. */ ICloud1D * createCopy(const std::string &, const ICloud1D &) { return error("ICloud1D"); } /** * LWH cannot create a ICloud2D, an unbinned 2-dimensional histogram. */ ICloud2D * createCloud2D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error("ICloud2D"); } /** * LWH cannot create a ICloud2D, an unbinned 2-dimensional histogram. */ ICloud2D * createCloud2D(const std::string &) { return error("ICloud2D"); } /** * LWH cannot create a copy of an ICloud2D. */ ICloud2D * createCopy(const std::string &, const ICloud2D &) { return error("ICloud2D"); } /** * LWH cannot create a ICloud3D, an unbinned 3-dimensional histogram. */ ICloud3D * createCloud3D(const std::string &, const std::string &, int = -1, const std::string & = "") { return error("ICloud3D"); } /** * LWH cannot create a ICloud3D, an unbinned 3-dimensional histogram. */ ICloud3D * createCloud3D(const std::string &) { return error("ICloud3D"); } /** * LWH cannot create a copy of an ICloud3D. */ ICloud3D * createCopy(const std::string &, const ICloud3D &) { return error("ICloud3D"); } /** * Create a IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid path). * The characther `/` cannot be used in names; it is only * used to delimit directories within paths. * @param title The title of the IHistogram1D. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IHistogram1D ot the null pointer * if something went wrong, such as a non existing * directrory in the path or that an object with the * given path already existed. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createHistogram1D(const std::string & path, const std::string & title, int nBins, double lowerEdge, double upperEdge, const std::string & = "") { Histogram1D * hist = new Histogram1D(nBins, lowerEdge, upperEdge); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * Create a IHistogram1D. * @param pathAndTitle The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param nBins The number of bins of the x axis. * @param lowerEdge The lower edge of the x axis. * @param upperEdge The upper edge of the x axis. * @return The newly created IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createHistogram1D(const std::string & pathAndTitle, int nBins, double lowerEdge, double upperEdge) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createHistogram1D(pathAndTitle, title, nBins, lowerEdge, upperEdge); } /** * Create a IHistogram1D. * @param path The path of the created IHistogram. The path can either * be a relative or full path. * ("/folder1/folder2/dataName" and "../folder/dataName" * are valid paths). All the directories in the path must * exist. The characther `/` cannot be used in names; * it is only used to delimit directories within paths. * @param title The title of the IHistogram1D. * @param binEdges The array of the bin edges for the x axis. */ IHistogram1D * createHistogram1D(const std::string & path, const std::string & title, const std::vector & binEdges, const std::string & = "") { Histogram1D * hist = new Histogram1D(binEdges); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * Create a copy of an IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist The IHistogram1D to be copied. * @return The copy of the IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * createCopy(const std::string & path, const IHistogram1D & hist) { Histogram1D * h = new Histogram1D(dynamic_cast(hist)); h->setTitle(path.substr(path.rfind('/') + 1)); if ( !tree->insert(path, h) ) { delete h; h = 0; throw std::runtime_error("LWH could not create a copy of histogram '" + hist.title() + "'." ); } return h; } /** * Create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, int nx, double xlo, double xup, int ny, double ylo, double yup, const std::string & = "") { Histogram2D * hist = new Histogram2D(nx, xlo, xup, ny, ylo, yup); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** * Create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & pathAndTitle, int nx, double xlo, double xup, int ny, double ylo, double yup) { std::string title = pathAndTitle.substr(pathAndTitle.rfind('/') + 1); return createHistogram2D(pathAndTitle, title, nx, xlo, xup, ny, ylo, yup); } /** * Create a IHistogram2D. */ IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, const std::vector & xedges, const std::vector & yedges, const std::string & = "") { Histogram2D * hist = new Histogram2D(xedges, yedges); hist->setTitle(title); if ( !tree->insert(path, hist) ) { delete hist; hist = 0; throw std::runtime_error("LWH could not create histogram '" + title + "'." ); } return hist; } /** *Create a copy of an IHistogram2D. */ IHistogram2D * createCopy(const std::string & path, const IHistogram2D & hist) { Histogram2D * h = new Histogram2D(dynamic_cast(hist)); h->setTitle(path.substr(path.rfind('/') + 1)); if ( !tree->insert(path, h) ) { delete h; h = 0; throw std::runtime_error("LWH could not create a copy of histogram '" + hist.title() + "'." ); } return h; } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, const std::string &, int, double, double, int, double, double, int, double, double, const std::string & = "") { return error("IHistogram3D"); } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, int, double, double, int, double, double, int, double, double) { return error("IHistogram3D"); } /** * LWH cannot create a IHistogram3D. */ IHistogram3D * createHistogram3D(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::vector &, const std::string & = "") { return error("IHistogram3D"); } /** * LWH cannot create a copy of an IHistogram3D. */ IHistogram3D * createCopy(const std::string &, const IHistogram3D &) { return error("IHistogram3D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, int, double, double, const std::string & = "") { return error("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, int, double, double, double, double, const std::string & = "") { return error("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, const std::vector &, const std::string & = "") { return error("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, const std::string &, const std::vector &, double, double, const std::string & = "") { return error("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, int, double, double) { return error("IProfile1D"); } /** * LWH cannot create a IProfile1D. */ IProfile1D * createProfile1D(const std::string &, int, double, double, double, double) { return error("IProfile1D"); } /** * LWH cannot create a copy of an IProfile1D. */ IProfile1D * createCopy(const std::string &, const IProfile1D &) { return error("IProfile1D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, int, double, double, int, double, double, const std::string & = "") { return error("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, int, double, double, int, double, double, double, double, const std::string & = "") { return error("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, const std::vector &, const std::vector &, const std::string & = "") { return error("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, const std::string &, const std::vector &, const std::vector &, double, double, const std::string & = "") { return error("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, int, double, double, int, double, double) { return error("IProfile2D"); } /** * LWH cannot create a IProfile2D. */ IProfile2D * createProfile2D(const std::string &, int, double, double, int, double, double, double, double) { return error("IProfile2D"); } /** * LWH cannot create a copy of an IProfile2D. */ IProfile2D * createCopy(const std::string &, const IProfile2D &) { return error("IProfile2D"); } /** * Create a Histogram1D by adding two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the addition. * @param hist2 The second member of the addition. * @return The sum of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * add(const std::string & path, const Histogram1D & hist1, const Histogram1D & hist2) { if ( !checkBins(hist1, hist2) ) return 0; Histogram1D * h = new Histogram1D(hist1); h->setTitle(path.substr(path.rfind('/') + 1)); h->add(hist2); if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by adding two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the addition. * @param hist2 The second member of the addition. * @return The sum of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * add(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return add(path, dynamic_cast(hist1), dynamic_cast(hist2)); } /** * Create a Histogram1D by subtracting two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the subtraction. * @param h2 The second member of the subtraction. * @return The difference of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * subtract(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram1D * h = new Histogram1D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int i = 0; i < h->ax->bins() + 2; ++i ) { h->sum[i] += h2.sum[i]; h->sumw[i] -= h2.sumw[i]; h->sumw2[i] += h2.sumw2[i]; } if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by subtracting two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the subtraction. * @param hist2 The second member of the subtraction. * @return The difference of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * subtract(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return subtract(path, dynamic_cast(hist1), dynamic_cast(hist2)); } /** * Create a Histogram1D by multiplying two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the multiplication. * @param h2 The second member of the multiplication. * @return The product of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * multiply(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram1D * h = new Histogram1D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int i = 0; i < h->ax->bins() + 2; ++i ) { h->sumw[i] *= h2.sumw[i]; h->sumw2[i] += h1.sumw[i]*h1.sumw[i]*h2.sumw2[i] + h2.sumw[i]*h2.sumw[i]*h1.sumw2[i]; } if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by multiplying two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the multiplication. * @param hist2 The second member of the multiplication. * @return The product of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * multiply(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return multiply(path, dynamic_cast(hist1), dynamic_cast(hist2)); } /** * Create n Histogram1D by dividing two Histogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param h1 The first member of the division. * @param h2 The second member of the division. * @return The ration of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ Histogram1D * divide(const std::string & path, const Histogram1D & h1, const Histogram1D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram1D * h = new Histogram1D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int i = 0; i < h->ax->bins() + 2; ++i ) { if ( h2.sum[i] == 0 || h2.sumw[i] == 0.0 ) { h->sum[i] = 0; h->sumw[i] = h->sumw2[i] = 0.0; continue; } h->sumw[i] /= h2.sumw[i]; h->sumw2[i] = h1.sumw2[i]/(h2.sumw[i]*h2.sumw[i]) + h1.sumw[i]*h1.sumw[i]*h2.sumw2[i]/ (h2.sumw[i]*h2.sumw[i]*h2.sumw[i]*h2.sumw[i]); } if ( !tree->insert(path, h) ) return 0; return h; } /** * Create an IHistogram1D by dividing two IHistogram1D. * @param path The path of the created IHistogram. The path must be a * full path. ("/folder1/folder2/dataName" is a valid * path). The characther `/` cannot be used in names; it * is only used to delimit directories within paths. * @param hist1 The first member of the division. * @param hist2 The second member of the division. * @return The ration of the two IHistogram1D. * @throws std::runtime_error if histogram could not be created. */ IHistogram1D * divide(const std::string & path, const IHistogram1D & hist1, const IHistogram1D & hist2) { return divide(path, dynamic_cast(hist1), dynamic_cast(hist2)); } inline bool _neq(double a, double b, double eps = 1e-5) const { if ( a == 0 && b == 0 ) return false; if ( abs(a-b) < eps*(abs(a) + abs(b)) ) return false; return true; } /** * Check if two histograms have the same bins. */ bool checkBins(const Histogram1D & h1, const Histogram1D & h2) const { if ( _neq(h1.ax->upperEdge(), h2.ax->upperEdge()) || _neq(h1.ax->lowerEdge(), h2.ax->lowerEdge()) || _neq(h1.ax->bins(), h2.ax->bins()) ) return false; if ( h1.fax && h2.fax ) return true; for ( int i = 0; i < h1.ax->bins(); ++i ) { if ( _neq(h1.ax->binUpperEdge(i), h2.ax->binUpperEdge(i)) || _neq(h1.ax->binLowerEdge(i), h2.ax->binLowerEdge(i)) ) return false; } return true; } /** * Check if two histograms have the same bins. */ bool checkBins(const Histogram2D & h1, const Histogram2D & h2) const { if (_neq( h1.xax->upperEdge(), h2.xax->upperEdge()) || _neq( h1.xax->lowerEdge(), h2.xax->lowerEdge()) || h1.xax->bins() != h2.xax->bins() ) return false; if (_neq( h1.yax->upperEdge(), h2.yax->upperEdge()) || _neq( h1.yax->lowerEdge(), h2.yax->lowerEdge()) || h1.yax->bins() != h2.yax->bins() ) return false; if ( h1.xfax && h2.xfax && h1.yfax && h2.yfax ) return true; for ( int i = 0; i < h1.xax->bins(); ++i ) { if ( _neq(h1.xax->binUpperEdge(i), h2.xax->binUpperEdge(i)) || _neq(h1.xax->binLowerEdge(i), h2.xax->binLowerEdge(i)) ) return false; } for ( int i = 0; i < h1.yax->bins(); ++i ) { if ( _neq(h1.yax->binUpperEdge(i), h2.yax->binUpperEdge(i)) || _neq(h1.yax->binLowerEdge(i), h2.yax->binLowerEdge(i)) ) return false; } return true; } /** * LWH cannot create an IHistogram2D by adding two IHistogram2D. */ IHistogram2D * add(const std::string & path, const IHistogram2D & hist1, const IHistogram2D & hist2) { return add(path, dynamic_cast(hist1), dynamic_cast(hist2)); } /** * LWH cannot create an IHistogram2D by adding two IHistogram2D. */ Histogram2D * add(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); h->add(h2); if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by subtracting two IHistogram2D. */ Histogram2D * subtract(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) { //std::cout << "!!!!!!!" << std::endl; return 0; } Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int ix = 0; ix < h->xax->bins() + 2; ++ix ) for ( int iy = 0; iy < h->yax->bins() + 2; ++iy ) { h->sum[ix][iy] += h2.sum[ix][iy]; h->sumw[ix][iy] -= h2.sumw[ix][iy]; h->sumw2[ix][iy] += h2.sumw2[ix][iy]; h->sumxw[ix][iy] -= h2.sumxw[ix][iy]; h->sumx2w[ix][iy] -= h2.sumx2w[ix][iy]; h->sumyw[ix][iy] -= h2.sumyw[ix][iy]; h->sumy2w[ix][iy] -= h2.sumy2w[ix][iy]; } if ( !tree->insert(path, h) ) { //std::cout << "&&&&&&&" << std::endl; delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by subtracting two IHistogram2D. */ IHistogram2D * subtract(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return subtract(path, dynamic_cast(h1), dynamic_cast(h2)); } /** * LWH cannot create an IHistogram2D by multiplying two IHistogram2D. */ IHistogram2D * multiply(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return multiply(path, dynamic_cast(h1), dynamic_cast(h2)); } /** * LWH cannot create an IHistogram2D by multiplying two IHistogram2D. */ Histogram2D * multiply(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1, h2) ) return 0; Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int ix = 0; ix < h->xax->bins() + 2; ++ix ) for ( int iy = 0; iy < h->yax->bins() + 2; ++iy ) { h->sum[ix][iy] *= h2.sum[ix][iy]; h->sumw[ix][iy] *= h2.sumw[ix][iy]; h->sumw2[ix][iy] += h1.sumw[ix][iy]*h1.sumw[ix][iy]*h2.sumw2[ix][iy] + h2.sumw[ix][iy]*h2.sumw[ix][iy]*h1.sumw2[ix][iy]; } if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by dividing two IHistogram2D. */ Histogram2D * divide(const std::string & path, const Histogram2D & h1, const Histogram2D & h2) { if ( !checkBins(h1,h2) ) return 0; Histogram2D * h = new Histogram2D(h1); h->setTitle(path.substr(path.rfind('/') + 1)); for ( int ix = 0; ix < h->xax->bins() + 2; ++ix ) for ( int iy = 0; iy < h->yax->bins() + 2; ++iy ) { if ( h2.sum[ix][iy] == 0 || h2.sumw[ix][iy] == 0.0 ) { h->sum[ix][iy] = 0; h->sumw[ix][iy] = h->sumw2[ix][iy] = 0.0; continue; } h->sumw[ix][iy] /= h2.sumw[ix][iy]; h->sumw2[ix][iy] = h1.sumw2[ix][iy]/(h2.sumw[ix][iy]*h2.sumw[ix][iy]) + h1.sumw[ix][iy]*h1.sumw[ix][iy]*h2.sumw2[ix][iy]/ (h2.sumw[ix][iy]*h2.sumw[ix][iy]*h2.sumw[ix][iy]*h2.sumw[ix][iy]); } if ( !tree->insert(path, h) ) { delete h; return 0; } return h; } /** * LWH cannot create an IHistogram2D by dividing two IHistogram2D. */ IHistogram2D * divide(const std::string & path, const IHistogram2D & h1, const IHistogram2D & h2) { return divide(path, dynamic_cast(h1), dynamic_cast(h2)); } /** * LWH cannot create an IHistogram3D by adding two IHistogram3D. */ IHistogram3D * add(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error("3D histograms"); } /** * LWH cannot create an IHistogram3D by subtracting two IHistogram3D. */ IHistogram3D * subtract(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error("3D histograms"); } /** * LWH cannot create an IHistogram3D by multiplying two IHistogram3D. */ IHistogram3D * multiply(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error("3D histograms"); } /** * LWH cannot create an IHistogram3D by dividing two IHistogram3D. */ IHistogram3D * divide(const std::string &, const IHistogram3D &, const IHistogram3D &) { return error("3D histograms"); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its x axis. */ IHistogram1D * projectionX(const std::string & path, const IHistogram2D & h) { return projectionX(path, dynamic_cast(h)); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its x axis. */ Histogram1D * projectionX(const std::string & path, const Histogram2D & h) { return sliceX(path, h, 0, h.yax->bins() - 1); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its y axis. */ IHistogram1D * projectionY(const std::string & path, const IHistogram2D & h) { return projectionY(path, dynamic_cast(h)); } /** * LWH cannot create an IHistogram1D by projecting an IHistogram2D * along its y axis. */ Histogram1D * projectionY(const std::string & path, const Histogram2D & h) { return sliceY(path, h, 0, h.xax->bins() - 1); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis at a given bin. */ IHistogram1D * sliceX(const std::string & path, const IHistogram2D & h, int i) { return sliceX(path, dynamic_cast(h), i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis at a given bin. */ Histogram1D * sliceX(const std::string & path, const Histogram2D & h, int i) { return sliceX(path, h, i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis at a given bin. */ IHistogram1D * sliceY(const std::string & path, const IHistogram2D & h, int i) { return sliceY(path, dynamic_cast(h), i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis at a given bin. */ Histogram1D * sliceY(const std::string & path, const Histogram2D & h, int i) { return sliceY(path, h, i, i); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis between two bins (inclusive). */ IHistogram1D * sliceX(const std::string & path, const IHistogram2D & h, int il, int iu) { return sliceX(path, dynamic_cast(h), il, iu); } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the y axis between two bins (inclusive). */ Histogram1D * sliceX(const std::string & path, const Histogram2D & h2, int il, int iu) { Histogram1D * h1; if ( h2.xfax ) h1 = new Histogram1D(h2.xfax->bins(), h2.xfax->lowerEdge(), h2.xfax->upperEdge()); else { std::vector edges(h2.xax->bins() + 1); edges.push_back(h2.xax->lowerEdge()); for ( int i = 0; i < h2.xax->bins(); ++i ) edges.push_back(h2.xax->binLowerEdge(i)); h1 = new Histogram1D(edges); } for ( int ix = 0; ix < h2.xax->bins() + 2; ++ix ) for ( int iy = il + 2; iy <= iu + 2; ++iy ) { h1->sum[ix] += h2.sum[ix][iy]; h1->sumw[ix] += h2.sumw[ix][iy]; h1->sumw2[ix] += h2.sumw2[ix][iy]; h1->sumxw[ix] += h2.sumxw[ix][iy]; h1->sumx2w[ix] += h2.sumx2w[ix][iy]; } if ( !tree->insert(path, h1) ) { delete h1; return 0; } return h1; } /** * LWH cannot create an IHistogram1D by slicing an IHistogram2D * parallel to the x axis between two bins (inclusive). */ IHistogram1D * sliceY(const std::string & path, const IHistogram2D & h, int il, int iu) { return sliceY(path, dynamic_cast(h), il, iu); } Histogram1D * sliceY(const std::string & path, const Histogram2D & h2, int il, int iu) { Histogram1D * h1; if ( h2.yfax ) h1 = new Histogram1D(h2.yfax->bins(), h2.yfax->lowerEdge(), h2.yfax->upperEdge()); else { std::vector edges(h2.yax->bins() + 1); edges.push_back(h2.yax->lowerEdge()); for ( int i = 0; i < h2.yax->bins(); ++i ) edges.push_back(h2.yax->binLowerEdge(i)); h1 = new Histogram1D(edges); } for ( int iy = 0; iy < h2.yax->bins() + 2; ++iy ) for ( int ix = il + 2; ix <= iu + 2; ++ix ) { h1->sum[iy] += h2.sum[ix][iy]; h1->sumw[iy] += h2.sumw[ix][iy]; h1->sumw2[iy] += h2.sumw2[ix][iy]; h1->sumxw[iy] += h2.sumyw[ix][iy]; h1->sumx2w[iy] += h2.sumy2w[ix][iy]; } if ( !tree->insert(path, h1) ) { delete h1; return 0; } return h1; } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the x-y plane. */ IHistogram2D * projectionXY(const std::string &, const IHistogram3D &) { return error("2D histograms"); } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the x-z plane. */ IHistogram2D * projectionXZ(const std::string &, const IHistogram3D &) { return error("2D histograms"); } /** * LWH cannot create an IHistogram2D by projecting an IHistogram3D * on the y-z plane. */ IHistogram2D * projectionYZ(const std::string &, const IHistogram3D &) { return error("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the Z axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceXY(const std::string &, const IHistogram3D &, int, int) { return error("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the Y axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceXZ(const std::string &, const IHistogram3D &, int, int) { return error("2D histograms"); } /** * LWH cannot create an IHistogram2D by slicing an IHistogram3D * perpendicular to the X axis, between "index1" and "index2" * (inclusive). */ IHistogram2D * sliceYZ(const std::string &, const IHistogram3D &, int, int) { return error("2D histograms"); } private: /** Throw a suitable error. */ template static T * error(std::string feature) { throw std::runtime_error("LWH cannot handle " + feature + "."); } /** The tree where the actual histograms are stored. */ Tree * tree; }; } #endif /* LWH_HistogramFactory_H */ thepeg-1.8.0.orig/Analysis/LWH/Measurement.h0000644000175000017500000000464311747772425017031 0ustar sunsun// -*- C++ -*- // // Measurement.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_Measurement_H #define LWH_Measurement_H // // This is the declaration of the Measurement class representing // #include #include #include #include "AIMeasurement.h" namespace LWH { using namespace AIDA; /** * Basic user-level interface class for holding a single "measurement" * with positive and negative errors (to allow for asymmetric errors). * "IMeasurement" = "value" + "errorPlus" - "errorMinus" */ class Measurement: public IMeasurement { public: /** * Standard constructor. */ Measurement(double v = 0.0, double ep = 0.0, double em = 0.0) : val(v), errp(ep), errm(em) {} /** * Copy constructor. */ Measurement(const Measurement & m) :IMeasurement(m), val(m.val), errp(m.errp), errm(m.errm) {} /** * Destructor. */ virtual ~Measurement() { /* nop */; } /** * Get the value of the Measurement. * @return The value of the Measurement. */ double value() const { return val; } /** * Get the plus error of the IMeasurement. * @return The plus error. */ double errorPlus() const { return errp; } /** * Get the minus error of the IMeasurement. * @return The minus error. */ double errorMinus() const { return errm; } /** * Set the value of the IMeasurement. * @param v The new value of the IMeasurement. * @return false If the value cannot be set. */ bool setValue(double v) { val = v; return true; } /** * Set the plus error of the IMeasurement. * @param ep The new plus error of the IMeasurement. * @return false If the error cannot be set or it is negative. */ bool setErrorPlus(double ep) { errp = ep; return ep < 0.0; } /** * Set the minus error of the IMeasurement. * @param em The new minus error of the IMeasurement. * @return false If the error cannot be set or it is negative. */ bool setErrorMinus(double em) { errm = em; return em < 0.0; } private: /** * The value. */ double val; /** * The plus error. */ double errp; /** * The minus error. */ double errm; }; } #endif /* LWH_Measurement_H */ thepeg-1.8.0.orig/Analysis/LWH/ManagedObject.h0000644000175000017500000000176111747772425017225 0ustar sunsun// -*- C++ -*- // // ManagedObject.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_ManagedObject_H #define LWH_ManagedObject_H // // This is the declaration of the ManagedObject class. // #include "AIManagedObject.h" #include namespace LWH { using namespace AIDA; /** * The creator of trees. */ class ManagedObject: public IManagedObject { public: /// Destructor. virtual ~ManagedObject() {} /** * Write out the object to the given stream in XML format. */ virtual bool writeXML(std::ostream & os, std::string path, std::string name) = 0; /** * Write out the object to the given stream in simple table format. */ virtual bool writeFLAT(std::ostream & os, std::string path, std::string name) = 0; }; } #endif /* LWH_ManagedObject_H */ thepeg-1.8.0.orig/Analysis/LWH/AIHistogramFactory.h0000644000175000017500000000655411747772425020246 0ustar sunsun// -*- C++ -*- // // AIHistogramFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef LWH_AIHistogramFactory_H #define LWH_AIHistogramFactory_H #ifndef LWH_USING_AIDA /** @cond DONT_DOCUMENT_STRIPPED_DOWN_AIDA_INTERFACES */ namespace AIDA { class ICloud1D; class ICloud2D; class ICloud3D; class IBaseHistogram; class IHistogram1D; class IHistogram2D; class IHistogram3D; class IProfile1D; class IProfile2D; class IHistogramFactory { public: virtual ~IHistogramFactory() {} virtual bool destroy(IBaseHistogram * hist) = 0; virtual IHistogram1D * createHistogram1D(const std::string &, const std::string &, int, double, double, const std::string & = "") = 0; virtual IHistogram1D * createHistogram1D(const std::string &, int, double, double) = 0; virtual IHistogram1D * createHistogram1D(const std::string &, const std::string & , const std::vector &, const std::string & = "") = 0; virtual IHistogram1D * createCopy(const std::string &, const IHistogram1D &) = 0; virtual IHistogram1D * add(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram1D * subtract(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram1D * multiply(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram1D * divide(const std::string &, const IHistogram1D &, const IHistogram1D &) = 0; virtual IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, int nx, double xlo, double xup, int ny, double ylo, double yup, const std::string & = "") = 0; virtual IHistogram2D * createHistogram2D(const std::string & pathAndTitle, int nx, double xlo, double xup, int ny, double ylo, double yup) = 0; virtual IHistogram2D * createHistogram2D(const std::string & path, const std::string & title, const std::vector & xedges, const std::vector & yedges, const std::string & = "") = 0; virtual IHistogram2D * createCopy(const std::string & path, const IHistogram2D & hist) = 0; virtual IHistogram2D * add(const std::string &, const IHistogram2D &, const IHistogram2D &) = 0; virtual IHistogram2D * subtract(const std::string &, const IHistogram2D &, const IHistogram2D &) = 0; virtual IHistogram2D * multiply(const std::string &, const IHistogram2D &, const IHistogram2D &) = 0; virtual IHistogram2D * divide(const std::string &, const IHistogram2D &, const IHistogram2D &) = 0; virtual IHistogram1D * projectionX(const std::string &, const IHistogram2D &) = 0; virtual IHistogram1D * projectionY(const std::string &, const IHistogram2D &) = 0; virtual IHistogram1D * sliceX(const std::string &, const IHistogram2D &, int) = 0; virtual IHistogram1D * sliceY(const std::string &, const IHistogram2D &, int) = 0; virtual IHistogram1D * sliceX(const std::string &, const IHistogram2D &, int, int) = 0; virtual IHistogram1D * sliceY(const std::string &, const IHistogram2D &, int, int) = 0; }; } /** @endcond */ #else #include "AIDA/IHistogramFactory.h" #endif #endif /* LWH_AIHistogramFactory_H */ thepeg-1.8.0.orig/Analysis/FactoryBase.fh0000644000175000017500000000043511747772425016455 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FactoryBase class. // #ifndef THEPEG_FactoryBase_FH #define THEPEG_FactoryBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class FactoryBase; ThePEG_DECLARE_POINTERS(ThePEG::FactoryBase,HistFacPtr); } #endif thepeg-1.8.0.orig/Analysis/AIDA_helper.h0000644000175000017500000000051311747772425016137 0ustar sunsun#include "ThePEG/Config/LWH.h" #include "AIAnalysisFactory.h" #include "AITreeFactory.h" #include "AITree.h" #include "AIHistogramFactory.h" #include "AIHistogram1D.h" #include "AIHistogram2D.h" #include "AIAxis.h" #include "AIDataPointSetFactory.h" #include "AIDataPointSet.h" #include "AIDataPoint.h" #include "AIMeasurement.h" thepeg-1.8.0.orig/Analysis/LWHFactory.h0000644000175000017500000001250411747772425016067 0ustar sunsun// -*- C++ -*- // // LWHFactory.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LWHFactory_H #define THEPEG_LWHFactory_H // // This is the declaration of the LWHFactory class. // #include "ThePEG/Analysis/FactoryBase.h" namespace ThePEG { /** * Here is the documentation of the LWHFactory class. It inherits from * the abstract FactoryBase class and implements the Light-Weight * Histogram package, LWH. This implements the most rudimentary * histogramming facilities according to the AIDA interface * specifications. Currently the only thing that is supported is * simple, equally binned, one dimensional histograms. It is mainly * intended to be used in applications where one needs to fill simple * histograms and output them. With LWH it is then possible to do this * without the overhead of a full AIDA implementation, but still * having the option to use a full implementation later on with * minimal changes. * * @see \ref LWHFactoryInterfaces "The interfaces" * defined for LWHFactory. */ class LWHFactory: public FactoryBase { public: /** @name Manipulate histograms */ //@{ /** * Rescale the given \a histogram so that the integral over the bins * will give the correct integrated cross section for the observable * in the given \a unit. */ virtual void normalizeToXSec(tH1DPtr histogram, CrossSection unit = picobarn) const; /** * Rescale the given \a histogram so that the integral over the bins * gives the fraction of the total cross section generated which is * contained in the bins. */ virtual void normalizeToXSecFraction(tH1DPtr histogram) const; /** * Rescale the given \a histogram so that the integral over the bins * gives one. */ virtual void normalizeToUnity(tH1DPtr histogram) const; /** * Rescale the given \a histogram so that the integral over the bins * will give the correct integrated cross section for the observable * in the given \a unit. */ virtual void normalizeToXSec(tH2DPtr histogram, CrossSection unit = picobarn) const; /** * Rescale the given \a histogram so that the integral over the bins * gives the fraction of the total cross section generated which is * contained in the bins. */ virtual void normalizeToXSecFraction(tH2DPtr histogram) const; /** * Rescale the given \a histogram so that the integral over the bins * gives one. */ virtual void normalizeToUnity(tH2DPtr histogram) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const { return new_ptr(*this); } /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const { return new_ptr(*this); } //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initLWHFactory; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ LWHFactory & operator=(const LWHFactory &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of LWHFactory. */ template <> struct BaseClassTrait { /** Typedef of the first base class of LWHFactory. */ typedef FactoryBase NthBase; }; /** This template specialization informs ThePEG about the name of * the LWHFactory class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::LWHFactory"; } /** Return the name of the shared library be loaded to get access to * the LWHFactory class and every other class it uses * (except the base class). */ static string library() { return "LWHFactory.so"; } }; /** @endcond */ } #endif /* THEPEG_LWHFactory_H */ thepeg-1.8.0.orig/Analysis/Makefile.in0000644000175000017500000010257311756366733016010 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_RIVET_TRUE@am__append_1 = RivetAnalysis.la @HAVE_HEPMC_TRUE@am__append_2 = HepMCAnalysis.la DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Analysis ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) GraphvizPlot_la_LIBADD = am_GraphvizPlot_la_OBJECTS = GraphvizPlot.lo GraphvizPlot_la_OBJECTS = $(am_GraphvizPlot_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent GraphvizPlot_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(GraphvizPlot_la_LDFLAGS) \ $(LDFLAGS) -o $@ am__DEPENDENCIES_1 = @HAVE_HEPMC_TRUE@HepMCAnalysis_la_DEPENDENCIES = \ @HAVE_HEPMC_TRUE@ $(am__DEPENDENCIES_1) am__HepMCAnalysis_la_SOURCES_DIST = HepMCFile.h HepMCFile.cc @HAVE_HEPMC_TRUE@am_HepMCAnalysis_la_OBJECTS = \ @HAVE_HEPMC_TRUE@ HepMCAnalysis_la-HepMCFile.lo HepMCAnalysis_la_OBJECTS = $(am_HepMCAnalysis_la_OBJECTS) HepMCAnalysis_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(HepMCAnalysis_la_LDFLAGS) \ $(LDFLAGS) -o $@ @HAVE_HEPMC_TRUE@am_HepMCAnalysis_la_rpath = -rpath $(pkglibdir) LWHFactory_la_LIBADD = am__LWHFactory_la_SOURCES_DIST = LWHFactory.cc LWH/AIAnalysisFactory.h \ LWH/AIAxis.h LWH/AIHistogram1D.h LWH/AIHistogram2D.h \ LWH/AIHistogramFactory.h LWH/AITree.h LWH/AITreeFactory.h \ LWH/AIManagedObject.h LWH/AIDataPoint.h LWH/AIDataPointSet.h \ LWH/AIDataPointSetFactory.h LWH/AIMeasurement.h \ LWH/AnalysisFactory.h LWH/Axis.h LWH/Tree.h LWH/TreeFactory.h \ LWH/Histogram1D.h LWH/Histogram2D.h LWH/HistogramFactory.h \ LWH/ManagedObject.h LWH/VariAxis.h LWH/DataPoint.h \ LWH/DataPointSet.h LWH/DataPointSetFactory.h LWH/Measurement.h \ LWHFactory.h RivetAnalysis.h am__objects_1 = LWHFactory_la-LWHFactory.lo am__objects_2 = @HAVE_RIVET_FALSE@am__objects_3 = $(am__objects_2) $(am__objects_2) am__objects_4 = $(am__objects_3) am_LWHFactory_la_OBJECTS = $(am__objects_1) $(am__objects_4) LWHFactory_la_OBJECTS = $(am_LWHFactory_la_OBJECTS) LWHFactory_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(LWHFactory_la_LDFLAGS) $(LDFLAGS) \ -o $@ ProgressLog_la_LIBADD = am_ProgressLog_la_OBJECTS = ProgressLog.lo ProgressLog_la_OBJECTS = $(am_ProgressLog_la_OBJECTS) ProgressLog_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ProgressLog_la_LDFLAGS) \ $(LDFLAGS) -o $@ @HAVE_RIVET_TRUE@RivetAnalysis_la_DEPENDENCIES = \ @HAVE_RIVET_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__RivetAnalysis_la_SOURCES_DIST = RivetAnalysis.cc \ LWH/AIAnalysisFactory.h LWH/AIAxis.h LWH/AIHistogram1D.h \ LWH/AIHistogram2D.h LWH/AIHistogramFactory.h LWH/AITree.h \ LWH/AITreeFactory.h LWH/AIManagedObject.h LWH/AIDataPoint.h \ LWH/AIDataPointSet.h LWH/AIDataPointSetFactory.h \ LWH/AIMeasurement.h LWH/AnalysisFactory.h LWH/Axis.h \ LWH/Tree.h LWH/TreeFactory.h LWH/Histogram1D.h \ LWH/Histogram2D.h LWH/HistogramFactory.h LWH/ManagedObject.h \ LWH/VariAxis.h LWH/DataPoint.h LWH/DataPointSet.h \ LWH/DataPointSetFactory.h LWH/Measurement.h LWHFactory.h \ RivetAnalysis.h @HAVE_RIVET_TRUE@am_RivetAnalysis_la_OBJECTS = \ @HAVE_RIVET_TRUE@ RivetAnalysis_la-RivetAnalysis.lo \ @HAVE_RIVET_TRUE@ $(am__objects_4) RivetAnalysis_la_OBJECTS = $(am_RivetAnalysis_la_OBJECTS) RivetAnalysis_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(RivetAnalysis_la_LDFLAGS) \ $(LDFLAGS) -o $@ @HAVE_RIVET_TRUE@am_RivetAnalysis_la_rpath = -rpath $(pkglibdir) XSecCheck_la_LIBADD = am_XSecCheck_la_OBJECTS = XSecCheck.lo XSecCheck_la_OBJECTS = $(am_XSecCheck_la_OBJECTS) XSecCheck_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(XSecCheck_la_LDFLAGS) $(LDFLAGS) -o $@ libThePEGHist_la_LIBADD = am_libThePEGHist_la_OBJECTS = libThePEGHist_la-FactoryBase.lo libThePEGHist_la_OBJECTS = $(am_libThePEGHist_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(GraphvizPlot_la_SOURCES) $(HepMCAnalysis_la_SOURCES) \ $(LWHFactory_la_SOURCES) $(ProgressLog_la_SOURCES) \ $(RivetAnalysis_la_SOURCES) $(XSecCheck_la_SOURCES) \ $(libThePEGHist_la_SOURCES) DIST_SOURCES = $(GraphvizPlot_la_SOURCES) \ $(am__HepMCAnalysis_la_SOURCES_DIST) \ $(am__LWHFactory_la_SOURCES_DIST) $(ProgressLog_la_SOURCES) \ $(am__RivetAnalysis_la_SOURCES_DIST) $(XSecCheck_la_SOURCES) \ $(libThePEGHist_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AIDAWRAPPERS = LWH/AIAnalysisFactory.h LWH/AIAxis.h LWH/AIHistogram1D.h LWH/AIHistogram2D.h \ LWH/AIHistogramFactory.h LWH/AITree.h LWH/AITreeFactory.h \ LWH/AIManagedObject.h LWH/AIDataPoint.h LWH/AIDataPointSet.h \ LWH/AIDataPointSetFactory.h LWH/AIMeasurement.h LWHHEADERS = LWH/AnalysisFactory.h LWH/Axis.h LWH/Tree.h LWH/TreeFactory.h \ LWH/Histogram1D.h LWH/Histogram2D.h LWH/HistogramFactory.h LWH/ManagedObject.h \ LWH/VariAxis.h LWH/DataPoint.h LWH/DataPointSet.h LWH/DataPointSetFactory.h \ LWH/Measurement.h mySOURCES = LWHFactory.cc pkglib_LTLIBRARIES = LWHFactory.la XSecCheck.la ProgressLog.la \ $(am__append_1) $(am__append_2) GraphvizPlot.la @HAVE_RIVET_FALSE@DOCFILES = $(AIDAWRAPPERS) $(LWHHEADERS) \ @HAVE_RIVET_FALSE@ LWHFactory.h @HAVE_RIVET_TRUE@DOCFILES = RivetAnalysis.h LWHFactory.h @HAVE_RIVET_TRUE@RivetAnalysis_la_CPPFLAGS = $(RIVETINCLUDE) $(HEPMCINCLUDE) $(AM_CPPFLAGS) @HAVE_RIVET_TRUE@RivetAnalysis_la_LIBADD = $(HEPMCLIBS) $(RIVETLIBS) @HAVE_RIVET_TRUE@RivetAnalysis_la_SOURCES = RivetAnalysis.cc $(INCLUDEFILES) @HAVE_RIVET_TRUE@RivetAnalysis_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) INCLUDEFILES = $(DOCFILES) LWHFactory_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) LWHFactory_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LWHFactory_la_CPPFLAGS = $(AM_CPPFLAGS) $(LWHINCLUDE) XSecCheck_la_SOURCES = XSecCheck.cc XSecCheck.h XSecCheck_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ProgressLog_la_SOURCES = ProgressLog.cc ProgressLog.h ProgressLog_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) noinst_LTLIBRARIES = libThePEGHist.la libThePEGHist_la_SOURCES = \ FactoryBase.cc FactoryBase.fh FactoryBase.h AIDA_helper.h libThePEGHist_la_CPPFLAGS = $(AM_CPPFLAGS) $(LWHINCLUDE) @HAVE_HEPMC_TRUE@HepMCAnalysis_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) @HAVE_HEPMC_TRUE@HepMCAnalysis_la_SOURCES = HepMCFile.h HepMCFile.cc @HAVE_HEPMC_TRUE@HepMCAnalysis_la_CPPFLAGS = $(AM_CPPFLAGS) $(HEPMCINCLUDE) @HAVE_HEPMC_TRUE@HepMCAnalysis_la_LIBADD = $(HEPMCLIBS) GraphvizPlot_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GraphvizPlot_la_SOURCES = GraphvizPlot.h GraphvizPlot.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Analysis/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Analysis/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } GraphvizPlot.la: $(GraphvizPlot_la_OBJECTS) $(GraphvizPlot_la_DEPENDENCIES) $(EXTRA_GraphvizPlot_la_DEPENDENCIES) $(AM_V_CXXLD)$(GraphvizPlot_la_LINK) -rpath $(pkglibdir) $(GraphvizPlot_la_OBJECTS) $(GraphvizPlot_la_LIBADD) $(LIBS) HepMCAnalysis.la: $(HepMCAnalysis_la_OBJECTS) $(HepMCAnalysis_la_DEPENDENCIES) $(EXTRA_HepMCAnalysis_la_DEPENDENCIES) $(AM_V_CXXLD)$(HepMCAnalysis_la_LINK) $(am_HepMCAnalysis_la_rpath) $(HepMCAnalysis_la_OBJECTS) $(HepMCAnalysis_la_LIBADD) $(LIBS) LWHFactory.la: $(LWHFactory_la_OBJECTS) $(LWHFactory_la_DEPENDENCIES) $(EXTRA_LWHFactory_la_DEPENDENCIES) $(AM_V_CXXLD)$(LWHFactory_la_LINK) -rpath $(pkglibdir) $(LWHFactory_la_OBJECTS) $(LWHFactory_la_LIBADD) $(LIBS) ProgressLog.la: $(ProgressLog_la_OBJECTS) $(ProgressLog_la_DEPENDENCIES) $(EXTRA_ProgressLog_la_DEPENDENCIES) $(AM_V_CXXLD)$(ProgressLog_la_LINK) -rpath $(pkglibdir) $(ProgressLog_la_OBJECTS) $(ProgressLog_la_LIBADD) $(LIBS) RivetAnalysis.la: $(RivetAnalysis_la_OBJECTS) $(RivetAnalysis_la_DEPENDENCIES) $(EXTRA_RivetAnalysis_la_DEPENDENCIES) $(AM_V_CXXLD)$(RivetAnalysis_la_LINK) $(am_RivetAnalysis_la_rpath) $(RivetAnalysis_la_OBJECTS) $(RivetAnalysis_la_LIBADD) $(LIBS) XSecCheck.la: $(XSecCheck_la_OBJECTS) $(XSecCheck_la_DEPENDENCIES) $(EXTRA_XSecCheck_la_DEPENDENCIES) $(AM_V_CXXLD)$(XSecCheck_la_LINK) -rpath $(pkglibdir) $(XSecCheck_la_OBJECTS) $(XSecCheck_la_LIBADD) $(LIBS) libThePEGHist.la: $(libThePEGHist_la_OBJECTS) $(libThePEGHist_la_DEPENDENCIES) $(EXTRA_libThePEGHist_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGHist_la_OBJECTS) $(libThePEGHist_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GraphvizPlot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HepMCAnalysis_la-HepMCFile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LWHFactory_la-LWHFactory.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ProgressLog.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RivetAnalysis_la-RivetAnalysis.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XSecCheck.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGHist_la-FactoryBase.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< HepMCAnalysis_la-HepMCFile.lo: HepMCFile.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HepMCAnalysis_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT HepMCAnalysis_la-HepMCFile.lo -MD -MP -MF $(DEPDIR)/HepMCAnalysis_la-HepMCFile.Tpo -c -o HepMCAnalysis_la-HepMCFile.lo `test -f 'HepMCFile.cc' || echo '$(srcdir)/'`HepMCFile.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/HepMCAnalysis_la-HepMCFile.Tpo $(DEPDIR)/HepMCAnalysis_la-HepMCFile.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='HepMCFile.cc' object='HepMCAnalysis_la-HepMCFile.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(HepMCAnalysis_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o HepMCAnalysis_la-HepMCFile.lo `test -f 'HepMCFile.cc' || echo '$(srcdir)/'`HepMCFile.cc LWHFactory_la-LWHFactory.lo: LWHFactory.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(LWHFactory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT LWHFactory_la-LWHFactory.lo -MD -MP -MF $(DEPDIR)/LWHFactory_la-LWHFactory.Tpo -c -o LWHFactory_la-LWHFactory.lo `test -f 'LWHFactory.cc' || echo '$(srcdir)/'`LWHFactory.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/LWHFactory_la-LWHFactory.Tpo $(DEPDIR)/LWHFactory_la-LWHFactory.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='LWHFactory.cc' object='LWHFactory_la-LWHFactory.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(LWHFactory_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o LWHFactory_la-LWHFactory.lo `test -f 'LWHFactory.cc' || echo '$(srcdir)/'`LWHFactory.cc RivetAnalysis_la-RivetAnalysis.lo: RivetAnalysis.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(RivetAnalysis_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT RivetAnalysis_la-RivetAnalysis.lo -MD -MP -MF $(DEPDIR)/RivetAnalysis_la-RivetAnalysis.Tpo -c -o RivetAnalysis_la-RivetAnalysis.lo `test -f 'RivetAnalysis.cc' || echo '$(srcdir)/'`RivetAnalysis.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/RivetAnalysis_la-RivetAnalysis.Tpo $(DEPDIR)/RivetAnalysis_la-RivetAnalysis.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RivetAnalysis.cc' object='RivetAnalysis_la-RivetAnalysis.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(RivetAnalysis_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o RivetAnalysis_la-RivetAnalysis.lo `test -f 'RivetAnalysis.cc' || echo '$(srcdir)/'`RivetAnalysis.cc libThePEGHist_la-FactoryBase.lo: FactoryBase.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGHist_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGHist_la-FactoryBase.lo -MD -MP -MF $(DEPDIR)/libThePEGHist_la-FactoryBase.Tpo -c -o libThePEGHist_la-FactoryBase.lo `test -f 'FactoryBase.cc' || echo '$(srcdir)/'`FactoryBase.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGHist_la-FactoryBase.Tpo $(DEPDIR)/libThePEGHist_la-FactoryBase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='FactoryBase.cc' object='libThePEGHist_la-FactoryBase.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGHist_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGHist_la-FactoryBase.lo `test -f 'FactoryBase.cc' || echo '$(srcdir)/'`FactoryBase.cc mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES LWH.tgz: $(AIDAWRAPPERS) $(LWHHEADERS) tar czf LWH.tgz $(AIDAWRAPPERS) $(LWHHEADERS) debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Analysis/ProgressLog.h0000644000175000017500000001344411747772425016357 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_ProgressLog_H #define THEPEG_ProgressLog_H // // This is the declaration of the ProgressLog class. // #include "ThePEG/Handlers/AnalysisHandler.h" namespace ThePEG { /** * The ProgressLog class will not perform an actual analysis. Instead * it will write out a progress status on the standard log file. By * default it will write on event 1, 2, 5, 10, 20, 50, ... etc. But * optionally it can in addition also write out every given number of * seconds. * * The status line which is written out contains the current date and * time, the number of events processed so far and the total number of * events to be generated, two estimates of the time of completion * (one based on the current cpu usage and one based on the average * cpu usage [the usage is given in brackets]), and the host on which * the program is running, together with its process number. * * @see \ref ProgressLogInterfaces "The interfaces" * defined for ProgressLog. */ class ProgressLog: public AnalysisHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ProgressLog(); /** * The destructor. */ virtual ~ProgressLog(); //@} public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event * may be presented several times, if it has been manipulated in * between. The default version of this function will call transform * to make a lorentz transformation of the whole event, then extract * all final state particles and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the event has been * manipulated in some way since it was last presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); //@} /** * Return the cpu clock in seconds. */ static double fclock(); /** * Check if it is time to write out a status line. */ bool statusTime(long i, long n) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * If larger than 0, a status line will be written every secstep second. */ int secstep; /** * The clock when the run was started. */ time_t time0; /** * The cpu clock when the run was started. */ double fcpu0; /** * The clock the last time a status line was written out. */ time_t time1; /** * The cpu clock the last time a status line was written out. */ double fcpu1; /** * The host on which we are running. */ string host; /** * The pid of the current process. */ pid_t pid; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initProgressLog; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ProgressLog & operator=(const ProgressLog &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of ProgressLog. */ template <> struct BaseClassTrait { /** Typedef of the first base class of ProgressLog. */ typedef AnalysisHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the ProgressLog class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ProgressLog"; } /** * The name of a file containing the dynamic library where the class * ProgressLog is implemented. It may also include several, space-separated, * libraries if the class ProgressLog depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "ProgressLog.so"; } }; /** @endcond */ } #endif /* THEPEG_ProgressLog_H */ thepeg-1.8.0.orig/Analysis/ProgressLog.cc0000644000175000017500000001224411747772425016512 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the ProgressLog class. // #include "ProgressLog.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include #include using namespace ThePEG; ProgressLog::ProgressLog(): secstep(0) {} ProgressLog::~ProgressLog() {} void ProgressLog::analyze(tEventPtr event, long ieve, int loop, int state) { AnalysisHandler::analyze(event, ieve, loop, state); long n = generator()->N(); long i = ieve; if ( !statusTime(i, n) ) return; double fcpui = fclock(); time_t timei = time(0); double ftime0 = time0; double ftime1 = time1; double ftimei = timei; double eff = 1.0; if ( ftimei > ftime1 && fcpui > fcpu1 ) eff = (fcpui-fcpu1)/(ftimei-ftime1); if ( eff >= 1.0 ) eff = 0.999999; int ieff = 100*eff; double eff0 = 1.0; if ( ftimei > ftime0 && fcpui > fcpu0 ) eff0 = (fcpui-fcpu0)/(ftimei-ftime0); if ( eff0 >= 1.0 ) eff0 = 0.999999; int ieff0 = 100*eff0; double fcpun = fcpu0 + (n*(fcpui-fcpu0))/i; time_t timen = (time_t)(ftimei + (fcpun-fcpui)/eff + 30.0); time_t timen0 = (time_t)(ftimei + (fcpun-fcpui)/eff0 + 30.0); char date[1024]; char daten[1024]; char daten0[1024]; strftime(date,1024,"%y.%m.%d %H:%M",localtime(&timei)); strftime(daten,1024,"%H:%M",localtime(&timen)); strftime(daten0,1024,"%H:%M",localtime(&timen0)); long ii = i; if ( n - i < n/10 ) ii = i - n; time_t dayn = (timen - timei)/86400; time_t dayn0 = (timen0 - timei)/86400; ostream & os = generator()->log(); if ( dayn <= 0 && dayn0 <= 0 ) { os << date << " " << setw(8) << ii << "/" << setw(9); os.setf(ios::left, ios::adjustfield); os << n << " etc: " << daten << "["; os.setf(ios::right, ios::adjustfield); os << setw(2) << ieff << "%] " << daten0 << "[" << ieff0 << "%] " << host << ":" << pid << endl << flush; } else { os << date << " " << setw(8) << ii << "/" << setw(9); os.setf(ios::left, ios::adjustfield); os << n << " etc: " << dayn << "+" << daten << "["; os.setf(ios::right, ios::adjustfield); os << setw(2) << ieff << "%] " << dayn0 << "+" << daten0 << "[" << ieff0 << "%] " << host << ":" << pid << endl << flush; } fcpu1 = fcpui; time1 = timei; } double ProgressLog::fclock() { struct tms tmsbuf; times(&tmsbuf); double d = tmsbuf.tms_utime+tmsbuf.tms_stime+tmsbuf.tms_cutime+tmsbuf.tms_cstime; d /= sysconf(_SC_CLK_TCK); return d; } bool ProgressLog::statusTime(long i, long n) const { if ( i <= 0 ) return false; if ( i == n ) return true; if ( i > n/2 ) i = n-i; while ( i >= 10 && !(i%10) ) i /= 10; if ( i == 1 || i == 2 || i == 5 ) return true; if ( secstep > 0 && time(0) > time1 + secstep ) return true; return false; } IBPtr ProgressLog::clone() const { return new_ptr(*this); } IBPtr ProgressLog::fullclone() const { return new_ptr(*this); } void ProgressLog::doinitrun() { AnalysisHandler::doinitrun(); fcpu0 = fcpu1 = fclock(); time0 = time1 = time(0); char name[1024]; gethostname(name,1024); host = name; if ( host.find(".") != string::npos ) host = host.substr(0, host.find(".")); pid = getpid(); char date[1024]; strftime(date,1024,"%y.%m.%d %H:%M",localtime(&time0)); ostream & os = generator()->log(); os << date << " 0/" << setw(9); os.setf(ios::left, ios::adjustfield); os << generator()->N(); os.setf(ios::right, ios::adjustfield); os << " Initializing... " << host << ":" << pid << endl << flush; } void ProgressLog::persistentOutput(PersistentOStream & os) const { os << secstep; } void ProgressLog::persistentInput(PersistentIStream & is, int) { is >> secstep; } ClassDescription ProgressLog::initProgressLog; // Definition of the static class description member. void ProgressLog::Init() { static ClassDocumentation documentation ("The ProgressLog class will not perform an actual analysis. Instead" " it will write out a progress status on the standard log file. By" " default it will write on event 1, 2, 5, 10, 20, 50, ... etc. But" " optionally it can in addition also write out every given number of" " seconds.\n\n" "The status line which is written out contains the current date " "and time, the number of events processed so far and the total number" "of events to be generated, two estimates of the time of completion " "(one based on the current cpu usage and one based on the average " "cpu usage [the usage is given in brackets]), and the host on which " "the program is running, together with its process number."); static Parameter interfaceInterval ("Interval", "Besides the standard intervals, also write a status line every " "given number of seconds.", &ProgressLog::secstep, 0, 0, 0, true, false, Interface::lowerlim); interfaceInterval.setHasDefault(false); } thepeg-1.8.0.orig/Analysis/Makefile.am0000644000175000017500000000447011747772425015773 0ustar sunsunAIDAWRAPPERS = LWH/AIAnalysisFactory.h LWH/AIAxis.h LWH/AIHistogram1D.h LWH/AIHistogram2D.h \ LWH/AIHistogramFactory.h LWH/AITree.h LWH/AITreeFactory.h \ LWH/AIManagedObject.h LWH/AIDataPoint.h LWH/AIDataPointSet.h \ LWH/AIDataPointSetFactory.h LWH/AIMeasurement.h LWHHEADERS = LWH/AnalysisFactory.h LWH/Axis.h LWH/Tree.h LWH/TreeFactory.h \ LWH/Histogram1D.h LWH/Histogram2D.h LWH/HistogramFactory.h LWH/ManagedObject.h \ LWH/VariAxis.h LWH/DataPoint.h LWH/DataPointSet.h LWH/DataPointSetFactory.h \ LWH/Measurement.h mySOURCES = LWHFactory.cc pkglib_LTLIBRARIES = LWHFactory.la XSecCheck.la ProgressLog.la if HAVE_RIVET DOCFILES = RivetAnalysis.h pkglib_LTLIBRARIES += RivetAnalysis.la RivetAnalysis_la_CPPFLAGS = $(RIVETINCLUDE) $(HEPMCINCLUDE) $(AM_CPPFLAGS) RivetAnalysis_la_LIBADD = $(HEPMCLIBS) $(RIVETLIBS) RivetAnalysis_la_SOURCES = RivetAnalysis.cc $(INCLUDEFILES) RivetAnalysis_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) else DOCFILES = $(AIDAWRAPPERS) $(LWHHEADERS) endif DOCFILES += LWHFactory.h INCLUDEFILES = $(DOCFILES) LWHFactory_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) LWHFactory_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LWHFactory_la_CPPFLAGS = $(AM_CPPFLAGS) $(LWHINCLUDE) XSecCheck_la_SOURCES = XSecCheck.cc XSecCheck.h XSecCheck_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ProgressLog_la_SOURCES = ProgressLog.cc ProgressLog.h ProgressLog_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) noinst_LTLIBRARIES = libThePEGHist.la libThePEGHist_la_SOURCES = \ FactoryBase.cc FactoryBase.fh FactoryBase.h AIDA_helper.h libThePEGHist_la_CPPFLAGS = $(AM_CPPFLAGS) $(LWHINCLUDE) if HAVE_HEPMC pkglib_LTLIBRARIES += HepMCAnalysis.la HepMCAnalysis_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) HepMCAnalysis_la_SOURCES = HepMCFile.h HepMCFile.cc HepMCAnalysis_la_CPPFLAGS = $(AM_CPPFLAGS) $(HEPMCINCLUDE) HepMCAnalysis_la_LIBADD = $(HEPMCLIBS) endif pkglib_LTLIBRARIES += GraphvizPlot.la GraphvizPlot_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GraphvizPlot_la_SOURCES = GraphvizPlot.h GraphvizPlot.cc LWH.tgz: $(AIDAWRAPPERS) $(LWHHEADERS) tar czf LWH.tgz $(AIDAWRAPPERS) $(LWHHEADERS) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Analysis/GraphvizPlot.cc0000644000175000017500000000516311747772425016677 0ustar sunsun// -*- C++ -*- // // Graphviz.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Graphviz class. // #include "GraphvizPlot.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/EventRecord/StandardSelectors.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; void GraphvizPlot::dofinish() { AnalysisHandler::dofinish(); if (! _quiet ) cout << "\nGraphvizPlot: plots can be generated like this:\n" << "GraphvizPlot: 'dot -Tsvg " << generator()->filename() << '-' << name() << '-' << _eventNumber << ".dot > plot.svg'\n"; } void GraphvizPlot::analyze(tEventPtr event, long, int, int) { if (event->number() != _eventNumber) return; // prepare dot file ostringstream fname; fname << generator()->filename() << '-' << name() << '-' << event->number() << ".dot"; ofstream hepmcdotfile(fname.str().c_str()); printGraphviz(hepmcdotfile, event); hepmcdotfile.close(); } void GraphvizPlot::persistentOutput(PersistentOStream & os) const { os << _eventNumber << _quiet; } void GraphvizPlot::persistentInput(PersistentIStream & is, int) { is >> _eventNumber >> _quiet; } ClassDescription GraphvizPlot::initGraphvizPlot; // Definition of the static class description member. void GraphvizPlot::Init() { static ClassDocumentation documentation ("There is no documentation for the GraphvizPlot class"); static Parameter interfaceEventNumber ("EventNumber", "The number of the event that should be drawn.", &GraphvizPlot::_eventNumber, 1, 1, 1, false, false, Interface::lowerlim); interfaceEventNumber.setHasDefault(false); static Switch interfaceQuiet ("Quiet", "Prevent GraphvizPlot from outputing instructions for how to generate " "the actual graph.", &GraphvizPlot::_quiet, false, true, false); static SwitchOption interfaceQuietVerbose (interfaceQuiet, "Verbose", "Allow output.", false); static SwitchOption interfaceQuietQuiet (interfaceQuiet, "Quiet", "Prevent output.", true); interfaceQuiet.setHasDefault(false); } thepeg-1.8.0.orig/aclocal.m40000644000175000017500000011454611756366731014021 0ustar sunsun# generated automatically by aclocal 1.12 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, # Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.12' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.12], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.12])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 1 # AM_PROG_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) ]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 18 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 7 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Copyright (C) 2003-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PROG_MKDIR_P # --------------- # Check for 'mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2012 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 3 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of '-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/ax_compiler_vendor.m4]) m4_include([m4/hepmc.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/rivet.m4]) m4_include([m4/thepeg.m4]) m4_include([m4/vl_readline.m4]) m4_include([m4/zlib.m4]) thepeg-1.8.0.orig/Handlers/0000755000175000017500000000000011756460366013705 5ustar sunsunthepeg-1.8.0.orig/Handlers/ACDCSampler.h0000644000175000017500000002216411747772425016103 0ustar sunsun// -*- C++ -*- // // ACDCSampler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ACDCSampler_H #define ThePEG_ACDCSampler_H // This is the declaration of the ACDCSampler class. #include "ThePEG/Handlers/SamplerBase.h" #include "ThePEG/ACDC/ACDCGen.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "ThePEG/Repository/RandomGenerator.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Utilities/SimplePhaseSpace.xh" // #include "ACDCSampler.fh" // #include "ACDCSampler.xh" namespace ThePEG { /** * This class inherits from SampleBase and implements * the Auto Compensating Divide-and-Conquer phase space generator, * ACDCGen. * * @see \ref ACDCSamplerInterfaces "The interfaces" * defined for ACDCSampler. * @see ACDCGen */ class ACDCSampler: public SamplerBase { public: /** Typedef the underlying ACDCGen class. */ typedef ACDCGenerator::ACDCGen SamplerType; /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ACDCSampler() : theEps(100*Constants::epsilon), theMargin(1.1), theNTry(1000) {} /** * The copy constructor. We don't copy theSampler. */ ACDCSampler(const ACDCSampler & x) : SamplerBase(x), theSampler(), theEps(x.theEps), theMargin(x.theMargin), theNTry(x.theNTry) {} /** * The destructor. */ virtual ~ACDCSampler(); //@} public: /** @name Virtual functions needed for SamplerBase */ //@{ /** * Initialize the the sampler, possibly doing presampling of the * phase space. */ virtual void initialize(); /** * Generarate a new phase space point and return a weight associated * with it. This weight should preferably be 1. */ virtual double generate(); /** * ACDCSampler is able to sample several different functions * separately. This function returns the last chosen * function. */ virtual int lastBin() const; /** * Reject the last chosen phase space point. */ virtual void rejectLast(); /** * Return the total integrated cross section determined from the * Monte Carlo sampling so far. */ virtual CrossSection integratedXSec() const; /** * Return the error on the total integrated cross section determined * from the Monte Carlo sampling so far. */ virtual CrossSection integratedXSecErr() const; /** * Return the overestimated integrated cross section. */ virtual CrossSection maxXSec() const; /** * Return the sum of the weights returned by generate() so far (of * the events that were not rejeted). */ virtual double sumWeights() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The actual sampler object. */ SamplerType theSampler; /** * The smallest possible division allowed. */ double theEps; /** * The factor controlling the loss of efficiency when compensating. */ double theMargin; /** * The number of points to use to find initial average. */ int theNTry; protected: /** @cond EXCEPTIONCLASSES */ /** Exception class used by ACDCSampler if the undelying ACDCGen was still in a compensating mode when the run was finished */ struct ACDCStillCompensating: public Exception {}; /** Exception class used by ACDCSampler if a StandardEventHandler was not able to produce a non-zero cross section. */ struct EventInitNoXSec: public InitException {}; /** Exception class used if ACDCSampler was not able to produce a phase space point within the maximum allowed number of attempts. */ struct EventLoopException: public Exception {}; /** @endcond */ private: /** * Describe a concrete class with persistent data. */ static ClassDescription initACDCSampler; /** * Private and non-existent assignment operator. */ ACDCSampler & operator=(const ACDCSampler &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of ACDCSampler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ACDCSampler. */ typedef SamplerBase NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::ACDCSampler"; } /** Return the name of the shared library to be loaded to get * access to this class and every other class it uses * (except the base class). */ static string library() { return "ACDCSampler.so"; } }; /** @endcond */ } namespace ACDCGenerator { /** @cond TRAITSPECIALIZATIONS */ /** Specialized Traits class to define the interface to the * StandardEventHandler object to be sampled by ACDCGen. */ template <> struct ACDCFncTraits: public ACDCTraitsType { /** Convenient typdef. */ typedef ThePEG::tStdEHPtr tStdEHPtr; /** * Call a function to be sampled by ACDCGen. * @return (*f)(x). */ static inline double value(const tStdEHPtr & eh, const DVector & x) { using namespace ThePEG::Units; try { return eh->dSigDR(x)/nanobarn; } catch ( ThePEG::ImpossibleKinematics & v ) { breakThePEG(); } catch ( std::exception & e ) { breakThePEG(); } catch ( ... ) { breakThePEG(); } return 0.0; } }; /** Specialized Traits class to inform ACDCGen how to use the static UseRandom class. */ template <> struct ACDCRandomTraits: public ACDCTraitsType { /** Convenient typedef. */ typedef ThePEG::UseRandom UseRandom; /** * Return a flat random number in the interval ]0,1[. */ static inline double rnd(UseRandom *) { return UseRandom::rnd(); } /** * Return a flat random number in the interval ]\a xl,\a xu[. */ static inline double rnd(UseRandom * r, double xl, double xu) { return xl + (xu - xl)*rnd(r); } /** * Generate a set of random numbers. * @param r the random generator. * @param l an input iterator giving the lower limit of the interval * of the first requested random number. * @param lend an input iterator marking the end of the range of * requested random numbers. * @param u an input iterator giving the upper limit of the interval * of the first requested random number. * @param res the ouput iterator used to output the random numbers. */ template static inline void rnd(UseRandom * r, InputIterator l, InputIterator lend, InputIterator u, OutputIterator res) { for ( ; l != lend; ++l ) *res++ = *l + (*u++ - *l)*rnd(r); } /** * Generate \a D random numbers. The numbers are put into the * OutputIterator \a res. */ template static inline void rnd(UseRandom * r, int D, OutputIterator res) { for ( int d = 0; d < D; ++d ) *res++ = rnd(r); } /** * Return true with probability \a x. */ static inline bool rndBool(UseRandom, double x) { return UseRandom::rndbool(x); } /** * Return true with probability \a x(\a x + \a y). */ static inline bool rndBool(UseRandom *, double x, double y) { return UseRandom::rndbool(x, y); } /** * Return a random integer in the interval [0,\a x[. */ static inline long rndInt(UseRandom *, long x) { return UseRandom::irnd(x); } }; /** @endcond */ } #endif /* ThePEG_ACDCSampler_H */ thepeg-1.8.0.orig/Handlers/StandardEventHandler.h0000644000175000017500000003462711747772425020134 0ustar sunsun// -*- C++ -*- // // StandardEventHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardEventHandler_H #define ThePEG_StandardEventHandler_H // This is the declaration of the StandardEventHandler class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Repository/Strategy.fh" #include "ThePEG/Handlers/SamplerBase.fh" #include "ThePEG/PDF/PartonBin.fh" #include "ThePEG/MatrixElement/MEBase.fh" #include "SubProcessHandler.fh" #include "StandardXComb.fh" #include "StandardEventHandler.fh" #include namespace ThePEG { /** * The StandardEventHandler class is the main class for generating simple * events without overlayed collisions. It is derived from the * basic EventHandler class. * * Besides the standard doinit() method, the StandardEventHandler needs to be * separately initialized with the initialize() method. In the * dofinish() method statistics is written out to the EventGenerators * default output file. * * @see \ref StandardEventHandlerInterfaces "The interfaces" * defined for StandardEventHandler. * @see EventHandler * @see EventGenerator * @see Event * */ class StandardEventHandler: public EventHandler { public: /** A vector of SubProcessHandlers. */ typedef vector SubHandlerList; /** A weighted list of pointers to StandardXComb objects. */ typedef Selector XSelector; /** A vector of pointers to StandardXComb objects. */ typedef vector XVector; /** A vector of cross sections. */ typedef vector XSVector; /** Map of pointers to StandardXComb objects indexed by pointers to * the corresponding MEBase object. */ typedef map MEXMap; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ StandardEventHandler(); /** * Destructor. */ virtual ~StandardEventHandler(); //@} public: /** * Initialize this event handler and all related objects needed to * generate events. */ virtual void initialize(); /** * Write out accumulated statistics about intergrated cross sections * and stuff. */ virtual void statistics(ostream &) const; /** * Histogram scale. A histogram bin which has been filled with the * weights associated with the Event objects should be scaled by * this factor to give the correct cross section. */ virtual CrossSection histogramScale() const; /** * The estimated total integrated cross section of the processes * generated in this run. * @return 0 if no integrated cross section could be estimated. */ virtual CrossSection integratedXSec() const; /** * The estimated error int total integrated cross section of the * processes generated in this run. * @return 0 if no integrated cross section error could be estimated. */ virtual CrossSection integratedXSecErr() const; /** * The estimated total integrated cross section of the processes * generated in this run, excluding reweighting. * @return 0 if no integrated cross section could be estimated. */ virtual CrossSection integratedXSecNoReweight() const; /** * The estimated error int total integrated cross section of the * processes generated in this run, excluding reweighting. * @return 0 if no integrated cross section error could be estimated. */ virtual CrossSection integratedXSecErrNoReweight() const; /** @name Functions used for the actual generation */ //@{ /** * Return the cross section for the chosen phase space point. * @param r a vector of random numbers to be used in the generation * of a phase space point. */ virtual CrossSection dSigDR(const vector & r); /** * Generate an event. */ virtual EventPtr generateEvent(); /** * Continue generating an event if the generation has been stopped * before finishing. */ virtual EventPtr continueEvent(); /** * Reweight a partially generated event. */ void reweight(double factor) const; /** * Return the vector of StandardXComb objects. */ const XVector & xCombs() const { return theXCombs; } /** * Change the XComb object */ virtual void select(tXCombPtr newXComb); /** * Return the boost needed to transform the current event from the * CMS system to the lab system. */ const LorentzRotation & currentEventBoost() const { return theCurrentEventBoost; } //@} /** @name Simple access functions */ //@{ /** * Return a reference to the Cuts of this * EventHandler. Note that these cuts may be overridden by the * SubProcess chosen. */ tCutsPtr cuts() const { return theCuts; } /** * Return the number of separate bins of StandardXComb objects to * sample. */ int nBins() const; /** * Return the number of phase space dimensions needed for the * sampling of indicated bin of StandardXComb objects. */ int maxDim(int bin) const { return theMaxDims[bin]; } /** * Return true if this event handler should produce weightes events */ bool weighted() const { return weightedEvents; } /** * The number of phase space dimensions used by the luminosity * function. */ int lumiDim() const { return theLumiDim; } /** * The number of dimensions of the basic phase space to generate * sub-processes in for a given bin of StandardXComb objects. */ int nDim(int bin) const { return lumiDim() + maxDim(bin); } //@} protected: /** * Generate a phase space point and return the corresponding cross * section. Is called from sSigDR(const vector &). * @param ll a pair of doubles giving the logarithms of the (inverse * energy fractions of the maximum CMS energy of the incoming * particles. * @param maxS the maximum squared CMS energy of the incoming particles. * @param ibin the preselected bin of StandardXComb objects to choose * sub-process from * @param nr the number of random numbers availiable in \a r. * @param r an array of random numbers to be used to generate a * phase-space point. */ virtual CrossSection dSigDR(const pair ll, Energy2 maxS, int ibin, int nr, const double * r); /** * Select an StandardXComb. Given a preselected bin, \a ibin of * StandardXComb objects pick one to generate the corresponding * sub-process with the given \a weight. */ tStdXCombPtr select(int bin, double & weight); /** * Create and add StandardXComb objects. * * @param maxEnergy the maximum CMS energy of the incoming particles. * @param sub a pointer to the SubProcessHandler object. * @param extractor a pointer to the PartonExtractor object. * @param cuts a pointer to the Cuts object. * @param ckkw a pointer to a CascadeHandler to be used for CKKW reweighting. * @param me a pointer to the MEBase object. * @param pBins a pair of PartonBins describing the * partons extracted from the particles * @param allPBins all available parton bins at the given energy */ void addME(Energy maxEnergy, tSubHdlPtr sub, tPExtrPtr extractor, tCutsPtr cuts, tCascHdlPtr ckkw, tMEPtr me, const PBPair & pBins, const PartonPairVec& allPBins); /** * For the sub-procss and phase-space point selected in the previous * call to dSigDR, produce the first step of an actual Collision. */ tCollPtr performCollision(); /** * Initialize groups of StepHandlers. This overrides * the method in the EventHandler, and the * StepHandlers given in the currently selected * SubProcess take precedence over the ones specified in the * EventHandler sub class. */ virtual void initGroups(); /** * Return the boost needed to transform the current collision from * the CMS system to the lab system. By default this is the unit * transformation, but an EventHandler derived from this class may * override it. */ LorentzRotation & currentEventBoost() { return theCurrentEventBoost; } /** * Set information about the current sub-process. */ void setScale(Energy2); /** * Return the vector of StandardXComb objects. */ XVector & xCombs() { return theXCombs; } /** * Return the vector of cross sections. */ const XSVector & xSecs() const { return theXSecs; } /** * Return the vector of cross sections. */ XSVector & xSecs() { return theXSecs; } /** * Return the strategy to be used when sampling different StandardXComb * objects. * @return 0 if all StandardXComb objects are sampled together. 1 if * all StandardXComb objects which have the same matrix element object are * sampled together. 2 if all StandardXComb objects are sampled separately. */ int binStrategy() const { return theBinStrategy; } private: /** * Access the list of sub-process handlers. */ const SubHandlerList & subProcesses() const { return theSubProcesses; } /** * Access the list of sub-process handlers. */ SubHandlerList & subProcesses() { return theSubProcesses; } public: /** @name Standard Interfaced functions. */ //@{ /** * Check sanity of the object during the setup phase. */ virtual void doupdate(); /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Writes out statistics on the generation. */ virtual void dofinish(); //@} /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** * Reject a (partially) generated event. * @param weight the weight given for the event. */ void reject(double weight); /** * Return the sampler assigned to this event handler. */ tSamplerPtr sampler() { return theSampler; } /** * Return the sampler assigned to this event handler. */ tcSamplerPtr sampler() const { return theSampler; } private: /** * The first of the incoming particle types. */ PDPtr theIncomingA; /** * The second of the incoming particle types. */ PDPtr theIncomingB; /** * The list of SubProcessHandlers. */ SubHandlerList theSubProcesses; /** * The kinematical cuts used for this collision handler. */ CutsPtr theCuts; /** * The StandardXComb objects. */ XVector theXCombs; /** * The (incrementally summed) cross sections associated with the * StandardXComb objects for the last selected phase space point. */ XSVector theXSecs; /** * The strategy to be used when sampling different StandardXComb * objects. 0 means all StandardXComb objects are sampled * together. 1 means all StandardXComb objects which have the same * matrix element object are sampled together. 2 means all * StandardXComb objects are sampled separately. */ int theBinStrategy; /** * The map used to store all XBins with the same matrix element for * option 1 in theBinStrategy. */ MEXMap theMEXMap; /** * The number of degrees of freedom needed to generate the phase * space for the different bins. */ vector theMaxDims; /** * The boost needed to transform the current collision from the CMS * system to the lab system. */ LorentzRotation theCurrentEventBoost; /** * True if this event handler should produce weightes events */ bool weightedEvents; /** * The phase space sampler responsible for generating phase space * points according to the cross section given by this event * handler. */ SamplerPtr theSampler; /** * The number of phase space dimensions used by the luminosity * function. */ int theLumiDim; /** * Standard Initialization object. */ static ClassDescription initStandardEventHandler; /** * Helper function for the interface. */ void setIncomingA(PDPtr); /** * Helper function for the interface. */ void setIncomingB(PDPtr); protected: /** @cond EXCEPTIONCLASSES */ /** * Exception class used by EventHandler when a StepHandler of the * wrong class was added. */ class StandardEventHandlerUpdateException: public UpdateException {}; /** * Exception class used by EventHandler when a StepHandler of the * wrong class was added. */ class StandardEventHandlerInitError: public Exception {}; /** @endcond */ private: /** * Private and non-existent assignment operator. */ const StandardEventHandler & operator=(const StandardEventHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of StandardEventHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of StandardEventHandler. */ typedef EventHandler NthBase; }; /** * The following template specialization informs ThePEG about the name * of theEventHandler class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::StandardEventHandler"; } }; /** @endcond */ } #endif /* ThePEG_StandardEventHandler_H */ thepeg-1.8.0.orig/Handlers/XComb.cc0000644000175000017500000001404411747772425015231 0ustar sunsun// -*- C++ -*- // // XComb.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the XComb class. // #include "XComb.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Repository/EventGenerator.h" using namespace ThePEG; XComb::XComb() : theLastS(Energy2()), theLastSHat(Energy2()), theLastY(0.0), theLastP1P2(make_pair(1.0, 1.0)), theLastL1L2(make_pair(1.0, 1.0)), theLastX1X2(make_pair(1.0, 1.0)), theLastE1E2(make_pair(0.0, 0.0)), theLastScale(ZERO), theLastAlphaS(-1.0), theLastAlphaEM(-1.0), theMaxEnergy(ZERO) {} XComb:: XComb(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts) : theEventHandler(newEventHandler), thePartonExtractor(newExtractor), theCKKW(newCKKW), theCuts(newCuts), theParticles(inc), thePartonBins(newPartonBins), theLastS(Energy2()), theLastSHat(Energy2()), theLastY(0.0), theLastP1P2(make_pair(1.0, 1.0)), theLastL1L2(make_pair(1.0, 1.0)), theLastX1X2(make_pair(1.0, 1.0)), theLastE1E2(make_pair(0.0, 0.0)), theLastScale(ZERO), theLastAlphaS(-1.0), theLastAlphaEM(-1.0), theMaxEnergy(newMaxEnergy) { thePartons = cPDPair(partonBins().first->parton(), partonBins().second->parton()); thePartonBinInstances.first = new_ptr(PartonBinInstance(partonBins().first)); thePartonBinInstances.second = new_ptr(PartonBinInstance(partonBins().second)); theParticleBins.first = thePartonBins.first->getFirst(); theParticleBins.second = thePartonBins.second->getFirst(); } XComb::~XComb() {} void XComb::clean() { theLastParticles = PPair(); theLastPartons = PPair(); theLastS = theLastSHat = theLastScale = ZERO; theLastAlphaS = theLastAlphaEM = -1.0; theLastY = 0.0; theLastP1P2 = theLastL1L2 = theLastX1X2 = theLastE1E2 = DPair(0.0, 0.0); theSub = SubProPtr(); thePartonBinInstances = PBIPair(); } void XComb::prepare(const PPair & inc) { clean(); createPartonBinInstances(); theLastParticles = inc; pExtractor()->prepare(partonBinInstances()); } void XComb::subProcess(tSubProPtr sp) { theSub = sp; } void XComb::setPartonBinInfo() { partonBinInstances().first->getFirst()->parton(lastParticles().first); partonBinInstances().second->getFirst()->parton(lastParticles().second); } void XComb::createPartonBinInstances() { thePartonBinInstances.first = new_ptr(PartonBinInstance(partonBins().first)); thePartonBinInstances.second = new_ptr(PartonBinInstance(partonBins().second)); } void XComb::setPartonBinInstances(PBIPair pbip, Energy2 scale) { clean(); thePartonBinInstances = pbip; theLastParticles = PPair(pbip.first->getFirst()->parton(), pbip.second->getFirst()->parton()); theLastPartons = PPair(pbip.first->parton(), pbip.second->parton()); lastS((lastParticles().first->momentum() + lastParticles().second->momentum()).m2()); lastSHat((lastPartons().first->momentum() + lastPartons().second->momentum()).m2()); lastP1P2(make_pair(0.0, 0.0)); lastX1X2(make_pair(lastPartons().first->momentum().plus()/ lastParticles().first->momentum().plus(), lastPartons().second->momentum().minus()/ lastParticles().second->momentum().minus())); lastY(log(lastX1()/lastX2())*0.5); lastScale(scale); } void XComb::lastL1L2(pair ll) { theLastL1L2 = ll; theLastX1X2 = make_pair(exp(-ll.first), exp(-ll.second)); theLastE1E2 = make_pair(Math::exp1m(-ll.first), Math::exp1m(-ll.second)); } void XComb::lastX1X2(pair xx) { theLastX1X2 = xx; theLastL1L2 = make_pair(-log(xx.first), -log(xx.second)); theLastE1E2 = make_pair(1.0 - xx.first, 1.0 - xx.second); } void XComb::lastE1E2(pair ee) { theLastE1E2= ee; theLastL1L2 = make_pair(-Math::log1m(ee.first), -Math::log1m(ee.second)); theLastX1X2 = make_pair(1.0 - ee.first, 1.0 - ee.second); } tPBIPtr XComb::partonBinInstance(tcPPtr p) const { return pExtractor()->partonBinInstance(p); } void XComb::Init() {} void XComb::persistentOutput(PersistentOStream & os) const { os << theEventHandler << thePartonExtractor << theCKKW << theCuts << theParticles << thePartons << thePartonBins << theParticleBins << thePartonBinInstances << theLastParticles << theLastPartons << ounit(theLastS, GeV2) << ounit(theLastSHat, GeV2) << theLastY << theLastP1P2 << theLastL1L2 << theLastX1X2 << theLastE1E2 << ounit(theLastScale, GeV2) << theLastAlphaS << theLastAlphaEM << ounit(theMaxEnergy, GeV) << theMEInfo << theSub; } void XComb::persistentInput(PersistentIStream & is, int) { is >> theEventHandler >> thePartonExtractor >> theCKKW >> theCuts >> theParticles >> thePartons >> thePartonBins >> theParticleBins >> thePartonBinInstances >> theLastParticles >> theLastPartons >> iunit(theLastS, GeV2) >> iunit(theLastSHat, GeV2) >> theLastY >> theLastP1P2 >> theLastL1L2 >> theLastX1X2 >> theLastE1E2 >> iunit(theLastScale, GeV2) >> theLastAlphaS >> theLastAlphaEM >> iunit(theMaxEnergy, GeV) >> theMEInfo >> theSub; } ClassDescription XComb::initXComb; thepeg-1.8.0.orig/Handlers/ClusterCollapser.h0000644000175000017500000002237311747772425017355 0ustar sunsun// -*- C++ -*- // // ClusterCollapser.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ClusterCollapser_H #define ThePEG_ClusterCollapser_H // This is the declaration of the ClusterCollapser class. #include "ThePEG/Handlers/StepHandler.h" #include "ThePEG/Handlers/FlavourGenerator.h" #include "ThePEG/EventRecord/ColourSinglet.h" #include "ClusterCollapser.fh" // #include "ClusterCollapser.xh" namespace ThePEG { /** * ClusterCollapser is a general StepHandler which can be called * anywhere in the event generation (typically as a pre-handler to the * hadronization or a post-hadnler to the cascade) to find colour-less * clusters of partons which are deemed to have to small invariant * mass to be hadronized in the normal way. Instead these clusters are * allowed to collapse into hadrons. Possible energy imbalance du to * the clustering is compensated by shifting the momenta of nearby * particles. * * @see \ref ClusterCollapserInterfaces "The interfaces" * defined for ClusterCollapser. */ class ClusterCollapser: public StepHandler { public: /** Declare a pointer to a FlavourGenerator object. */ typedef Ptr::pointer FlavGenPtr; /** Declare a multimap of singlets indexed by their mass. */ typedef multimap SingletMap; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ClusterCollapser() : theEnergyCut(1.0*GeV), theNTry2(2), errorlevel(Exception::eventerror), pStrange(1.0/3.0) {} /** * The destructor. */ virtual ~ClusterCollapser(); //@} public: /** @name Virtual functions required by the StepHandler class. */ //@{ /** * The main function called by the EventHandler class to * perform a step. This function simply calls the collapse() function. * @param eh the EventHandler in charge of the Event generation. * @param tagged if not empty these are the only particles which should * be considered by the StepHandler. * @param hint a Hint object with possible information from previously * performed steps. * @throws Veto if the StepHandler requires the current step to be discarded. * @throws Stop if the generation of the current Event should be stopped * after this call. * @throws Exception if something goes wrong. */ virtual void handle(EventHandler & eh, const tPVector & tagged, const Hint & hint); //@} /** * Perform all necessary collapses. Return the uncollapsed clusters. */ virtual vector collapse(tPVector tagged, tStepPtr newstep); /** * Go through the tagged partons and extract all colour singlet * combination of partons. Order them in invariant mass (minus the * constituent masses of the partons). */ virtual SingletMap getSinglets(const tPVector & tagged) const; /** * If a singlet contains at least one diquark and a junction, split * the diquark and split off a new colour singlet. */ virtual ColourSinglet splitDiQuarkJunction(ColourSinglet & cs, tStepPtr newStep) const; /** * If a singlet contains a simple string with diquarks in both ends, * split them into quarks and split off a new colour singlet. */ virtual ColourSinglet splitDiDiQuark(ColourSinglet & cs, tStepPtr newStep) const; /** * Returns true iff the given singlet contains a junction and at * least one diquark. */ static bool diQuarkJunction(const ColourSinglet & cs); /** * Returns true iff the given singlet contains one string piece with * diquarks in both ends. */ static bool diDiQuark(const ColourSinglet & cs); /** * If the invariant mass of a cluster, minus the constituent masses * of its partons is below this cut, it will be collapsed into one * or two particles. */ Energy cut() const { return theEnergyCut; } /** * The number of attempts to collapse a cluster into two particles, * before it is collapsed into one particle. */ int nTry2() const { return theNTry2; } /** * Return the invariant mass of a cluster minus the constituent * masses of its partons. */ static Energy mass(const ColourSinglet & cl); /** * Insert a ColourSinglet object in a SingletMap. */ static void insert(SingletMap & mmap, const ColourSinglet & cl); /** * Pick a random flavour. Default version picks u,d or s with ratio * 3:3:1. */ virtual tcPDPtr pickFlavour() const; protected: /** * Perform the actual collapse of a cluster into one hadron. Add * the produced hadron to the given step as decay products of the * partons in the cluster. The \a tagged particles are used for * momentum compensation. */ virtual void collapse(tStepPtr newStep, const ColourSinglet & cs, const tPVector & tagged) const; /** * Perform the actual collapse of a cluster into two hadrons. Add * the produced hadrons to the given step as decay products of the * partons in the cluster. The \a tagged particles are used for * momentum compensation. @return false if the collapse failed in * some way. */ virtual bool collapse2(tStepPtr newStep, const ColourSinglet & cs) const; /** * Get particles for compensation. Look through the \a tagged vector * for particles (which are not in the colour singlet \a cs) which can * be used to compensate momentum when \a cs collapses into a hadron * with mass \a mh. These partons are then copied into the new step so * that their momentum can be changed and then returned. */ virtual tPVector getCompensators(Energy mh, const ColourSinglet & cs, const tPVector & tagged, tStepPtr newStep) const; /** * Return a hadron into which the given cluster may collapse. */ virtual tcPDPtr getHadron(const ColourSinglet & cs) const; /** * Return a pair of hadrons into which the given cluster may collapse. */ virtual tcPDPair getHadrons(const ColourSinglet & cs) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @cond EXCEPTIONCLASSES */ /** Exception class used by ClusterCollapser. */ class ClusterException: public Exception { public: /** Standard constructor. */ ClusterException(const ClusterCollapser & cc) { theMessage << "In ClusterCollapser '" << cc.name() << "': "; } }; /** @endcond */ private: /** * Energy cut. If the invariant mass of a cluster, minus the * constituent masses of its partons is below this cut, it will be * collapsed into one or two particles. */ Energy theEnergyCut; /** * The number of attempts to collapse a cluster into two particles, * before it is collapsed into one particle. */ int theNTry2; /** * The flavour generator object to use to combine quarks and diqurks * into hadrons. */ FlavGenPtr flavGen; protected: /** * How should we respond to errors? 0 means do nothing, ie. the * cluster will not be collapsed, or the momentum will not be * consterved. Otherwise the severity will be what is defined in the * class Exception. */ Exception::Severity errorlevel; /** * The relative probability to produce a s-sbar pair in a split as * compared to a u-ubar or d-dbar pair. */ double pStrange; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initClusterCollapser; /** * Private and non-existent assignment operator. */ ClusterCollapser & operator=(const ClusterCollapser &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of ClusterCollapser. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ClusterCollapser. */ typedef StepHandler NthBase; }; /** * The following template specialization informs ThePEG about the name * of the ClusterCollapser class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::ClusterCollapser"; } }; /** @endcond */ } #endif /* ThePEG_ClusterCollapser_H */ thepeg-1.8.0.orig/Handlers/StandardXComb.h0000644000175000017500000003473311747772425016563 0ustar sunsun// -*- C++ -*- // // StandardXComb.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardXComb_H #define ThePEG_StandardXComb_H // This is the declaration of the StandardXComb class. #include "ThePEG/Config/ThePEG.h" #include "SubProcessHandler.fh" #include "ThePEG/PDF/PartonExtractor.fh" #include "ThePEG/PDF/PartonBin.h" #include "ThePEG/PDF/PartonBinInstance.h" #include "ThePEG/Utilities/VSelector.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Utilities/XSecStat.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "ThePEG/Handlers/SubProcessHandler.fh" #include "StandardXComb.fh" namespace ThePEG { /** * The StandardXComb class inherits from the more general XComb class * which stores all information about the generation of a hard * sub-proces for a given pair of incoming particles, a pair of * extracted partons, etc. This class stores more information related * to thestandard process generation scheme in ThePEG, such as the * PartonExtractor and MEBase object used. It also does some of the * administration of the process generation. * * The main function is dSigDR() which returns the differential cross * section w.r.t. a given vector of random numbers in the interval * ]0,1[. In the initialization this is used to pre-sample the phase * space. In the generation phase it is used to give the cross section * for a phase space point, and if this StandardXComb is chosen the * construct() function is called to generate the actual sub-process. * * @see ParonExtractor * @see MEBase * @see Cuts * @see StdXCombGroup */ class StandardXComb: public XComb { public: /** A vector of DiagramBase objects. */ typedef MEBase::DiagramVector DiagramVector; /** A vector of indices. */ typedef MEBase::DiagramIndex DiagramIndex; /** MEBase needs to be a friend. */ friend class MEBase; public: /** @name Standard constructors and destructors. */ //@{ /** * Standard constructor. */ StandardXComb(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler,tSubHdlPtr newSubProcessHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts, tMEPtr newME, const DiagramVector & newDiagrams, bool mir, tStdXCombPtr newHead = tStdXCombPtr()); /** * Default constructor. */ StandardXComb(); /** * Destructor. */ virtual ~StandardXComb(); /** * Constructor used by MEBase to create a temporary object to store info. */ StandardXComb(tMEPtr me, const tPVector & parts, DiagramIndex i); //@} /** @name Access the assigned objects used in the generation. */ //@{ /** * Return a pointer to the corresponding sub-process handler. May be * null if the standard process generation in ThePEG was not used. */ tcSubHdlPtr subProcessHandler() const { return theSubProcessHandler; } /** * The matrix element to be used. */ tMEPtr matrixElement() const { return theME; } /** * Return a pointer to the head XComb this XComb * depends on. May return NULL, if this is not a * member of a XComb group. */ tStdXCombPtr head() const { return theHead; } /** * Set the head XComb pointer. */ void head(tStdXCombPtr headXC) { theHead = headXC; } //@} /** @name Main functions used for the generation. */ //@{ /** * Try to determine if this subprocess is at all possible. */ virtual bool checkInit(); /** * The number of dimensions of the phase space used to generate this * process. */ int nDim() const { return theNDim; } /** * Return true, if the current configuration will pass the cuts */ bool willPassCuts() const; /** * Generate a phase space point from a vector \a r of \a nr numbers * in the interval ]0,1[ and return the corresponding differential * cross section. */ virtual CrossSection dSigDR(const pair ll, int nr, const double * r); /** * Return the PDF weight used in the last call to dSigDR */ double lastPDFWeight() const { return theLastPDFWeight; } /** * Return the cross section calculated in the last call to dSigDR */ CrossSection lastCrossSection() const { return theLastCrossSection; } /** * Construct a sub-process object from the information available. */ virtual tSubProPtr construct(); //@} /** @name Functions used for collecting statistics. */ //@{ /** * The statistics object for this XComb. */ virtual const XSecStat & stats() const { return theStats; } /** * Select the current event. It will later be rejected with a * probability given by \a weight. */ virtual void select(double weight) { theStats.select(weight); } /** * Accept the current event assuming it was previously selcted. */ virtual void accept() { theStats.accept(); } /** * Reweight a selected and accepted event. */ void reweight(double oldWeight, double newWeight) { theStats.reweight(oldWeight,newWeight); } /** * Reject the current event assuming it was previously accepted. If * weighted events are produced, the \a weight should be the same as * the previous call to select(double). */ virtual void reject(double weight = 1.0) { theStats.reject(weight); } /** * Reset statistics. */ virtual void reset() { theStats.reset(); } //@} /** @name Access information used by the MEBase object. */ //@{ /** * The diagrams used by the matrix element. */ const DiagramVector & diagrams() const { return theDiagrams; } /** * True if the TreeDiagram's for this matrix element should in fact * be mirrored before used to create an actual sub-rocess. */ bool mirror() const { return isMirror; } /** * Return the momenta of the partons to be used by the matrix * element object, in the order specified by the TreeDiagram objects * given by the matrix element. */ const vector & meMomenta() const { return theMEMomenta; } /** * Return the last selected diagram. */ tcDiagPtr lastDiagram() const { return diagrams()[lastDiagramIndex()]; } /** * Return the parton types to be used by the matrix element object, * in the order specified by the TreeDiagram objects given by the * matrix element. */ const cPDVector & mePartonData() const { return theMEPartonData; } /** * Return the index of the last selected diagram. */ DiagramIndex lastDiagramIndex() const { return theLastDiagramIndex; } /** * Get information saved by the matrix element in the calculation of * the cross section to be used later when selecting diagrams and * colour flow. */ const DVector & meInfo() const { return theMEInfo; } /** * Set information saved by the matrix element in the calculation of * the cross section to be used later when selecting diagrams and * colour flow. */ void meInfo(const DVector & info) { theMEInfo = info; } /** * Return the random numbers used to generate the * last phase space point, if the matrix element * requested so. */ const DVector& lastRandomNumbers() const { return theLastRandomNumbers; } /** * Get the last jacobian obtained when generating the kinematics * for the call to dSigHatDR. */ double jacobian() const { return theLastJacobian; } /** * Return the matrix element squared as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ double lastME2() const { return theLastME2; } /** * Return the partonic cross section as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ CrossSection lastMECrossSection() const { return theLastMECrossSection; } /** * Return the PDF weight as calculated * for the last phase space point, if the matrix * element does supply PDF weights. This may optionally * be used by a matrix element for caching. */ double lastMEPDFWeight() const { return theLastMEPDFWeight; } //@} protected: /** * Construct the corresponding SubProcess object if it hasn't been * done before. */ virtual void newSubProcess(bool group = false); /** * Return the momenta of the partons to be used by the matrix * element object, in the order specified by the TreeDiagram objects * given by the matrix element. */ vector & meMomenta() { return theMEMomenta; } /** * Access the random numbers used to generate the * last phase space point, if the matrix element * requested so. */ DVector& lastRandomNumbers() { return theLastRandomNumbers; } /** * Return the parton types to be used by the matrix element object, * in the order specified by the TreeDiagram objects given by the * matrix element. */ cPDVector & mePartonData() { return theMEPartonData; } /** * Set the last selected diagram. */ void lastDiagramIndex(DiagramIndex i) { theLastDiagramIndex = i; } /** * Set the PDF weight used in the last call to dSigDR */ void lastPDFWeight(double w) { theLastPDFWeight = w; } /** * Set the cross section calculated in the last call to dSigDR */ void lastCrossSection(CrossSection s) { theLastCrossSection = s; } /** * Set the last jacobian obtained when generating the kinematics for * the call to dSigHatDR. */ void jacobian(double j) { theLastJacobian = j; } /** * Set the matrix element squared as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ void lastME2(double v) { theLastME2 = v; } /** * Set the partonic cross section as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ void lastMECrossSection(CrossSection v) { theLastMECrossSection = v; } /** * Set the PDF weight as calculated * for the last phase space point, if the matrix * element does supply PDF weights. This may optionally * be used by a matrix element for caching. */ void lastMEPDFWeight(double v) { theLastMEPDFWeight = v; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The corresponding sub-process handler */ tSubHdlPtr theSubProcessHandler; /** * The matrix element to be used. */ tMEPtr theME; /** * Statistics gathering for this XComb. */ XSecStat theStats; /** * The diagrams used by the matrix element. */ DiagramVector theDiagrams; /** * True if the TreeDiagram's for this matrix element should in fact * be mirrored before used to create an actual sub-rocess. */ bool isMirror; /** * The number of dimensions of the phase space used to generate this * process. */ int theNDim; protected: /** * The number of dimensions of the phase space used for each of the * incoming partons. */ pair partonDims; private: /** * The momenta of the partons to be used by the matrix element * object, in the order specified by the TreeDiagram objects given * by the matrix element. */ vector theMEMomenta; /** * The parton types to be used by the matrix element object, in the * order specified by the TreeDiagram objects given by the matrix * element. */ cPDVector theMEPartonData; /** * The last selected tree diagram. */ DiagramIndex theLastDiagramIndex; /** * Information saved by the matrix element in the calculation of the * cross section to be used later when selecting diagrams and colour * flow. */ DVector theMEInfo; /** * The random numbers used to generate the * last phase space point, if the matrix element * requested so. */ DVector theLastRandomNumbers; /** * The PDF weight used in the last call to dSigDR */ double theLastPDFWeight; /** * The cross section calculated in the last call to dSigDR */ CrossSection theLastCrossSection; /** * Save the last jacobian obtained when generating the kinematics for * the call to dSigHatDR. */ double theLastJacobian; /** * The matrix element squared as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ double theLastME2; /** * The partonic cross section as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ CrossSection theLastMECrossSection; /** * The PDF weight as calculated * for the last phase space point, if the matrix * element does supply PDF weights. This may optionally * be used by a matrix element for caching. */ double theLastMEPDFWeight; /** * A pointer to the head XComb this XComb * depends on. May return NULL, if this is not a * member of a XComb group. */ tStdXCombPtr theHead; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStandardXComb; /** * Private and non-existent assignment operator. */ StandardXComb & operator=(const StandardXComb &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * StandardXComb. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of StandardXComb. */ typedef XComb NthBase; }; /** * This template specialization informs ThePEG about the name of the * StandardXComb class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::StandardXComb"; } }; /** @endcond */ } #endif /* ThePEG_StandardXComb_H */ thepeg-1.8.0.orig/Handlers/XComb.h0000644000175000017500000003220611747772425015073 0ustar sunsun// -*- C++ -*- // // XComb.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_XComb_H #define ThePEG_XComb_H // This is the declaration of the XComb class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/PDF/PartonExtractor.fh" #include "ThePEG/PDF/PartonBin.h" #include "ThePEG/PDF/PartonBinInstance.h" #include "ThePEG/Utilities/AnyReference.h" #include "ThePEG/Utilities/VSelector.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Handlers/EventHandler.fh" #include "ThePEG/Cuts/Cuts.fh" namespace ThePEG { /** * The XComb class stores all information about the generation of a * hard sub-proces for a given pair of incoming particles, a pair of * extracted partons, total parton-parton energy squared and a * PartonExtractor object. * * When an event is generated, the objects used in the generation can * be assigned an XComb object for easy acces to the corresponding * information. To facilitate this, the corresponding classes inherits * from the LastXCombInfo class which provides the relefant access * functions. * * @see PartonExtractor * @see Cuts * @see LastXCombInfo */ class XComb: public Base { public: /** @name Standard constructors and destructors. */ //@{ /** * Standard constructor. */ XComb(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts); /** * Default constructor. */ XComb(); /** * Destructor. */ virtual ~XComb(); //@} /** @name Access the assigned objects used in the generation. */ //@{ /** * Return a reference to the corresponding collision handler */ const EventHandler & eventHandler() const { return *theEventHandler; } /** * Return a pointer to the corresponding collision handler */ tEHPtr eventHandlerPtr() const { return theEventHandler; } /** * A pointer to the parton extractor. */ tPExtrPtr pExtractor() const { return thePartonExtractor; } /** * A pointer to the kinematical cuts. */ tCutsPtr cuts() const { return theCuts; } /** * Return a possibly null pointer to a CascadeHandler to be used for * CKKW-reweighting. */ tCascHdlPtr CKKWHandler() const { return theCKKW; } //@} /** @name Access information about incoming particles and partons. */ //@{ /** * The incoming particle types. */ const cPDPair & particles() const { return theParticles; } /** * The incoming parton types. */ const cPDPair & partons() const { return thePartons; } /** * Additional information about the incoming partons. */ const PBPair & partonBins() const { return thePartonBins; } /** * The maximum cm energy for this process. */ Energy maxEnergy() const { return theMaxEnergy; } /** * Returns true if this XComb does not correspond to a proper * subprocess generation. I.e. if we are only generating a partial * event and the incoming particles and partons are not used * explicitly. */ bool empty() const { return !theEventHandler; } //@} /** @name Manipulate and acces information about the last selected phase space point. */ //@{ /** * Reset all saved data about last generated phasespace point; */ void clean(); /** * Set information about currently generated partons. */ void setPartonBinInstances(PBIPair pbis, Energy2 scale); /** * Prepare this XComb for producing a sub-process. */ void prepare(const PPair &); /** * Return the pair of incoming particle instances. */ const PPair & lastParticles() const { return theLastParticles; } /** * Return the pair of incoming parton instances. */ const PPair & lastPartons() const { return theLastPartons; } /** * Set the pair of incoming parton instances. */ void lastPartons(PPair pp) { theLastPartons = pp; } /** * Return the SubProcess object corresponding to the last generated * sub-process. */ tSubProPtr subProcess() const { return theSub; } /** * Set the SubProcess object corresponding to the last generated * sub-process. */ void subProcess(tSubProPtr); /** * Additional information about the incoming partons. */ const PBIPair & partonBinInstances() const { return thePartonBinInstances; } /** * Additional information about the incoming partons. */ PBIPair & partonBinInstances() { return thePartonBinInstances; } /** * Return the corresponding parton bin instance for a given * extracted parton. */ tPBIPtr partonBinInstance(tcPPtr) const; /** * The last generated total energy squared of the incoming particles. */ Energy2 lastS() const { return theLastS; } /** * Set the last generated total energy squared of the incoming * particles. */ void lastS(Energy2 s) { theLastS = s; } /** * The last generated total energy squared of the incoming prtons. */ Energy2 lastSHat() const { return theLastSHat; } /** * Set the last generated total energy squared of the incoming * prtons. */ void lastSHat(Energy2 sh) { theLastSHat = sh; } /** * lastSHat()/lastS(). */ double lastTau() const { return lastSHat()/lastS(); } /** * The last generated rapidity of the hard scattering sub-system. */ double lastY() const { return theLastY; } /** * Set the last generated rapidity of the hard scattering sub-system. */ void lastY(double y) { theLastY = y; } /** * Log of one over the momentum fraction of the first incoming * particle w.r.t. the maximum allowed energy. */ double lastP1() const { return theLastP1P2.first; } /** * Log of one over the momentum fraction of the second incoming * particle w.r.t. the maximum allowed energy. */ double lastP2() const { return theLastP1P2.second; } /** * Set log of one over the momentum fraction of the incoming * particles w.r.t. the maximum allowed energy. */ void lastP1P2(pair pp) { theLastP1P2 = pp; } /** * Log of one over the first incoming parton momentum fraction * w.r.t. the first incoming particle. */ double lastL1() const { return theLastL1L2.first; } /** * Log of one over the second incoming parton momentum fraction * w.r.t. the second incoming particle. */ double lastL2() const { return theLastL1L2.second; } /** * Set log of one over the incoming parton momentum fractions * w.r.t. the incoming particles. */ void lastL1L2(pair); /** * The first incoming parton momentum fraction w.r.t. the * first incoming particle. */ double lastX1() const { return theLastX1X2.first; } /** * The second incoming parton momentum fraction * w.r.t. the second incoming particle. */ double lastX2() const { return theLastX1X2.second; } /** * Set the incoming parton momentum fractions w.r.t. the incoming * particles. */ void lastX1X2(pair); /** * Return 1-lastX1() to highest possible precision for * x\f$\rightarrow\f$ 1. */ double lastE1() const { return theLastE1E2.first; } /** * Return 1-lastX2() to highest possible precision for * x\f$\rightarrow\f$ 1. */ double lastE2() const { return theLastE1E2.second; } /** * Set one minus the incoming parton momentum fractions w.r.t. the * incoming particles. */ void lastE1E2(pair); /** * Get the last chosen scale of the hard scattering. */ Energy2 lastScale() const { return theLastScale; } /** * Set the last chosen scale of the hard scattering. */ void lastScale(Energy2 Q2) { theLastScale = Q2; } /** * Get the \f$\alpha_S\f$ used in the hard scattering. Is negative * if no value has been set. */ double lastAlphaS() const { return theLastAlphaS; } /** * Set the \f$\alpha_S\f$ used in the hard scattering. */ void lastAlphaS(double a) { theLastAlphaS = a; } /** * Get the \f$\alpha_{EM}\f$ used in the hard scattering. Is negative * if no value has been set. */ double lastAlphaEM() const { return theLastAlphaEM; } /** * Set the \f$\alpha_{EM}\f$ used in the hard scattering. */ void lastAlphaEM(double a) { theLastAlphaEM = a; } //@} public: /** * Check for meta information */ bool hasMeta(int id) const { return theMeta.find(id) != theMeta.end(); } /** * Set meta information. */ template void meta(int id, T& ref) { theMeta[id] = AnyReference(ref); } /** * Erase meta information. */ void eraseMeta(int id) { theMeta.erase(id); } /** * Retrieve meta information. */ template T& meta(int id) const { return theMeta.find(id)->second.cast(); } protected: /** * Set the local parton bin info objects for this XComb. */ void setPartonBinInfo(); /** * Create PartonBinInstance objects for this XComb. */ void createPartonBinInstances(); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Set the pair of incoming particle instances. */ void lastParticles(const PPair & p) { theLastParticles = p; } /** * Set information about currently generated partons. */ void resetPartonBinInstances(const PBIPair & newBins) { thePartonBinInstances = newBins; } private: /** * The corresponding collision handler */ tEHPtr theEventHandler; /** * A pointer to the parton extractor. */ tPExtrPtr thePartonExtractor; /** * A pointer to a CascadeHandler to be used for CKKW-reweighting. */ tCascHdlPtr theCKKW; /** * A pointer to the kinematical cuts used. */ tCutsPtr theCuts; /** * The incoming particle types. */ cPDPair theParticles; /** * The incoming parton types. */ cPDPair thePartons; /** * Additional information about the incoming partons. */ PBPair thePartonBins; /** * Additional information about the origins of the incoming partons. */ PBPair theParticleBins; /** * Additional information about the incoming partons. */ PBIPair thePartonBinInstances; /** * The pair of incoming particle instances. */ PPair theLastParticles; /** * The pair of incoming parton instances. */ PPair theLastPartons; /** * The last generated total energy squared of the incoming particles. */ Energy2 theLastS; /** * The last generated total energy squared of the incoming prtons. */ Energy2 theLastSHat; /** * The last rapidity of the sub process, log(x1/x2)/2. */ double theLastY; /** * Log of one over the momentum fraction of the incoming particles. */ DPair theLastP1P2; /** * Log of one over the incoming partons momentum fraction wrt. the * incoming particles. */ DPair theLastL1L2; /** * The incoming partons momentum fraction wrt. the incoming * particles. */ DPair theLastX1X2; /** * 1-lastX1() and 1-lastX2() to highest possible precision for * x\f$\rightarrow\f$ 1. */ DPair theLastE1E2; /** * The last chosen scale of the hard scattering. */ Energy2 theLastScale; /** * The \f$\alpha_S\f$ used in the hard scattering. */ double theLastAlphaS; /** * The \f$\alpha_{EM}\f$ used in the hard scattering. */ double theLastAlphaEM; /** * The maximum cm energy for this process. */ Energy theMaxEnergy; /** * Information saved by the matrix element in the calculation of the * cross section to be used later when selecting diagrams and colour * flow. */ DVector theMEInfo; /** * The SubProcess object corresponding to the last generated * sub-process. */ SubProPtr theSub; /** * The meta information */ map theMeta; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initXComb; /** * Private and non-existent assignment operator. */ XComb & operator=(const XComb &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * XComb. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of XComb. */ typedef Base NthBase; }; /** * This template specialization informs ThePEG about the name of the * XComb class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::XComb"; } }; /** @endcond */ } #endif /* ThePEG_XComb_H */ thepeg-1.8.0.orig/Handlers/AnalysisHandler.cc0000644000175000017500000000674511747772425017313 0ustar sunsun// -*- C++ -*- // // AnalysisHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the AnalysisHandler class. // #include "AnalysisHandler.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/UtilityBase.h" using namespace ThePEG; bool AnalysisHandler::checkHistogramFactory(bool warn) const { if ( generator()->histogramFactory() ) return true; if ( warn ) generator()->logWarning( NoHistFactory() << "No histogram factory was assigned to the " << "EventGenerator, hence no histograms will be produced by " << name() << "." << Exception::warning); return false; } FactoryBase & AnalysisHandler::histogramFactory() { return *(generator()->histogramFactory()); } const FactoryBase & AnalysisHandler::histogramFactory() const { return *(generator()->histogramFactory()); } void AnalysisHandler::normalize(tH1DPtr h, CrossSection unit) const { histogramFactory().normalizeToXSec(h, unit); } void AnalysisHandler::unitNormalize(tH1DPtr h) const { histogramFactory().normalizeToUnity(h); } IBPtr AnalysisHandler::clone() const { return new_ptr(*this); } IBPtr AnalysisHandler::fullclone() const { return new_ptr(*this); } void AnalysisHandler::analyze(tEventPtr event, long, int loop, int state) { if ( loop > 0 || state != 0 || !event ) return; tcEventPtr cevent = event; LorentzRotation r = transform(cevent); tPVector particles; event->selectFinalState(back_inserter(particles)); Utilities::transform(particles, r); analyze(particles, event->weight()); for ( int i = 0, N = theSlaves.size(); i < N; ++i ) theSlaves[i]->analyze(particles, event->weight()); r.invert(); Utilities::transform(particles, r); } LorentzRotation AnalysisHandler::transform(tEventPtr) const { return LorentzRotation(); } LorentzRotation AnalysisHandler::transform(tcEventPtr) const { return LorentzRotation(); } void AnalysisHandler::analyze(const tPVector & particles) { for ( int i = 0, N = particles.size(); i < N; ++i ) analyze(particles[i]); } void AnalysisHandler::analyze(const tPVector & particles, double weight) { analyze(particles); for ( int i = 0, N = particles.size(); i < N; ++i ) analyze(particles[i], weight); } void AnalysisHandler::analyze(tPPtr) {} void AnalysisHandler::analyze(tPPtr, double) {} void AnalysisHandler::persistentOutput(PersistentOStream & os) const { os << theSlaves; } void AnalysisHandler::persistentInput(PersistentIStream & is, int) { is >> theSlaves; } ClassDescription AnalysisHandler::initAnalysisHandler; void AnalysisHandler::Init() { static ClassDocumentation documentation ("The ThePEG::AnalysisHandler class is the base class of all " "analysis handlers."); static RefVector interfaceSlaves ("Slaves", "ThePEG::AnalysisHandler objects to be called for the same extracted " "particles as this one.", &AnalysisHandler::theSlaves, 0, true, false, true, false); interfaceSlaves.rank(10); } thepeg-1.8.0.orig/Handlers/SimpleFlavour.cc0000644000175000017500000004143311747772425017013 0ustar sunsun// -*- C++ -*- // // SimpleFlavour.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleFlavour class. // #include "SimpleFlavour.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Repository/RandomGenerator.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/Triplet.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; SimpleFlavour::SimpleFlavour() : theSSup(0.3), theDiSup(0.1), theDi1Sup(0.05), theDiSSup(0.4), theEtaSup(1.0), theEtaPSup(0.4), theBaryon10Sup(1.0), thePSpin1(0.5), thePSpinS1(0.6), thePSpinC1(0.75) {} SimpleFlavour::~SimpleFlavour() {} IBPtr SimpleFlavour::clone() const { return new_ptr(*this); } IBPtr SimpleFlavour::fullclone() const { return new_ptr(*this); } void SimpleFlavour::doinit() { FlavourGenerator::doinit(); clear(); } void SimpleFlavour::doinitrun() { FlavourGenerator::doinitrun(); clear(); } void SimpleFlavour::clear() { theFlavourSelector.clear(); theProbabilities.clear(); } long SimpleFlavour::selectQuark() const { return rndsign(1.0, 1.0, sSup()) + 2; } long SimpleFlavour::selectFlavour() const { if ( theFlavourSelector.empty() ) { theFlavourSelector.insert(1.0, 1); theFlavourSelector.insert(1.0, 2); theFlavourSelector.insert(sSup(), 3); for ( int ifla = 1; ifla <= 3; ++ifla ) for ( int iflb = 1; iflb <= ifla; ++iflb ) { double w = diSup(); if ( ifla == 3 ) w *= diSSup(); theFlavourSelector.insert(3.0*di1Sup()*w, 1000*ifla + 100*iflb + 3); if ( ifla != iflb ) theFlavourSelector.insert(w, 1000*ifla + 100*iflb + 1); } } return theFlavourSelector[rnd()]; } /* tcPDPair SimpleFlavour::generateOldHadron(tcPDPtr q) const { tcPDPair ret; bool isdiq = DiquarkMatcher::Check(*q); while ( true ) { long flav = selectFlavour(); if ( isdiq && DiquarkMatcher::Check(flav) ) continue; if ( isdiq ) ret.second = getParticleData(q->id() > 0? -flav: flav); else ret.second = getParticleData(q->id() > 0? flav: -flav); ret.first = getHadron(q->id(), ret.second->CC()->id()); if ( ret.first->id() == ParticleID::eta && !rndbool(etaSup()) ) continue; if ( ret.first->id() == ParticleID::etaprime && !rndbool(etaPSup()) ) continue; if ( DiquarkMatcher::Check(ret.second->id()) && !rndbool(weightSU6QDiQSpin(abs(q->id()), abs(ret.second->id()), 2) + weightSU6QDiQSpin(abs(q->id()), abs(ret.second->id()), 4)* baryon10Sup()) ) continue; return ret; } return tcPDPair(); } */ tcPDPair SimpleFlavour::generateHadron(tcPDPtr q) const { tcPDPair ret; ProbabilityMap::const_iterator it = theProbabilities.find(abs(q->id())); if ( it == theProbabilities.end() ) { setProbabilities(abs(q->id())); it = theProbabilities.find(abs(q->id())); if ( it == theProbabilities.end() ) return ret; } pair ids = it->second[rnd()]; ret.first = getParticleData(ids.first); ret.second = getParticleData(ids.second); if ( it->first != q->id() ) { if ( ret.first->CC() ) ret.first = ret.first->CC(); if ( ret.second->CC() ) ret.second = ret.second->CC(); } return ret; } void SimpleFlavour::setProbabilities(long iq) const { VSelector< pair > & sel = theProbabilities[iq]; sel.clear(); vector< pair > wts; if ( DiquarkMatcher::Check(iq) ) { vector flv = PDT::flavourContent(iq); // This is a di-quark, so we can only generate a q-qbar for ( long iqb = 1; iqb <= 3; ++iqb ) { double w = 1.0; // Suppress s-quarks if ( iqb == 3 ) w = sSup(); // Get the normalized probability for octet and decuplet double ow = weightSU6QDiQSpin(iqb, iq, 2); double dw = weightSU6QDiQSpin(iqb, iq, 4)*baryon10Sup(); w /= (ow + dw); long iq1 = max(flv[0], iqb); long iq3 = min(flv[1], iqb); long iq2 = flv[0] + flv[1] + iqb - iq1 - iq3; // Get possible Octets. wts = baryonOctetIds(iq1, iq2, iq3, iqb, (iq%10) == 3); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*ow*wts[i].second, make_pair(wts[i].first, -iqb)); // Get possible Decuplets. wts = baryonDecupletIds(iq1, iq2, iq3); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*dw*wts[i].second, make_pair(wts[i].first, -iqb)); } } else { // This is a quark so we can generate both q-qbar and diq-diqbar pairs. // We start with q-qbar pairs for ( long iqb = 1; iqb <= 3; ++iqb ) { int sign = ( iq >= iqb? 1: -1); double w = 1.0; // s-quark suppression. if ( iqb == 3 ) w = sSup(); long iqh = max(iq, iqb); long iql = min(iq, iqb); // Get relative vector meson probability. double vw = vectorMesonProbability(iqh, iql); // Get possible vector mesons. wts = vectorIds(iqh, iql); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*vw*wts[i].second, make_pair(sign*wts[i].first, iqb)); // Get pseudo scala vector mesons. wts = pseudoScalarIds(iqh, iql); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*(1.0 - vw)*wts[i].second, make_pair(sign*wts[i].first, iqb)); } // No we go through the possible di-quarks. for ( long ifla = 1; ifla <= 3; ++ifla ) for ( long iflb = 1; iflb <= ifla; ++iflb ) { // We have a general di-quark suppression. double w = diSup(); // Suppress strange di-quarks. if ( ifla == 3 ) w *= diSSup()*sSup(); long iqa = max(ifla, iq); long iqc = min(iflb, iq); long iqb = ifla + iflb + iq - iqa - iqc; // Get weight for spin-0 di-quark to octet baryons. long idiq = ifla*1000 + iflb*100 + 1; double ow = weightSU6QDiQSpin(iq, idiq, 2); // Get possible octet baryons for spin-0 di-quark. if ( ifla != iflb ) { wts = baryonOctetIds(iqa, iqb, iqc, iq, false); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*ow*wts[i].second, make_pair(wts[i].first, -idiq)); } // Spin-1 diquarks have three states. w *= 3.0; // Get weight for spin-1 di-quark to octet baryons. idiq += 2; ow = weightSU6QDiQSpin(iq, idiq, 2); // Get possible octet baryons for spin-1 di-quark. wts = baryonOctetIds(iqa, iqb, iqc, iq, true); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*ow*wts[i].second, make_pair(wts[i].first, -idiq)); // Get weight for spin-1 di-quark to decuplet baryons. double dw = weightSU6QDiQSpin(iq, idiq, 4)*baryon10Sup(); // Get possible decuplet baryons for spin-1 di-quark. wts = baryonDecupletIds(iqa, iqb, iqc); for ( int i = 0, N = wts.size(); i < N; ++i ) sel.insert(w*dw*wts[i].second, make_pair(wts[i].first, -idiq)); } } } double SimpleFlavour::vectorMesonProbability(long iq1, long iq2) const { switch ( max(abs(iq1), abs(iq2)) ) { case 1: case 2: return pSpin1(); case 3: return pSpinS1(); case 4: case 5: return pSpinC1(); default: return 0.0; } } double SimpleFlavour::weightSU6QDiQSpin(long iq, long idq, int spin) { typedef Triplet QDiQS; typedef map QDiQSpinMap; static QDiQSpinMap qDiQSpin; QDiQS i(iq, idq, spin); QDiQSpinMap::iterator it = qDiQSpin.find(i); if ( it != qDiQSpin.end() ) return it->second; long idq1 = (idq/1000)%10; long idq2 = (idq/100)%10; if ( idq1 == idq2 ) { // Two of the same flavour in diquark, only spin 1 if ( iq == idq1 ) return qDiQSpin[i] = (spin == 4? 1.0: 0.0); return qDiQSpin[i] = (spin == 4? 1.0/3.0: 1.0/6.0); } else if ( idq%10 == 1 ) { // Spin 0 diquarks: if ( iq == idq1 || iq == idq2 ) return qDiQSpin[i] = (spin == 4? 0.0: 0.75); return qDiQSpin[i] = (spin == 4? 0.0: 0.5); } else { // Spin 1 diquarks: if ( iq == idq1 || iq == idq2 ) return qDiQSpin[i] = (spin == 4? 2.0/3.0: 1.0/12.0); return qDiQSpin[i] = (spin == 4? 1.0/3.0: 1.0/6.0); } } double SimpleFlavour::baryonDecupletProbability(long iq1, long iq2) const { double pd = weightSU6QDiQSpin(iq1, iq2, 4)*baryon10Sup(); double po = weightSU6QDiQSpin(iq1, iq2, 2); return pd/(pd + po); } tcPDPtr SimpleFlavour::getBaryon(long iq1, long iq2, long iq3) const { if ( abs(iq1) >= 10 || abs(iq2) >= 10 || abs(iq3) ) return tcPDPtr(); if ( iq1*iq2*iq3 == 0 ) return tcPDPtr(); int sign = 0; if ( iq1 > 0 && iq2 > 0 && iq3 > 0 ) sign = 1; if ( iq1 < 0 && iq2 < 0 && iq3 < 0 ) sign = -1; if ( !sign ) return tcPDPtr(); VSelector< pair > sel; iq1 = abs(iq1); iq2 = abs(iq2); iq3 = abs(iq3); sel.insert(3.0, make_pair(iq1, 1000*max(iq2, iq3) + 100*min(iq2, iq3) + 3)); if ( iq2 != iq3 ) sel.insert(1.0, make_pair(iq1, 1000*max(iq2, iq3) + 100*min(iq2, iq3) + 1)); sel.insert(3.0, make_pair(iq2, 1000*max(iq3, iq1) + 100*min(iq3, iq1) + 3)); if ( iq3 != iq1 ) sel.insert(1.0, make_pair(iq2, 1000*max(iq3, iq1) + 100*min(iq3, iq1) + 1)); sel.insert(3.0, make_pair(iq3, 1000*max(iq1, iq2) + 100*min(iq1, iq2) + 3)); if ( iq1 != iq2 ) sel.insert(1.0, make_pair(iq3, 1000*max(iq1, iq2) + 100*min(iq1, iq2) + 1)); pair qdq = sel[rnd()]; return getHadron(qdq.first, qdq.second); } tcPDPtr SimpleFlavour::getHadron(long iq1, long iq2) const { if ( iq1*iq2 == 0 ) return tcPDPtr(); if ( DiquarkMatcher::Check(iq1) ) swap(iq1, iq2); if ( DiquarkMatcher::Check(iq2) ) { if ( abs(iq1) >= 10 || iq1*iq2 < 0 ) return tcPDPtr(); return rndbool(baryonDecupletProbability(abs(iq1), abs(iq2)))? baryonDecuplet(iq1, iq2): baryonOctet(iq1, iq2); } else { if ( abs(iq1) >= 10 || abs(iq2) >= 10 || iq1*iq2 > 0 ) return tcPDPtr(); return rndbool(vectorMesonProbability(iq1, iq2))? vectorMeson(iq1, iq2): pseudoScalarMeson(iq1, iq2); } } tcPDPtr SimpleFlavour::pseudoScalarMeson(long iq, long iqb) const { return getParticleData((iq + iqb < 0? -1: 1)* pseudoScalarId(max(abs(iq), abs(iqb)), min(abs(iq), abs(iqb)))); } long SimpleFlavour::pseudoScalarId(long iqh, long iql) const { if ( iql == iqh && iql <= 3 ) { if ( iql <= 2 ) return rndbool()? ParticleID::pi0: ( rndbool()? ParticleID::eta: ParticleID::etaprime ); else return rndbool()? ParticleID::eta: ParticleID::etaprime; } else return (iqh*100 + iql*10 + 1)*(iqh != iql && iqh%2? -1: 1); } vector< pair > SimpleFlavour:: pseudoScalarIds(long iqh, long iql) const { vector< pair > ret; if ( iql == iqh && iql <= 3 ) { if ( iql <= 2 ) { ret.push_back(make_pair(ParticleID::pi0, 0.5)); ret.push_back(make_pair(ParticleID::eta, 0.25*etaSup())); ret.push_back(make_pair(ParticleID::etaprime, 0.25*etaPSup())); } else { ret.push_back(make_pair(ParticleID::eta, 0.5*etaSup())); ret.push_back(make_pair(ParticleID::etaprime, 0.5*etaPSup())); } } else { ret.push_back(make_pair((iqh*100 + iql*10 + 1)* (iqh != iql && iqh%2? -1: 1), 1.0)); } return ret; } tcPDPtr SimpleFlavour::vectorMeson(long iq, long iqb) const { return getParticleData((iq + iqb < 0? -1: 1)* vectorId(max(abs(iq), abs(iqb)), min(abs(iq), abs(iqb)))); } long SimpleFlavour::vectorId(long iqh, long iql) const { if ( iql == iqh && iql <= 2 ) return rndbool()? ParticleID::rho0: ParticleID::omega; else return (iqh*100 + iql*10 + 3)*(iqh != iql && iqh%2? -1: 1); } vector< pair > SimpleFlavour::vectorIds(long iqh, long iql) const { vector< pair > ret; if ( iql == iqh && iql <= 2 ) { ret.push_back(make_pair(ParticleID::rho0, 0.5)); ret.push_back(make_pair(ParticleID::omega, 0.5)); } else { ret.push_back(make_pair((iqh*100 + iql*10 + 3)* (iqh != iql && iqh%2? -1: 1), 1.0)); } return ret; } tcPDPtr SimpleFlavour::baryonOctet(long iq, long idq) const { long aiq = abs(iq); vector flv = PDT::flavourContent(idq); long iqa = max(abs(flv[0]), aiq); long iqc = min(abs(flv[1]), aiq); long iqb = abs(flv[0]) + abs(flv[1]) + aiq - iqa - iqc; return getParticleData((iq > 0? 1: -1)* baryonOctetId(iqa, iqb, iqc, aiq, (abs(idq)%10) == 3)); } long SimpleFlavour:: baryonOctetId(long iqa, long iqb, long iqc, long iq, bool dqs1) const { if ( iqa > iqb && iqb > iqc && ( ( dqs1 && ( iqa == iq || rndbool(0.25) ) ) || ( !dqs1 && iqa != iq && rndbool(0.75) ) ) ) swap(iqb, iqc); return 1000*iqa + 100*iqb + 10*iqc + 2; } vector< pair > SimpleFlavour:: baryonOctetIds(long iqa, long iqb, long iqc, long iq, bool dqs1) const { vector< pair > ret; double lambda = 0.0; if ( iqa > iqb && iqb > iqc ) { if ( dqs1 && iqa == iq ) lambda = 0.25; else if ( !dqs1 && iqa != iq ) lambda = 0.75; } ret.push_back(make_pair(1000*iqa + 100*iqb + 10*iqc + 2, 1.0 - lambda)); if ( lambda > 0.0 ) ret.push_back(make_pair(1000*iqa + 100*iqc + 10*iqb + 2, lambda)); return ret; } tcPDPtr SimpleFlavour::baryonDecuplet(long iq, long idq) const { long aiq = abs(iq); vector flv = PDT::flavourContent(idq); long iqa = max(abs(flv[0]), aiq); long iqc = min(abs(flv[1]), aiq); long iqb = abs(flv[0]) + abs(flv[1]) + aiq - iqa - iqc; return getParticleData((iq > 0? 1: -1)*baryonDecupletId(iqa, iqb, iqc)); } long SimpleFlavour:: baryonDecupletId(long iqa, long iqb, long iqc) const { return 1000*iqa + 100*iqb + 10*iqc + 4; } vector< pair > SimpleFlavour:: baryonDecupletIds(long iqa, long iqb, long iqc) const { vector< pair > ret; ret.push_back(make_pair(1000*iqa + 100*iqb + 10*iqc + 4, 1.0)); return ret; } void SimpleFlavour::persistentOutput(PersistentOStream & os) const { os << theSSup << theDiSup << theDi1Sup << theDiSSup << theEtaSup << theEtaPSup << theBaryon10Sup << thePSpin1 << thePSpinS1 << thePSpinC1; } void SimpleFlavour::persistentInput(PersistentIStream & is, int) { is >> theSSup >> theDiSup >> theDi1Sup >> theDiSSup >> theEtaSup >> theEtaPSup >> theBaryon10Sup >> thePSpin1 >> thePSpinS1 >> thePSpinC1; clear(); } ClassDescription SimpleFlavour::initSimpleFlavour; // Definition of the static class description member. void SimpleFlavour::Init() { static ClassDocumentation documentation ("This is a simple class to generate hadrons given the quark " "flavours. It implements a simplified version of the model of the " "old fortran version of Pythia."); static Parameter interfaceSSup ("SSup", "Suppression factor of strange quarks w.r.t. u and d.", &SimpleFlavour::theSSup, 0.3, 0.0, 1.0, true, false, true); static Parameter interfaceDiSup ("DiSup", "Suppression factor for di-quarks w.r.t. quarks.", &SimpleFlavour::theDiSup, 0.1, 0.0, 1.0, true, false, true); static Parameter interfaceDi1Sup ("Di1Sup", "Suppression of spin-1 di-quarks w.r.t. spin-0 ones.", &SimpleFlavour::theDi1Sup, 0.05, 0.0, 1.0, true, false, true); static Parameter interfaceDiSSup ("DiSSup", "Suppression of strange di-quarks w.r.t. u and d ones in addition to " "the standard strangness suppression of quarks.", &SimpleFlavour::theDiSSup, 0.4, 0.0, 1.0, true, false, true); static Parameter interfaceEtaSup ("EtaSup", "Extra suppression of eta's.", &SimpleFlavour::theEtaSup, 1.0, 0.0, 1.0, true, false, true); static Parameter interfaceEtaPSup ("EtaPSup", "Extra suppression of ets-prime's.", &SimpleFlavour::theEtaPSup, 0.4, 0.0, 1.0, true, false, true); static Parameter interfaceBaryon10Sup ("Baryon10Sup", "Extra suppression for baryons of the spin 3/2 decuplet.", &SimpleFlavour::theBaryon10Sup, 1.0, 0.0, 1.0, true, false, true); static Parameter interfacePSpin1 ("PSpin1", "Probability that light (u/d) mesons has spin 1.", &SimpleFlavour::thePSpin1, 0.5, 0.0, 1.0, true, false, true); static Parameter interfacePSpinS1 ("PSpinS1", "Probability that strange mesons has spin 1.", &SimpleFlavour::thePSpinS1, 0.6, 0.0, 1.0, true, false, true); static Parameter interfacePSpinC1 ("PSpinC1", " Probability that charmed and heavier mesons has spin 1.", &SimpleFlavour::thePSpinC1, 0.75, 0.0, 1.0, true, false, true); interfaceSSup.rank(10); interfaceDiSup.rank(9); interfaceDi1Sup.rank(8); interfaceBaryon10Sup.rank(7); interfacePSpin1.rank(6); interfacePSpinS1.rank(5); interfacePSpinC1.rank(4); } thepeg-1.8.0.orig/Handlers/AnalysisHandler.fh0000644000175000017500000000052111747772425017305 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_AnalysisHandler_FH #define ThePEG_AnalysisHandler_FH // // This is the forward declaration of the AnalysisHandler class. // #include "ThePEG/Config/Pointers.h" namespace ThePEG { class AnalysisHandler; ThePEG_DECLARE_POINTERS(AnalysisHandler,AnalysisHdlPtr); } #endif /* ThePEG_SubProcessHandler_FH */ thepeg-1.8.0.orig/Handlers/FixedCMSLuminosity.h0000644000175000017500000000657311747772425017572 0ustar sunsun// -*- C++ -*- // // FixedCMSLuminosity.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FixedCMSLuminosity_H #define ThePEG_FixedCMSLuminosity_H // This is the declaration of the FixedCMSLuminosity class. #include "LuminosityFunction.h" namespace ThePEG { /** * The FixedCMSLuminosity class describes an experiment with incoming * particles colliding with precicely defined and opposite momenta. It * is derived from the LuminosityFunction base class. * * \deprecated As the LuminosityFunction base class has increased * functionality (exceeding the functionality of this class) the use * of FixedCMSLuminosity is deprecated, and the class will be removed * in a future release. Note also that by setting the individual beam * energies in the base class, the behavior of this object may be * inconsistent, in that the collision will not, as specified, be in * the center-of-mass system. * * @see \ref FixedCMSLuminosityInterfaces "The interfaces" * defined for FixedCMSLuminosity. */ class FixedCMSLuminosity: public LuminosityFunction { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~FixedCMSLuminosity(); //@} public: /** * The total energy in the cms of the incoming particles. */ Energy energy() const { return maximumCMEnergy(); } public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Utility function used by the interface. */ void setEnergy(Energy); /** * Utility function used by the interface. */ Energy getEnergy() const; private: /** * Describe a concrete class with persistent data. */ static NoPIOClassDescription initFixedCMSLuminosity; /** * Private and non-existent assignment operator. */ FixedCMSLuminosity & operator=(const FixedCMSLuminosity &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of FixedCMSLuminosity. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of FixedCMSLuminosity. */ typedef LuminosityFunction NthBase; }; /** * This template specialization informs ThePEG about the name of the * FixedCMSLuminosity class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::FixedCMSLuminosity"; } /** Return the name of the shared library be loaded to get access to * the FixedCMSLuminosity class and every other class it uses * (except the base class). */ static string library() { return "FixedCMSLuminosity.so"; } }; /** @endcond */ } #endif /* ThePEG_FixedCMSLuminosity_H */ thepeg-1.8.0.orig/Handlers/Hint.h0000644000175000017500000001127611747772425014771 0ustar sunsun// -*- C++ -*- // // Hint.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Hint_H #define ThePEG_Hint_H // This is the declaration of the Hint class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/ClassDescription.h" namespace ThePEG { /** * Hint is a base class to be used to pass information * between StepHandler s, which cannot be convayed * through the Event record. The base class contains a vector of of * tagged particles. A StepHandler is always given a hint, and is only * allowed to treat Particles from the current Step which are listed * in the vector of tagged particles in the hint (if this vector is * empty the StepHandler may treat all particles in the Step. * * A Hint may have the stop flag set. In this case * the StepHandler to which the hint is assigned is * not called, and the event generation is stopped. * * A Hint may be given a scale, but what a StepHandler does with this * and other pieces of information possibly supplied by subclasses of * Hint, is not defined. * * There is a special Hint which is kept as the static member called * Hint::theDefaultHint. Although any default constructed Hint object * would work as a default hint, only pointers to this static object * should be used where a default hint is needed. * * * @see StepHandler * @see EventHandler * @see Particle * @see Event * @see Step * */ class Hint: public Base { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ Hint() : theScale(Energy2()), theStopFlag(false) {} //@} public: /** * Return true if there are tagged particles in the hint. */ bool tagged() const { return !theTagged.empty(); } /** * Return a list of pointers to particles to be handled. A handler * is not allowed to touch other particles in the event record. If a * particle which has been flagged by the hint is no longer present * in the current Step, a null pointer is inserted in its place. */ tPVector tagged(const Step & s) const; /** * Add a range of particles to the list of tagged particles. */ template void tag(InputIterator first, InputIterator last) { theTagged.insert(theTagged.end(), first, last); } /** * Add a particle to the list of tagged particles. */ void tag(tPPtr p) { if (p) theTagged.push_back(p); } /** * Set the stop hint. */ void stop(bool newStopFlag) { theStopFlag = newStopFlag; if ( theStopFlag ) theTagged.clear(); } /** * Get the stop hint. */ bool stop() const { return theStopFlag; } /** * Set the scale. */ void scale(const Scale & newScale) { theScale = newScale; } /** * Get the scale. */ const Scale & scale() const { return theScale; } /** * Return a pointer to the default hint. */ static tHintPtr Default() { return tHintPtr(&theDefaultHint); } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The vector of tagged particles. */ tPVector theTagged; /** * The scale. */ Scale theScale; /** * The stop hint. */ bool theStopFlag; /** * The default hint. */ static Hint theDefaultHint; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initHint; /** * Assignment is private and non-existing. */ Hint & operator=(const Hint & h); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of Hint. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of Hint. */ typedef Base NthBase; }; /** * This template specialization informs ThePEG about the name of the * Hint class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::Hint"; } }; /** @endcond */ } #endif /* ThePEG_Hint_H */ thepeg-1.8.0.orig/Handlers/HandlerGroup.cc0000644000175000017500000001343211747772425016613 0ustar sunsun// -*- C++ -*- // // HandlerGroup.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HandlerGroup class. // #include "ThePEG/Handlers/HandlerGroup.h" #include "ThePEG/Handlers/StepHandler.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "HandlerGroup.tcc" #endif using namespace ThePEG; HandlerGroupBase::HandlerGroupBase() : isEmpty(true) {} HandlerGroupBase::HandlerGroupBase(const HandlerGroupBase & hg) : isEmpty(hg.isEmpty), theDefaultPreHandlers(hg.theDefaultPreHandlers), theDefaultPostHandlers(hg.theDefaultPostHandlers), thePreHandlers(hg.thePreHandlers), theHints(hg.theHints), thePostHandlers(hg.thePostHandlers) {} HandlerGroupBase::~HandlerGroupBase() {} HandlerGroupBase::StepWithHint HandlerGroupBase::next() { StepWithHint sh = make_pair(StepHdlPtr(), HintPtr()); if ( isEmpty ) return sh; if ( !thePreHandlers.empty() ) { sh = thePreHandlers.back(); thePreHandlers.pop_back(); return sh; } if ( handler() ) { if ( !theHints.empty() ) { sh.first = handler(); sh.second = theHints.back(); theHints.pop_back(); return sh; } else setHandler(); } if ( !thePostHandlers.empty() ) { sh = thePostHandlers.back(); thePostHandlers.pop_back(); return sh; } isEmpty = true; return sh; } void HandlerGroupBase::addPreHandler(tStepHdlPtr s, tHintPtr h, const HandlerGroupBase & ext) { if ( !s ) return; if ( !handler() ) refillDefaults(ext); thePreHandlers.push_back(make_pair(s, h)); isEmpty = false; } void HandlerGroupBase::addPostHandler(tStepHdlPtr s, tHintPtr h, const HandlerGroupBase & ext) { if ( !s ) return; if ( empty() ) refillDefaults(ext); thePostHandlers.push_back(make_pair(s, h)); isEmpty = false; } void HandlerGroupBase:: addHint(tHintPtr h, const HandlerGroupBase & ext) { if ( !handler() || theHints.empty() ) refillDefaults(ext); if ( count(theHints.begin(), theHints.end(), h) ) return; theHints.push_back(h); isEmpty = false; } void HandlerGroupBase::clear() { thePreHandlers.clear(); theHints.clear(); thePostHandlers.clear(); isEmpty = true; } void HandlerGroupBase::refillDefaults(const HandlerGroupBase & ext) { checkInsert(thePreHandlers, preHandlers()); checkInsert(thePreHandlers, ext.preHandlers()); refillDefaultHandler(ext.defaultHandler()); checkInsert(thePostHandlers, postHandlers()); checkInsert(thePostHandlers, ext.postHandlers()); } void HandlerGroupBase:: checkInsert(StepHintVector & handlers, const StepVector & defHandlers) { for ( StepVector::const_reverse_iterator r = defHandlers.rbegin(); r != defHandlers.rend(); ++r ) { try { for ( StepHintVector::iterator i = handlers.begin(); i != handlers.end(); ++i ) if ( i->first == *r && i->second == Hint::Default() ) throw int(); handlers.push_back(make_pair(*r, Hint::Default())); isEmpty = false; } catch (int) {} } } void HandlerGroupBase::interfaceSetPrehandler(StepHdlPtr p, int i) { if ( i >= 0 && unsigned(i) < preHandlers().size() ) preHandlers()[i] = p; } void HandlerGroupBase::interfaceSetPosthandler(StepHdlPtr p, int i) { if ( i >= 0 && unsigned(i) < postHandlers().size() ) postHandlers()[i] = p; } void HandlerGroupBase::interfaceInsertPrehandler(StepHdlPtr p, int i) { if ( i >= 0 && unsigned(i) <= preHandlers().size() ) preHandlers().insert(preHandlers().begin() + i, p); } void HandlerGroupBase::interfaceInsertPosthandler(StepHdlPtr p, int i) { if ( i >= 0 && unsigned(i) <= postHandlers().size() ) postHandlers().insert(postHandlers().begin() + i, p); } void HandlerGroupBase::interfaceErasePrehandler(int i) { if ( i >= 0 && unsigned(i) < preHandlers().size() ) preHandlers().erase(preHandlers().begin() + i); } void HandlerGroupBase::interfaceErasePosthandler(int i) { if ( i >= 0 && unsigned(i) < postHandlers().size() ) postHandlers().erase(postHandlers().begin() + i); } vector HandlerGroupBase::interfaceGetPrehandlers() const { return preHandlers(); } vector HandlerGroupBase::interfaceGetPosthandlers() const { return postHandlers(); } void HandlerGroupBase::write(PersistentOStream & os) const { os << isEmpty << theDefaultPreHandlers << theDefaultPostHandlers; os << thePreHandlers.size(); for ( StepHintVector::const_iterator it = thePreHandlers.begin(); it != thePreHandlers.end(); ++it ) os << it->first << (it->second == Hint::Default()? HintPtr(): it->second); os << theHints.size(); for ( HintVector::const_iterator it = theHints.begin(); it != theHints.end(); ++it ) os << ( *it == Hint::Default()? HintPtr(): *it ); os << thePostHandlers.size(); for ( StepHintVector::const_iterator it = thePostHandlers.begin(); it != thePostHandlers.end(); ++it ) os << it->first << (it->second == Hint::Default()? HintPtr(): it->second); } void HandlerGroupBase::read(PersistentIStream & is) { is >> isEmpty >> theDefaultPreHandlers >> theDefaultPostHandlers; tStepHdlPtr sh; HintPtr h; long size; thePreHandlers.clear(); is >> size; while ( size-- ) { is >> sh >> h; if ( !h ) h = Hint::Default(); thePreHandlers.push_back(make_pair(sh,h)); } is >> size; while ( size-- ) { is >> h; if ( !h ) h = Hint::Default(); theHints.push_back(h); } is >> size; while ( size-- ) { is >> sh >> h; if ( !h ) h = Hint::Default(); thePostHandlers.push_back(make_pair(sh,h)); } } thepeg-1.8.0.orig/Handlers/SubProcessHandler.fh0000644000175000017500000000052611747772425017617 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_SubProcessHandler_FH #define ThePEG_SubProcessHandler_FH // // This is the forward declaration of the SubProcessHandler class. // #include "ThePEG/Config/Pointers.h" namespace ThePEG { class SubProcessHandler; ThePEG_DECLARE_POINTERS(SubProcessHandler,SubHdlPtr); } #endif /* ThePEG_SubProcessHandler_FH */ thepeg-1.8.0.orig/Handlers/CascadeHandler.h0000644000175000017500000001324211747772425016703 0ustar sunsun// -*- C++ -*- // // CascadeHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_CascadeHandler_H #define ThePEG_CascadeHandler_H // This is the declaration of the CascadeHandler class. #include "StepHandler.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/PDF/PDF.h" namespace ThePEG { /** * The CascadeHandler is the base class of all handlers implementing * perturbative partonic cascade models. It is derived from the more * general StepHandler class, and implements the handle() function to * do some standard initialization before calling the main cascade() * function. * * @see \ref CascadeHandlerInterfaces "The interfaces" * defined for CascadeHandler. * @see StepHandler * @see EventHandler * @see SubProcessHandler */ class CascadeHandler: public StepHandler, public LastXCombInfo<> { public: /** @name Standard constructors and destructors. */ //@{ /** * The destructor. */ virtual ~CascadeHandler(); //@} public: /** @name Virtual functions required by the StepHandler class. */ //@{ /** * The main function called by the EventHandler class to * perform a step. * @param eh the EventHandler in charge of the Event generation. * @param tagged if not empty these are the only particles which should * be considered by the StepHandler. * @param hint a Hint object with possible information from previously * performed steps. * @throws Veto if the StepHandler requires the current step to be * discarded. * @throws Stop if the generation of the current Event should be stopped * after this call. * @throws Exception if something goes wrong. */ virtual void handle(EventHandler & eh, const tPVector & tagged, const Hint & hint); //@} /** * The main function to be overwritten by sub-classes. It is called * by handle() after storing some information which is then * available through simple access functions. */ virtual void cascade() = 0; /** * The CascadeHandler can be used inside the process generation to * do so-called CKKW reweighting of the hard sub-process. In this * case this function is called after information about the * sub-process is made available through the LastXCombInfo base * class. Only the function belonging to the primary CascadeHandler * for the event to be generated is called. Sub-classes may * implement it to give a suitable weight in return. The * CascadeHandler may store information about the generated * sub-process to be used in the subsequent cascade. It is however * not guaranteed that the reweightCKKW() will have been called for * the subprocess handed to the handle() function. This default * implementation of the function simply return one. The current * sub-process is mixed together with other processes with a * multiplicity of outgoing particles between \a minMult and \a * maxMult. */ virtual double reweightCKKW(int minMult, int maxMult); public: /** @name Access information stored by the handle() function. */ //@{ /** * Return the vector of tagged particles which should be * showered. It the vector is empty, the patons from the current * sub-process is supposed to be showered. */ const tPVector & tagged() const { return *theTagged; } /** * Return the int provided in the current call to handle(). */ const Hint & hint() const { return *theHint; } /** * Return references to the PDF used by the first incoming particle. */ const PDF & firstPDF() const { return pdfs().first; } /** * Return references to the PDF used by the first incoming particle. */ const PDF & secondPDF() const { return pdfs().second; } /** * Return references to the currently used PDF's. */ const pair & pdfs() const { return thePDFs; } /** * Set alternative PDFBase objects to be used for cascade. */ void resetPDFs(const pair & pdfpair); /** * Set the XComb object with information about the sub-process * generation. */ void setXComb(tXCombPtr xc); //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Store the tagged argument given to handle(). */ const tPVector * theTagged; /** * Store the Hint arguments given to handle(). */ const Hint * theHint; /** * The pdfs used to extract the incoming partons. */ pair thePDFs; private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initCascadeHandler; /** * Private and non-existent assignment operator. */ CascadeHandler & operator=(const CascadeHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of CascadeHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of CascadeHandler. */ typedef StepHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the CascadeHandler class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::CascadeHandler"; } }; /** @endcond */ } #endif /* ThePEG_CascadeHandler_H */ thepeg-1.8.0.orig/Handlers/ClusterCollapser.cc0000644000175000017500000004655511747772425017523 0ustar sunsun// -*- C++ -*- // // ClusterCollapser.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ClusterCollapser class. // #include "ClusterCollapser.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Utilities/EnumIO.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "ClusterCollapser.tcc" #endif #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; ClusterCollapser::~ClusterCollapser() {} IBPtr ClusterCollapser::clone() const { return new_ptr(*this); } IBPtr ClusterCollapser::fullclone() const { return new_ptr(*this); } void ClusterCollapser:: handle(EventHandler &, const tPVector & tagged, const Hint &) { collapse(tagged, newStep()); } vector ClusterCollapser:: collapse(tPVector tagged, tStepPtr newstep) { vector newTagged; SingletMap clusters = getSinglets(tagged); // Go through all clusters below the cut. while ( !clusters.empty() && clusters.begin()->first < cut() ) { ColourSinglet & cl = clusters.begin()->second; // If a cluster contains too many junctions, split them into // several singlets. while ( cl.nPieces() > 3 ) insert(clusters, cl.splitInternal()); // If a cluster contains a junktion and a diquark, split the // diquark and make two simple strings. while ( diQuarkJunction(cl) ) insert(clusters, splitDiQuarkJunction(cl, newstep)); // First try to collapse into two particles. int ntry = nTry2(); while ( ntry > 0 ) { if ( collapse2(newstep, cl) ) break; --ntry; } // If that didn't work collapse into one particle and shuffle some // energy to or from the other tagged particles. if ( ntry == 0 ) { // If this was a di-diquark cluster, split it into two. if ( diDiQuark(cl) ) insert(clusters, splitDiDiQuark(cl, newstep)); collapse(newstep, cl, tagged); } // Update the tagged vector and remove partons which have already // collapsed and insert their children instead. tPVector::iterator it = tagged.begin(); set children; while ( it != tagged.end() ) { *it = (**it).final(); if ( (**it).decayed() ) { children.insert((**it).children().begin(), (**it).children().end()); it = tagged.erase(it); } else ++it; } tagged.insert(tagged.end(), children.begin(), children.end()); // Remove the collapsed cluster. clusters.erase(clusters.begin()); // Recalculate masses of the remaining clusters, insert them in a // temporary map and swap this map for the old map. multimap newClusters; while ( !clusters.empty() ) { ColourSinglet & cl = clusters.begin()->second; for ( int i = 0, N = cl.partons().size(); i < N; ++i ) cl.partons()[i] = cl.partons()[i]->final(); insert(newClusters, cl); clusters.erase(clusters.begin()); } clusters.swap(newClusters); } // Return the left-over clusters in a vector. newTagged.resize(clusters.size()); for ( int is = 0, NS = newTagged.size(); is < NS; ++is ) { newTagged[is].swap(clusters.begin()->second); clusters.erase(clusters.begin()); } return newTagged; } Energy ClusterCollapser::mass(const ColourSinglet & cl) { LorentzMomentum sump; Energy summ = ZERO; for ( int i = 0, N = cl.partons().size(); i < N; ++i ) { summ += cl.parton(i)->data().constituentMass(); sump += cl.parton(i)->momentum(); } return sump.m() - summ; } void ClusterCollapser::insert(SingletMap & mmap, const ColourSinglet & cl) { mmap.insert(make_pair(mass(cl), cl)); } bool ClusterCollapser::diDiQuark(const ColourSinglet & cs) { return ( cs.nPieces() == 1 && DiquarkMatcher::Check(cs.piece(1).front()->data()) && DiquarkMatcher::Check(cs.piece(1).back()->data()) ); } ColourSinglet ClusterCollapser:: splitDiDiQuark(ColourSinglet & cs, tStepPtr newStep) const { ColourSinglet ret; // Split the first diquark tcPPtr diq = cs.piece(1).front(); PPair qq1; qq1.first = getParticle(diq->id()/1000); qq1.second = getParticle((diq->id()/100)%10); if ( qq1.first->mass() + qq1.second->mass() >= diq->mass() ) { // If the sum of the quarks masses is larger than the diuark mass, // set the new quark masses to zero. qq1.first->set5Momentum(Lorentz5Momentum()); qq1.second->set5Momentum(Lorentz5Momentum()); } // Distribut the quarks evenly in the cms of the diquark and add // them as children of the diquark to the new step. SimplePhaseSpace::CMS(sqr(diq->mass()), qq1.first, qq1.second); qq1.first->boost(diq->momentum().boostVector()); qq1.second->boost(diq->momentum().boostVector()); newStep->addDecayProduct(diq, qq1.first); newStep->addDecayProduct(diq, qq1.second); // Split the second diquark diq = cs.piece(1).back(); PPair qq2; qq2.first = getParticle(diq->id()/1000); qq2.second = getParticle((diq->id()/100)%10); if ( qq2.first->mass() + qq2.second->mass() >= diq->mass() ) { // If the sum of the quarks masses is larger than the diuark mass, // set the new quark masses to zero. qq2.first->set5Momentum(Lorentz5Momentum()); qq2.second->set5Momentum(Lorentz5Momentum()); } // Distribut the quarks evenly in the cms of the diquark and add // them as children of the diquark to the new step. SimplePhaseSpace::CMS(sqr(diq->mass()), qq2.first, qq2.second); qq2.first->boost(diq->momentum().boostVector()); qq2.second->boost(diq->momentum().boostVector()); newStep->addDecayProduct(diq, qq2.first); newStep->addDecayProduct(diq, qq2.second); if ( rndbool() ) swap(qq1.first, qq1.second); return ret = cs.splitDiDiQuark(qq1, qq2); } bool ClusterCollapser::diQuarkJunction(const ColourSinglet & cs) { if ( cs.nPieces() < 3 ) return false; for ( int i = 1, N = cs.nPieces(); i <= N; ++i ) if ( DiquarkMatcher::Check(cs.piece(i).front()->data()) || DiquarkMatcher::Check(cs.piece(i).back()->data()) ) return true; return false; } ColourSinglet ClusterCollapser:: splitDiQuarkJunction(ColourSinglet & cs, tStepPtr newStep) const { ColourSinglet ret; // Find the diquarks in the singlet and pick one randomly. vector diqs; for ( ColourSinglet::Index i = 1, N = cs.nPieces(); i <= N; ++i ) { if ( DiquarkMatcher::Check(cs.piece(i).front()->data()) ) diqs.push_back(-i); if ( DiquarkMatcher::Check(cs.piece(i).back()->data()) ) diqs.push_back(i); } if ( diqs.empty() ) return ret; ColourSinglet::Index seli = diqs[UseRandom::irnd(diqs.size())]; tcPPtr diq = seli > 0? cs.piece(seli).back(): cs.piece(seli).front(); // Create the to quarks PPair qq; qq.first = getParticle(diq->id()/1000); qq.second = getParticle((diq->id()/100)%10); if ( qq.first->mass() + qq.second->mass() >= diq->mass() ) { // If the sum of the quarks masses is larger than the diuark mass, // set the new quark masses to zero. qq.first->set5Momentum(Lorentz5Momentum()); qq.second->set5Momentum(Lorentz5Momentum()); } // Distribut the quarks evenly in the cms of the diquark and add // them as children of the diquark to the new step. SimplePhaseSpace::CMS(sqr(diq->mass()), qq.first, qq.second); qq.first->boost(diq->momentum().boostVector()); qq.second->boost(diq->momentum().boostVector()); newStep->addDecayProduct(diq, qq.first); newStep->addDecayProduct(diq, qq.second); ret = cs.splitDiQuarkJunction(seli, diq, qq); return ret; } ClusterCollapser::SingletMap ClusterCollapser::getSinglets(const tPVector & pv) const { SingletMap ret; // Get initial singlets vector clus = ColourSinglet::getSinglets(pv.begin(), pv.end()); // Return the singlets ordered in mass. for ( int i = 0, N = clus.size(); i < N; ++i ) if ( !clus[i].partons().empty() ) insert(ret, clus[i]); return ret; } tPVector ClusterCollapser:: getCompensators(Energy mh, const ColourSinglet & cs, const tPVector & tagged, tStepPtr newStep) const { tPVector ret; tcPVector comp; // First find the particles which are not a part of the collapsing // cluster. tParticleSet compset; for ( int i = 0, N = tagged.size(); i < N; ++i ) if ( !member(cs.partons(), tagged[i]) ) compset.insert(tagged[i]); LorentzMomentum pcomp; LorentzMomentum pc = cs.momentum(); // start by only looking at other strings. bool alsoSinglets = false; do { // Return an empty vector if no particles left. if ( compset.empty() ) break; // Now find the particle which is closest in phase space to the // cluster. Energy2 dist = Constants::MaxEnergy2; tParticleSet::iterator sel = compset.end(); for ( tParticleSet::iterator it = compset.begin(); it != compset.end(); ++it ) { if ( !(**it).coloured() && !alsoSinglets ) continue; if ( -(pc - (**it).momentum()).m2() < dist ) { dist = -(pc - (**it).momentum()).m2(); sel = it; } } if ( sel == compset.end() ) { if ( alsoSinglets ) break; else { alsoSinglets = true; continue; } } // Add to the temporary vector. comp.push_back(*sel); compset.erase(sel); pcomp += (**sel).momentum(); // If there was not enough energy, find an additional compensator // particle. Also check that compensators have mass to avoid boost // problems. } while ( comp.empty() || (pc + pcomp).m() <= mh + pcomp.m() || ( comp.size() > 1 && pcomp.m2() <= ZERO ) ); // If this didn't work, let's try to fix it by disregarding the // closest particle. tcPVector::size_type end = comp.size(); while ( (pc + pcomp).m() <= mh + pcomp.m() || ( comp.size() > 1 && pcomp.m2() <= ZERO ) ) { if ( end == comp.size() ) { if ( comp.size() < 2 ) return ret; comp.erase(comp.begin()); end = 1; } else ++end; pcomp = Utilities::sumMomentum(comp.begin(), comp.begin() + end); } // Now copy the compensators, add them to the new set and return them. ret.resize(end); for ( tcPVector::size_type i = 0; i < end; ++i ) ret[i] = newStep->copyParticle(comp[i]); return ret; } void ClusterCollapser:: collapse(tStepPtr newStep, const ColourSinglet & cs, const tPVector & tagged) const { // Produce the hadron to collapse into, set its momentum to the one // of the collapsing cluster and generate the mass to be set. tcPDPtr hd = getHadron(cs); LorentzMomentum pc = cs.momentum(); PPtr h = hd->produceParticle(pc); Energy mh = hd->generateMass(); // Select the partons to be used in momentum compensation tPVector comp = getCompensators(mh, cs, tagged, newStep); if ( comp.empty() ) { if ( errorlevel ) throw ClusterException(*this) << "Could not find particles to shuffle momentum." << errorlevel; h->set5Momentum(Lorentz5Momentum(pc, mh)); } else { // Boost the hadron and the compensating particles into their cms // with the hadon along the z-axis. comp.push_back(h); LorentzRotation R = Utilities::boostToCM(comp.begin(), comp.end(), comp.end() - 1).inverse(); // Give the hadron and the compensators their correct mass and // momentum and bost back LorentzMomentum pcomp = Utilities::sumMomentum(comp.begin(), comp.end() - 1); Energy2 s = (pcomp + h->momentum()).m2(); Energy pnew = SimplePhaseSpace::getMagnitude(s, mh, pcomp.m()); h->set5Momentum(R*Lorentz5Momentum(ZERO, ZERO, pnew, sqrt(sqr(pnew) + sqr(mh)), mh)); comp.pop_back(); R = R*LorentzRotation(0.0, 0.0, -(pcomp.e()*pcomp.z() + sqrt(sqr(pnew) + pcomp.m2())*pnew)/ (sqr(pnew) + sqr(pcomp.e()))); Utilities::transform(comp, R); } // Add the new particle to the step. if ( !newStep-> addDecayProduct(cs.partons().begin(), cs.partons().end(), h) ) { throw ClusterException(*this) << "Could not add decay products to the new step" << Exception::abortnow; } } bool ClusterCollapser:: collapse2(tStepPtr newStep, const ColourSinglet & cs) const { // First get the two particles into which to decay the cluster. tcPDPair pdp = getHadrons(cs); PVector h(2); h[0] = pdp.first->produceParticle(); h[1] = pdp.second->produceParticle(); // Check the invariant mass of the cluster and return false if there // was not enough energy. LorentzMomentum pc = cs.momentum(); Energy2 s = pc.m2(); if ( h[0]->mass() + h[1]->mass() >= Energy(sqrt(s)) ) return false; // Now set the momenta of the hadrons (distributed isotropically in // the cluster cm system). SimplePhaseSpace::CMS(s, h[0], h[1]); Utilities::transform(h, LorentzRotation(pc.boostVector())); // Add the hadrons as decay products of the partons in the // cluster. Returns false if it fails (although throwing an // exception may be more appropriate). if ( !newStep->addDecayProduct(cs.partons().begin(), cs.partons().end(), h.begin(), h.end()) ) { throw ClusterException(*this) << "Could not add decay products to the new step" << Exception::abortnow; } return true; } tcPDPair ClusterCollapser::getHadrons(const ColourSinglet & cs) const { tcPDPair ret; if ( cs.nPieces() == 3 ) { // This is a string with a junction. First find the tiplets. tcPDVector quarks = cs.getTripletData(); if ( quarks.size() == 3 ) { // Three-quark junction. Select a quark to join into a meson // with a randomly chosed flavour. int i = UseRandom::irnd(3); tcPDPtr q = pickFlavour(); if ( quarks[i]->iColour() == q->iColour() ) q = q->CC(); ret.first = flavGen->getHadron(quarks[i], q); quarks[i] = q->CC(); ret.second = flavGen->getBaryon(quarks[0], quarks[1], quarks[2]); } else if ( errorlevel ) throw ClusterException(*this) << "Too many diquarks in a junction string." << errorlevel; } else if ( cs.nPieces() != 1 ) { throw ClusterException(*this) << "Inconsistent number of string pieces in a cluster" << Exception::abortnow; } else if ( cs.piece(1).front()->data().iColour() == PDT::Colour8 ) { // This was a closed gluon loop. Create two random flavours. tcPDPtr q1 = pickFlavour(); tcPDPtr q2 = pickFlavour(); ret.first = flavGen->getHadron(q1, q2->CC()); ret.second = flavGen->getHadron(q1, q2->CC()); } else { // This was a simple flat string. Pick a new flavour. tcPDPtr q = pickFlavour(); if ( cs.piece(1).front()->data().iColour() == q->iColour() ) q = q->CC(); ret.first = flavGen->getHadron(cs.piece(1).front()->dataPtr(), q); ret.second = flavGen->getHadron(cs.piece(1).back()->dataPtr(), q->CC()); } if ( !ret.first || !ret.second ) throw ClusterException(*this) << "Could not generate hadrons from flavours " << cs.piece(1).front()->id() << " and " << cs.piece(1).back()->id() << "." << Exception::runerror; return ret; } tcPDPtr ClusterCollapser::pickFlavour() const { return getParticleData(2 + rndsign(1.0, 1.0, pStrange)); } tcPDPtr ClusterCollapser::getHadron(const ColourSinglet & cs) const { if ( cs.nPieces() == 3 ) { // This is a string with a junction. First find the tiplets. tcPDVector quarks = cs.getTripletData(); if ( quarks.size() == 3 ) { return flavGen->getBaryon(quarks[0], quarks[1], quarks[2]); } else if ( errorlevel ) throw ClusterException(*this) << "Too many diquarks in a junction string." << errorlevel; } else if ( cs.nPieces() != 1 ) { throw ClusterException(*this) << "Inconsistent number of string pieces in a cluster" << Exception::abortnow; } else if ( cs.piece(1).front()->data().iColour() == PDT::Colour8 ) { // This was a closed gluon loop. Create a random flavour. tcPDPtr q = pickFlavour(); return flavGen->getHadron(q, q->CC()); } // This was a simple flat string. return flavGen->getHadron(cs.piece(1).front()->dataPtr(), cs.piece(1).back()->dataPtr()); } void ClusterCollapser::persistentOutput(PersistentOStream & os) const { os << ounit(theEnergyCut, GeV) << theNTry2 << flavGen << oenum(errorlevel) << pStrange; } void ClusterCollapser::persistentInput(PersistentIStream & is, int) { is >> iunit(theEnergyCut, GeV) >> theNTry2 >> flavGen >> ienum(errorlevel) >> pStrange; } ClassDescription ClusterCollapser::initClusterCollapser; // Definition of the static class description member. void ClusterCollapser::Init() { static ClassDocumentation documentation ("The ThePEG::ClusterCollapser class can either be used as a " "preprocessor of a string fragmentation handler, or as a separate" "step handler to collapse small colour singlet systems of partons " "into one or two particles."); static Parameter interfaceEnergyCut ("EnergyCut", "If the invariant mass of a cluster, minus the constituent masses of its " "partons is below this cut (in GeV), it will be collapsed into one " "or two particles.", &ClusterCollapser::theEnergyCut, GeV, 1.0*GeV, ZERO, 10.0*GeV, false, false, true); static Parameter interfaceNTry2 ("NTry2", "The number of attempts to collapse a cluster into two particles, " "before it is collapsed into one particle.", &ClusterCollapser::theNTry2, 2, 0, 100, false, false, true); static Parameter interfacePStrange ("pStrange", "The relative probability to produce a s-sbar pair in a split as " "compared to a u-ubar or d-dbar pair.", &ClusterCollapser::pStrange, 1.0/3.0, 0.0, 2.0, false, false, true); static Switch interfaceLevel ("ErrorLevel", "What to do if a cluster could not be collapsed, or if momentum " "could not be conserved.", &ClusterCollapser::errorlevel, Exception::eventerror, true, false); static SwitchOption interfaceLevelNothing (interfaceLevel, "Nothing", "Do nothing, clusters may not collapse or momentum may not be conserved.", Exception::Severity(0)); static SwitchOption interfaceLevelWarning (interfaceLevel, "Warning", "Report a warning, clusters may not collapse or momentum may not " "be conserved.", Exception::warning); static SwitchOption interfaceLevelEventError (interfaceLevel, "EventError", "Discard the whole event.", Exception::eventerror); static SwitchOption interfaceLevelRunError (interfaceLevel, "RunError", "End the run, printout the offending event.", Exception::runerror); static SwitchOption interfaceLevelAbort (interfaceLevel, "Abort", "Abort and dump core.", Exception::abortnow); static Reference interfaceFlavGen ("FlavourGenerator", "The object used to combine quarks and diquarks into hadrons.", &ClusterCollapser::flavGen, true, false, true, false); interfaceEnergyCut.rank(10); interfacePStrange.rank(9); interfaceFlavGen.rank(8); interfaceNTry2.rank(7); interfaceLevel.rank(6); } thepeg-1.8.0.orig/Handlers/ZGenerator.cc0000644000175000017500000000202311747772425016273 0ustar sunsun// -*- C++ -*- // // ZGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // //$Id: ZGenerator.cc 2274 2011-02-08 13:29:29Z dgrell $ // ---------------------------------------------------- // // This is the implementation of the non-inlined, non-templated member // functions of the ZGenerator class. // #include "ZGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractClassDescription ZGenerator::initZGenerator; void ZGenerator::Init(){ static ClassDocumentation documentation ("The base class for all classes implementing models to generate the " "momentum fraction, \\f$z\\f$, taken by hadrons produced in a " "hadronization scenario."); } thepeg-1.8.0.orig/Handlers/StepHandler.cc0000644000175000017500000000202311747772425016424 0ustar sunsun// -*- C++ -*- // // StepHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StepHandler class. // #include "StepHandler.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; StepHandler::~StepHandler() {} void StepHandler::eventHandler(tEHPtr eh) { theEventHandler = eh; theNewStep = tStepPtr(); theCurrentStep = eh->currentStep(); } void StepHandler::createNewStep() { useMe(); theNewStep = eventHandler()->newStep(this); } AbstractNoPIOClassDescription StepHandler::initStepHandler; void StepHandler::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::StepHandler class"); } thepeg-1.8.0.orig/Handlers/PtGenerator.h0000644000175000017500000000416011747772425016313 0ustar sunsun// -*- C++ -*- // // PtGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PtGenerator_H #define ThePEG_PtGenerator_H // This is the declaration of the PtGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Handlers/HandlerBase.h" namespace ThePEG { /** * PtGenerator is the base for all classes implementing alternative * models for transverse momentum generation. It inherits from the * HandlerBase which among other things provides forward access to the * random number object held by the EventGenerator object. * * @see \ref PtGeneratorInterfaces "The interfaces" * defined for PtGenerator. * @see HandlerBase * @see EventGenerator */ class PtGenerator: public HandlerBase { public: /** @name Virtual functions to be implemented by sub-classes. */ //@{ /** * Generate (\f$k_x, k_y\f$) components of the transverse * momentum. */ virtual TransverseMomentum generate() const =0; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractClassDescription initPtGenerator; /** * Private and non-existent assignment operator. */ PtGenerator & operator=(const PtGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of PtGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of PtGenerator. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * PtGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::PtGenerator"; } }; /** @endcond */ } #endif /* ThePEG_PtGenerator_H */ thepeg-1.8.0.orig/Handlers/HandlerGroup.h0000644000175000017500000004125111747772425016455 0ustar sunsun// -*- C++ -*- // // HandlerGroup.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HandlerGroup_H #define ThePEG_HandlerGroup_H // This is the declaration of the HandlerGroup class. #include "ThePEG/Config/ThePEG.h" // #include "HandlerGroup.fh" // #include "HandlerGroup.xh" namespace ThePEG { /** * HandlerGroupBase is the base class for the templated HandlerGroup * utility class to manage a group of StepHandlers. * * The derived StepHandler has a main StepHandler (CascadeHandler, * MultipleInteractionHandler, HadronizationHandler or DecayHandler) * while this bease class has a list of pre-hadlers and a list of * post-handlers. * * The HandlerGroup class is used in the * EventHandler and SubProcessHandler to manage the * post-sub-process handler, the cascade, multiple interaction, * hadronization and decay handler groups. When an event is generated, * after the main sub-process is performed, all handler groups are * processed in turn. In each group the pre-hadnlers are run first, * followed by the main handler (which may be run several times is * more than one Hint has been specified) and finally the * post-handlers are run. * * When a group is initialised before each run, an auxilliary * HandlerGroupBase object may be specified to override the default * handlers in this group. * * @see HandlerGroup */ class HandlerGroupBase { public: /** Associate a StepHandler with a Hint object. */ typedef pair StepWithHint; /** A vector of StepHandler objects. */ typedef vector StepVector; /** A vector of StepHandler objects associated with Hint objects. */ typedef vector StepHintVector; /** A vector of Hint objects. */ typedef deque HintVector; public: /** * Default constructor. */ HandlerGroupBase(); /** * Destructor. */ virtual ~HandlerGroupBase(); /** * Returns true if current selections in this group is empty. */ bool empty() const { return isEmpty; } /** * Initialize, taking the default StepHandlers as the current ones, * possibly overridden by the default ones in the auxilliary group * supplied in the argument. */ void init(const HandlerGroupBase & ext) { clear(); refillDefaults(ext); } /** * Return the next step; */ StepWithHint next(); /** * Add a step handler, \a sh to the current list of * pre-handlers. Optionally a \a hint may be specified. If the main * handler has already been executed, the object is reinitialized * using \a ext to override defaults. */ void addPreHandler(tStepHdlPtr sh, tHintPtr hint, const HandlerGroupBase & ext); /** * Add a step handler, \a sh, to the current list of * post-handlers. Optionally a \a hint may be specified. If the main * handler has already been executed, the object is reinitialized * using \a ext to override defaults. */ void addPostHandler(tStepHdlPtr sh, tHintPtr hint, const HandlerGroupBase &); /** * Add a \a hint to the currently selected main handler. If the main * handler has already been executed, the object is reinitialized * using \a ext to override defaults. */ void addHint(tHintPtr hint, const HandlerGroupBase & ext); /** * Return a reference to the list of default pre-handlers. */ StepVector & preHandlers() { return theDefaultPreHandlers; } /** * Return a reference to the list of default pre-handlers. */ const StepVector & preHandlers() const { return theDefaultPreHandlers; } /** * Return a pointer to the default main handler. */ virtual tStepHdlPtr defaultHandler() const = 0; /** * Return a reference to the list of default post-handlers. */ StepVector & postHandlers() { return theDefaultPostHandlers; } /** * Return a reference to the list of default post-handlers. */ const StepVector & postHandlers() const { return theDefaultPostHandlers; } /** * Return a pointer to the current main handler. */ virtual tStepHdlPtr handler() const = 0; /** * Unset the current main handler. */ virtual void setHandler() = 0; /** * Set the current main handler, but also refill the current pre- * and post- handlers with the defaults from \a ext. */ virtual bool setHandler(tStepHdlPtr, const HandlerGroupBase & ext) = 0; /** * Set the current main handler. If the null pointer use the default * main handler. */ virtual void refillDefaultHandler(tStepHdlPtr) = 0; /** * Fill main, pre- and post- handlers with the default ones. The * default handlers in the argument takes precedence to this. */ void refillDefaults(const HandlerGroupBase &); /** * Clear all current handlers, but don't touch the default ones. */ virtual void clear(); /** * Return the base class name of the main handler type. */ virtual string handlerClass() const = 0; /** * Utility function used for the interface. */ void interfaceSetPrehandler(StepHdlPtr p, int i); /** * Utility function used for the interface. */ void interfaceInsertPrehandler(StepHdlPtr p, int i); /** * Utility function used for the interface. */ void interfaceErasePrehandler(int i); /** * Utility function used for the interface. */ vector interfaceGetPrehandlers() const; /** * Utility function used for the interface. */ void interfaceSetPosthandler(StepHdlPtr p, int i); /** * Utility function used for the interface. */ void interfaceInsertPosthandler(StepHdlPtr p, int i); /** * Utility function used for the interface. */ void interfaceErasePosthandler(int i); /** * Utility function used for the interface. */ vector interfaceGetPosthandlers() const; /** * Write to persistent streams. */ virtual void write(PersistentOStream &) const; /** * Read from persistent streams. */ virtual void read(PersistentIStream &); protected: /** * The copy constructor is only used via subclasses. */ HandlerGroupBase(const HandlerGroupBase &); /** * True if the current handlers are empty. */ bool isEmpty; private: /** * Add handlers from the def vector to the current, supplying them * with default hints. */ void checkInsert(StepHintVector & current, const StepVector & def); protected: /** * The default pre-handlers with hints. */ StepVector theDefaultPreHandlers; /** * The default post-handlers with hints. */ StepVector theDefaultPostHandlers; /** * The current pre-handlers with hints. */ StepHintVector thePreHandlers; /** * The current hints for the main handler. */ HintVector theHints; /** * The current post-handlers with hints. */ StepHintVector thePostHandlers; private: /** * Assignment is private. */ HandlerGroupBase & operator=(const HandlerGroupBase &); }; /** * HandlerGroup is a templated utility class to manage a * group of StepHandlers. All HandlerGroup * classes are derived from the HandlerGroupBase class. As * an example the specialization * HandlerGroup keeps a * CascadeHandler object and associated pre- and * post- StepHandlers, defining shich steps should be * performed before the perturbative cascade, which object should be * used for the cascade and which steps should be performed after. * * The HandlerGroup keesp both a default main handler and * the corresponding default pre- and post- handlers as well as the * main handler and pre/post hadlers chosen for the current event. The * current handlers are accompanied by Hints. Handlers which are * copied from the default ones are accompanied by the default Hint, * while handlers supplied from the outside may be accompanied by any * kind of hint. The main handler can be supplied with several hints, * the pre- and post- handlers may only have one hint each. * * The HandlerGroup class is used in the * EventHandler and SubProcessHandler to manage the * post-sub-process handler, the cascade, multiple interaction, * hadronization and decay handler groups. * * @see EventHandler * @see SubProcessHandler * @see StepHandler * @see CascadeHandler * @see MultipleInteractionHandler * @see HadronizationHandler * @see DecayHandler * */ template class HandlerGroup: public HandlerGroupBase { public: /** A pointer to the template argument class. */ typedef typename Ptr::pointer HdlPtr; /** A transient pointer to the template argument class. */ typedef typename Ptr::transient_pointer tHdlPtr; public: /** * Destructor. */ virtual ~HandlerGroup(); /** * Set the current main handler. Also refill the current pre- and * post- handlers with the defaults from \a ext. */ virtual bool setHandler(tStepHdlPtr, const HandlerGroupBase & ext); /** * Unset the current main handler. */ virtual void setHandler() { theHandler = HdlPtr(); } /** * Return a pointer to the current main handler. */ virtual tStepHdlPtr handler() const { return dynamic_ptr_cast(theHandler); } /** * Return a pointer to the default main handler. */ virtual tStepHdlPtr defaultHandler() const { return dynamic_ptr_cast(theDefaultHandler); } /** * Set the current main handler. If the null pointer use the default * main handler. */ virtual void refillDefaultHandler(tStepHdlPtr); /** * Clear all current handlers, but don't touch the default ones. */ virtual void clear(); /** * Return the base class name of the main handler type. */ virtual string handlerClass() const; /** * Utility function used for the interface. */ void interfaceSetHandler(HdlPtr); /** * Utility function used for the interface. */ HdlPtr interfaceGetHandler() const; /** * Write to persistent streams. */ virtual void write(PersistentOStream & os) const { os << theDefaultHandler << theHandler; HandlerGroupBase::write(os); } /** * Read from persistent streams. */ virtual void read(PersistentIStream & is) { is >> theDefaultHandler >> theHandler; HandlerGroupBase::read(is); } private: /** * The default main handler. */ HdlPtr theDefaultHandler; /** * The current main handler. */ HdlPtr theHandler; private: /** * Assignment is private. */ HandlerGroup & operator=(const HandlerGroup &); }; /** Namespace to encapsulate enums related to HandlerGroups. */ namespace Group { /** * Enumeration for the type of HandlerGroups. */ enum Handler { subproc, /**< The sub-process group. */ cascade, /**< The CascadeHandler group. */ multi, /**< The MultipleInteractionHandler group. */ hadron, /**< The HadronizationHandler group. */ decay /**< The DecayHandler group. */ }; /** Enumeration for the type of step handler */ enum Level { before, /**< A pre-handler. */ main, /**< The mainhandler. */ after /**< A post-handler. */ }; } /** Output a HandlerGroup to a PersistentOStream. */ template inline PersistentOStream & operator<<(PersistentOStream & os, const HandlerGroup & hg) { hg.write(os); return os; } /** Input a HandlerGroup from a PersistentIStream. */ template inline PersistentIStream & operator>>(PersistentIStream & is, HandlerGroup & hg) { hg.read(is); return is; } } /** Macro for declaring a prepost group */ #define ThePEG_DECLARE_PREPOST_GROUP(HandlerClass,prepost) \ /** Utility function for the interface. */ \ void interfaceSet##prepost##HandlerClass(StepHdlPtr, int); \ /** Utility function for the interface. */ \ void interfaceInsert##prepost##HandlerClass(StepHdlPtr, int); \ /** Utility function for the interface. */ \ void interfaceErase##prepost##HandlerClass(int); \ /** Utility function for the interface. */ \ vector interfaceGet##prepost##HandlerClass() const /** Macro for declaring a group interface */ #define ThePEG_DECLARE_GROUPINTERFACE(HandlerClass,ptr) \ ThePEG_DECLARE_PREPOST_GROUP(HandlerClass,Pre); \ /** Utility function for the interface. */ \ void interfaceSet##HandlerClass(ptr); \ /** Utility function for the interface. */ \ ptr interfaceGet##HandlerClass() const; \ ThePEG_DECLARE_PREPOST_GROUP(HandlerClass,Post) /** Macro for implementing a prepost group. */ #define ThePEG_IMPLEMENT_PREPOST_GROUP(ThisClass,HandlerClass,member,pp) \ void ThisClass::interfaceSet##pp##HandlerClass(StepHdlPtr p , int i) { \ member.interfaceSet##pp##handler(p,i); \ } \ void ThisClass::interfaceInsert##pp##HandlerClass(StepHdlPtr p, int i) { \ member.interfaceInsert##pp##handler(p,i); \ } \ void ThisClass::interfaceErase##pp##HandlerClass(int i) { \ member.interfaceErase##pp##handler(i); \ } \ vector ThisClass::interfaceGet##pp##HandlerClass() const { \ return member.interfaceGet##pp##handlers(); \ } /** Macro for implementing a group interface. */ #define ThePEG_IMPLEMENT_GROUPINTERFACE(ThisClass,HandlerClass,member,ptr) \ ThePEG_IMPLEMENT_PREPOST_GROUP(ThisClass,HandlerClass,member,Pre) \ void ThisClass::interfaceSet##HandlerClass(ptr p) { \ member.interfaceSetHandler(p); \ } \ ptr ThisClass::interfaceGet##HandlerClass() const { \ return member.interfaceGetHandler(); \ } \ ThePEG_IMPLEMENT_PREPOST_GROUP(ThisClass,HandlerClass,member,Post) \ /** Macro for declaring prepost objects. */ #define ThePEG_DECLARE_PREPOST_OBJECTS(ThisClass,HandlerClass,pp,ba) \ static RefVector interface##pp##HandlerClass \ (#pp #HandlerClass "s", \ "A list of handlers to be called " #ba " the " #HandlerClass ". " \ "If handler objects are specified in a EventHandler and " \ "the SubProcessHandler chosen in a given collision also specifies some, " \ "the latter will caled first.", \ 0, 0, false, false, true, false, \ &ThisClass::interfaceSet##pp##HandlerClass, \ &ThisClass::interfaceInsert##pp##HandlerClass, \ &ThisClass::interfaceErase##pp##HandlerClass, \ &ThisClass::interfaceGet##pp##HandlerClass) /** Macro for declaring group interface objects. */ #define ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(ThisClass,HandlerClass) \ ThePEG_DECLARE_PREPOST_OBJECTS(ThisClass,HandlerClass,Pre, before); \ static Reference interface ## HandlerClass \ (#HandlerClass, \ "The " #HandlerClass " object used in this " #ThisClass ". " \ "If a " #HandlerClass " object is specified in a EventHandler and " \ "the SubProcessHandler chosen in a given collision also specifies one," \ "the latter will be used.", \ 0, false, false, true, true, \ &ThisClass::interfaceSet ## HandlerClass, \ &ThisClass::interfaceGet ## HandlerClass); \ ThePEG_DECLARE_PREPOST_OBJECTS(ThisClass,HandlerClass,Post, after) #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "HandlerGroup.tcc" #endif #endif /* ThePEG_HandlerGroup_H */ thepeg-1.8.0.orig/Handlers/MultipleInteractionHandler.h0000644000175000017500000000417411747772425021357 0ustar sunsun// -*- C++ -*- // // MultipleInteractionHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MultipleInteractionHandler_H #define ThePEG_MultipleInteractionHandler_H // This is the declaration of the MultipleInteractionHandler class. #include "StepHandler.h" namespace ThePEG { /** * The MultipleInteractionHandler is the base class of all * handlers implementing models for multiple interactions. It is * derived from the more general StepHandler class, * and does not introduce more functioanality as it stands. * * @see \ref MultipleInteractionHandlerInterfaces "The interfaces" * defined for MultipleInteractionHandler. * @see StepHandler * @see EventHandler * @see SubProcessHandler */ class MultipleInteractionHandler: public StepHandler { public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initMultipleInteractionHandler; /** * Private and non-existent assignment operator. */ MultipleInteractionHandler & operator=(const MultipleInteractionHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of MultipleInteractionHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of MultipleInteractionHandler. */ typedef StepHandler NthBase; }; /** * This template specialization informs ThePEG about the name of the * MultipleInteractionHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::MultipleInteractionHandler"; } }; /** @endcond */ } #endif /* ThePEG_MultipleInteractionHandler_H */ thepeg-1.8.0.orig/Handlers/EventHandler.fh0000644000175000017500000000047111747772425016607 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_EventHandler_FH #define ThePEG_EventHandler_FH // // This is the forward declaration of the EventHandler class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class EventHandler; ThePEG_DECLARE_CLASS_POINTERS(EventHandler,EHPtr); } #endif /* ThePEG_EventHandler_FH */ thepeg-1.8.0.orig/Handlers/HadronizationHandler.cc0000644000175000017500000000146011747772425020326 0ustar sunsun// -*- C++ -*- // // HadronizationHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HadronizationHandler class. // #include "HadronizationHandler.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription HadronizationHandler::initHadronizationHandler; void HadronizationHandler::Init() { static ClassDocumentation documentation ("This is the base class to be used by all models for hadronization."); } thepeg-1.8.0.orig/Handlers/StandardEventHandler.cc0000644000175000017500000005767611747772425020303 0ustar sunsun// -*- C++ -*- // // StandardEventHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StandardEventHandler class. // #include "StandardEventHandler.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Handlers/StdXCombGroup.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/LoopGuard.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/MEGroup.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Handlers/SamplerBase.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Config/algorithm.h" #include #include using namespace ThePEG; StandardEventHandler::StandardEventHandler() : EventHandler(false), theBinStrategy(2), weightedEvents(false), theLumiDim(0) { setupGroups(); } StandardEventHandler::~StandardEventHandler() {} void StandardEventHandler::reject(double w) { tStdXCombPtr last = dynamic_ptr_cast(lastXCombPtr()); if ( !last ) return; last->reject(w); } void StandardEventHandler::reweight(double factor) const { tStdXCombPtr last = dynamic_ptr_cast(lastXCombPtr()); if ( !currentEvent() || !last ) return; double weight = currentEvent()->weight(); last->reweight(weight,factor*weight); currentEvent()->weight(factor*weight); for ( map::iterator w = currentEvent()->optionalWeights().begin(); w != currentEvent()->optionalWeights().end(); ++w ) w->second *= factor; } void StandardEventHandler::doupdate() { EventHandler::doupdate(); bool redo = touched(); UpdateChecker::check(theIncomingA, redo); UpdateChecker::check(theIncomingB, redo); for_each(subProcesses(), UpdateChecker(redo)); if ( !redo ) return; theIncoming.first = theIncomingA; theIncoming.second = theIncomingB; for ( SubHandlerList::iterator sit = subProcesses().begin(); sit != subProcesses().end(); ++sit ) if ( !(**sit).pExtractor()->canHandle(incoming()) ) throw StandardEventHandlerUpdateException() << "Cannot use the parton extractor '" << (**sit).pExtractor()->name() << "' in the SubProcessHandler '" << (**sit).name() << "' in the " << "StandardEventHandler '" << name() << "' since it cannot handle " << "the requested types of incoming particles (" << theIncomingA->name() << "," << theIncomingB->name() << ")."; } void StandardEventHandler::doinit() { EventHandler::doinit(); if ( !lumiFnPtr() ) throw StandardEventHandlerUpdateException() << "The StandardEventHandler '" << name() << "' does not have any " << "LuminosityFunction object assigned to it, which it needs to be " << "able to generate events." << Exception::warning; } IBPtr StandardEventHandler::clone() const { return new_ptr(*this); } IBPtr StandardEventHandler::fullclone() const { return new_ptr(*this); } void StandardEventHandler:: addME(Energy maxEnergy, tSubHdlPtr sub, tPExtrPtr extractor, tCutsPtr cuts, tCascHdlPtr ckkw, tMEPtr me, const PBPair & pBins, const PartonPairVec& allPBins) { typedef MEBase::DiagramVector DiagramVector; typedef map DiagramMap; cPDPair pin(pBins.first->parton(), pBins.second->parton()); DiagramVector diag = me->diagrams(); DiagramMap tdiag; DiagramMap tmdiag; for ( int i = 0, N = diag.size(); i < N; ++i ) { cPDPair din(diag[i]->partons()[0], diag[i]->partons()[1]); if (!me->noMirror()) if ( din.first->id() < din.second->id() ) swap(din.first, din.second); if ( din == pin ) tdiag[diag[i]->getTag()].push_back(diag[i]); if (!me->noMirror()) if ( din.first == pin.second && din.second == pin.first ) tmdiag[diag[i]->getTag()].push_back(diag[i]); } if ( tdiag.empty() ) tdiag = tmdiag; for ( DiagramMap::iterator dit = tdiag.begin(); dit != tdiag.end(); ++dit ) { cPDPair din(dit->second.back()->partons()[0], dit->second.back()->partons()[1]); // check assert(me->noMirror() ? din == pin : true); StdXCombPtr xcomb; tMEGroupPtr megroup = dynamic_ptr_cast(me); if (!megroup) xcomb = new_ptr(StandardXComb(maxEnergy, incoming(), this, sub, extractor, ckkw, pBins, cuts, me, dit->second, din != pin)); else { StdXCombGroupPtr xcgroup = new_ptr(StdXCombGroup(maxEnergy, incoming(), this, sub, extractor, ckkw, pBins, cuts, megroup, dit->second, din != pin)); xcgroup->build(allPBins); xcomb = xcgroup; } if ( xcomb->checkInit() ) xCombs().push_back(xcomb); else generator()->logWarning( StandardEventHandlerInitError() << "The matrix element '" << xcomb->matrixElement()->name() << "' cannot generate the diagram '" << dit->first << "' when used together with the parton extractor '" << xcomb->pExtractor()->name() << "'.\nThe corresponding diagram is switched off, " << "check the collision energy and/or the cuts." << Exception::warning); } } void StandardEventHandler::initGroups() { tStdXCombPtr lastXC = dynamic_ptr_cast(lastXCombPtr()); if ( lastXC ) optGroups = lastXC->subProcessHandler()->groups(); EventHandler::initGroups(); } tCollPtr StandardEventHandler::performCollision() { tStdXCombPtr lastXC = dynamic_ptr_cast(lastXCombPtr()); if ( CKKWHandler() ) CKKWHandler()->setXComb(lastXCombPtr()); lastExtractor()->select(lastXC); currentCollision(new_ptr(Collision(lastParticles(), currentEvent(), this))); if ( currentEvent() ) currentEvent()->addCollision(currentCollision()); currentStep(new_ptr(Step(currentCollision()))); currentCollision()->addStep(currentStep()); currentStep()->addSubProcess(lastXC->construct()); lastExtractor()->construct(lastXC->partonBinInstances(), currentStep()); if ( !lastCuts().passCuts(*currentCollision()) ) throw Veto(); initGroups(); if ( ThePEG_DEBUG_ITEM(1) ) { if ( currentEvent() ) generator()->logfile() << *currentEvent(); else generator()->logfile() << *currentCollision(); } return continueCollision(); } void StandardEventHandler::setScale(Energy2 scale) { lastXCombPtr()->lastScale(scale); } void StandardEventHandler::initialize() { theLumiDim = lumiFn().nDim(incoming()); Energy maxEnergy = lumiFn().maximumCMEnergy(); xCombs().clear(); xSecs().clear(); cuts()->initialize(sqr(maxEnergy), lumiFn().Y()); for ( SubHandlerList::const_iterator sit = subProcesses().begin(); sit != subProcesses().end(); ++sit ) { CutsPtr kincuts = (**sit).cuts()? (**sit).cuts(): cuts(); if ( (**sit).cuts() ) kincuts->initialize(sqr(maxEnergy), lumiFn().Y()); PExtrPtr pextract = (**sit).pExtractor(); tCascHdlPtr ckkw = (**sit).CKKWHandler(); if ( !ckkw ) ckkw = CKKWHandler(); PartonPairVec vpc = pextract->getPartons(maxEnergy, incoming(), *kincuts); // The last parton bin pair was in fact the bins corresponding to // the incoming particles, so we remove them, but save them to // keep them referenced. PBPair orig = vpc.back(); vpc.pop_back(); for ( PartonPairVec::iterator ppit = vpc.begin(); ppit != vpc.end(); ++ppit ) for ( MEVector::const_iterator meit = (**sit).MEs().begin(); meit != (**sit).MEs().end(); ++meit ) { addME(maxEnergy, *sit, pextract, kincuts, ckkw, *meit, *ppit,vpc); } } xSecs().resize(xCombs().size()); theMaxDims.clear(); switch ( binStrategy() ) { case 0: { theMaxDims.push_back(0); for ( int i = 0, N = xCombs().size(); i < N; ++i ) theMaxDims[0] = max(theMaxDims[0], xCombs()[i]->nDim()); break; } case 1: { for ( int i = 0, N = xCombs().size(); i < N; ++i ) theMEXMap[xCombs()[i]->matrixElement()].push_back(xCombs()[i]); MEXMap::const_iterator mei = theMEXMap.begin(); for ( int i = 0, N = theMEXMap.size(); i < N; ++i, ++mei) { theMaxDims.push_back(0); for ( int j = 0, M = mei->second.size(); j < M; ++j ) theMaxDims[i] = max(theMaxDims[i], mei->second[j]->nDim()); } break; } case 2: { for ( int i = 0, N = xCombs().size(); i < N; ++i ) theMaxDims.push_back(xCombs()[i]->nDim()); break; } } sampler()->setEventHandler(this); sampler()->initialize(); } CrossSection StandardEventHandler:: dSigDR(const pair ll, Energy2 maxS, int ibin, int nr, const double * r) { PPair inc = make_pair(incoming().first->produceParticle(), incoming().second->produceParticle()); SimplePhaseSpace::CMS(inc, maxS); XVector xv; switch ( binStrategy() ) { case 0: xv = xCombs(); break; case 1: { MEXMap::iterator mei = theMEXMap.begin(); for ( int i = 0; i < ibin; ++i) ++mei; xv = mei->second; break; } case 2: xv = XVector(1, xCombs()[ibin]); break; } xSecs().resize(xv.size()); for ( int i = 0, N = xv.size(); i < N; ++i ) xv[i]->prepare(inc); CrossSection sum = ZERO; for ( int i = 0, N = xv.size(); i < N; ++i ) xSecs()[i] = ( sum += xv[i]->dSigDR(ll, nr, r) ); return sum; } tStdXCombPtr StandardEventHandler::select(int bin, double & weight) { int i = upper_bound(xSecs().begin(), xSecs().end(), rnd()*xSecs().back()) - xSecs().begin(); tStdXCombPtr lastXC; switch ( binStrategy() ) { case 0: lastXC = xCombs()[i]; break; case 1: { MEXMap::iterator mei = theMEXMap.begin(); for ( int j = 0; j < bin; ++j) ++mei; lastXC = mei->second[i]; break; } case 2: lastXC = xCombs()[bin]; break; } // clean up the old XComb object before switching to a new one if ( theLastXComb && theLastXComb != lastXC ) theLastXComb->clean(); theLastXComb = lastXC; lastXC->matrixElement()->setXComb(lastXC); weight /= lastXC->matrixElement()->preWeight(); lastXC->select(weight); lastXC->accept(); return lastXC; } int StandardEventHandler::nBins() const { switch ( binStrategy() ) { case 0: return 1; case 1: return theMEXMap.size(); case 2: return xCombs().size(); } return -1; } struct Stat { Stat() : attempted(0), accepted(0), sumw(0.0), sumw2(), maxXSec(CrossSection()), totsum(0.0), totrerr() {} Stat(long att, long acc, double w, double w2, CrossSection x, double sumw, double genrerr) : attempted(att), accepted(acc), sumw(w), sumw2(w2), maxXSec(x), totsum(sumw), totrerr(genrerr) {} inline CrossSection xSec() const { return totsum >0.0? maxXSec*sumw/totsum: maxXSec; } inline CrossSection xSecErr() const { if ( totsum <= 0.0 ) return maxXSec; if ( sumw <= 0.0 ) return xSec(); return xSec()*sqrt(sqr(totrerr) + sumw2/sqr(sumw)); } long attempted; long accepted; double sumw; double sumw2; CrossSection maxXSec; double totsum; double totrerr; const Stat & operator+= (const Stat & s) { attempted += s.attempted; accepted += s.accepted; sumw += s.sumw; sumw2 += s.sumw2; totsum = max(totsum, s.totsum); if ( totsum > 0.0 ) maxXSec = max(maxXSec, s.maxXSec); else maxXSec += s.maxXSec; totrerr = s.totrerr; return *this; } }; void StandardEventHandler::statistics(ostream & os) const { if ( statLevel() == 0 ) return; map partonMap; map meMap; map extractMap; Stat tot; double genrerr = sampler()->integratedXSecErr()/sampler()->integratedXSec(); for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeights(), x.stats().sumWeights2(), sampler()->integratedXSec(), sampler()->sumWeights(), genrerr); partonMap[x.partons()] += s; meMap[x.matrixElement()] += s; extractMap[x.pExtractor()] += s; tot += s; } string line = string(78, '=') + "\n"; if ( tot.accepted <= 0 ) { os << line << "No events generated by event handler '" << name() << "'." << endl; return; } os << line << "Statistics for event handler \'" << name() << "\':\n" << " " << "generated number of Cross-section\n" << " " << " events attempts (nb)\n"; os << line << "Total (from weighted events): including vetoed events" << setw(23) << ouniterr(sampler()->integratedXSec(), sampler()->integratedXSecErr(), nanobarn) << endl; os << line << "Total (from unweighted events):" << setw(17) << tot.accepted << setw(13) << tot.attempted << setw(17) << ouniterr(tot.xSec(),tot.xSecErr() , nanobarn) << endl << line; if ( statLevel() == 1 ) return; os << "Per matrix element breakdown:\n"; for ( map::iterator i = meMap.begin(); i != meMap.end(); ++i ) { string n = i->first->name(); n.resize(37, ' '); os << n << setw(11) << i->second.accepted << setw(13) << i->second.attempted << setw(17) << ouniterr(i->second.xSec(), i->second.xSecErr(), nanobarn) << endl; } os << line; if ( statLevel() == 2 ) return; os << "Per parton extractor breakdown:\n"; for ( map::iterator i = extractMap.begin(); i != extractMap.end(); ++i ) { string n = i->first->name(); n.resize(37, ' '); os << n << setw(11) << i->second.accepted << setw(13) << i->second.attempted << setw(17) << ouniterr(i->second.xSec(), i->second.xSecErr(), nanobarn) << endl; } os << line; os << "Per incoming partons breakdown:\n"; for ( map::iterator i = partonMap.begin(); i != partonMap.end(); ++i ) { string n = i->first.first->PDGName() + " " + i->first.second->PDGName(); n.resize(37, ' '); os << n << setw(11) << i->second.accepted << setw(13) << i->second.attempted << setw(17) << ouniterr(i->second.xSec(), i->second.xSecErr(), nanobarn) << endl; } os << line; if ( statLevel() == 3 ) return; os << "Detailed breakdown:\n"; CrossSection xsectot = sampler()->integratedXSec()/sampler()->sumWeights(); for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; os << "(" << x.pExtractor()->name() << ") " << x.partons().first->PDGName() << " " << x.partons().second->PDGName() << " (" << x.matrixElement()->name() << " " << x.lastDiagram()->getTag() << ") " << endl << setw(48) << x.stats().accepted() << setw(13) << x.stats().attempts() << setw(17) << ouniterr(x.stats().sumWeights()*xsectot, sqrt(x.stats().sumWeights2())*xsectot, nanobarn) << endl; } os << line; } CrossSection StandardEventHandler::histogramScale() const { Stat tot; for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s; s = Stat(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeights(), x.stats().sumWeights2(), sampler()->integratedXSec(), sampler()->sumWeights(), 1.0); tot += s; } return tot.xSec()/tot.sumw; } CrossSection StandardEventHandler::integratedXSec() const { if ( sampler()->integratedXSec() == ZERO ) return sampler()->maxXSec(); Stat tot; for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s; s = Stat(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeights(), x.stats().sumWeights2(), sampler()->integratedXSec(), sampler()->sumWeights(), 1.0); tot += s; } return tot.xSec(); } CrossSection StandardEventHandler::integratedXSecErr() const { if ( sampler()->integratedXSec() == ZERO ) return sampler()->maxXSec(); Stat tot; double genrerr = sampler()->integratedXSecErr()/sampler()->integratedXSec(); for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s; s = Stat(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeights(), x.stats().sumWeights2(), sampler()->integratedXSec(), sampler()->sumWeights(), genrerr); tot += s; } return tot.xSecErr(); } CrossSection StandardEventHandler::integratedXSecNoReweight() const { if ( sampler()->integratedXSec() == ZERO ) return sampler()->maxXSec(); Stat tot; for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s; s = Stat(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeightsNoReweight(), x.stats().sumWeights2NoReweight(), sampler()->integratedXSec(), sampler()->sumWeights(), 1.0); tot += s; } return tot.xSec(); } CrossSection StandardEventHandler::integratedXSecErrNoReweight() const { if ( sampler()->integratedXSec() == ZERO ) return sampler()->maxXSec(); Stat tot; double genrerr = sampler()->integratedXSecErr()/sampler()->integratedXSec(); for ( int i = 0, N = xCombs().size(); i < N; ++i ) { const StandardXComb & x = *xCombs()[i]; Stat s; s = Stat(x.stats().attempts(), x.stats().accepted(), x.stats().sumWeightsNoReweight(), x.stats().sumWeights2NoReweight(), sampler()->integratedXSec(), sampler()->sumWeights(), genrerr); tot += s; } return tot.xSecErr(); } void StandardEventHandler::doinitrun() { EventHandler::doinitrun(); for ( SubHandlerList::iterator sit = subProcesses().begin(); sit != subProcesses().end(); ++sit ) (**sit).initrun(); sampler()->initrun(); for ( int i = 0, N = xCombs().size(); i < N; ++i ) xCombs()[i]->reset(); } CrossSection StandardEventHandler::dSigDR(const vector & r) { double jac = 1.0; pair ll = lumiFn().generateLL(&r[0], jac); Energy2 maxS = sqr(lumiFn().maximumCMEnergy())/exp(ll.first + ll.second); int bin = sampler()->lastBin(); CrossSection x = jac*lumiFn().value(incoming(), ll.first, ll.second) *dSigDR(ll, maxS, bin, nDim(bin) - lumiDim(), &r[lumiDim()]); return x; } EventPtr StandardEventHandler::generateEvent() { LoopGuard loopGuard(*this, maxLoop()); while (1) { loopGuard(); clean(); double weight = sampler()->generate(); tStdXCombPtr lastXC = select(sampler()->lastBin(), weight); try { lumiFn().select(lastXC); currentEventBoost() = lumiFn().getBoost(); currentEvent(new_ptr(Event(lastParticles(), this, generator()->runName(), generator()->currentEventNumber(), weight))); performCollision(); if ( !currentCollision() ) throw Veto(); currentEvent()->transform(currentEventBoost()); return currentEvent(); } catch (Veto) { reject(currentEvent()->weight()); } catch (Stop) { break; } catch (Exception &) { reject(currentEvent()->weight()); throw; } } return currentEvent(); } EventPtr StandardEventHandler::continueEvent() { if ( !generator() ) throw StandardEventHandlerInitError() << "The event handler '" << name() << "' had not been isolated " << "from the setup phase before it was used." << Exception::maybeabort; try { continueCollision(); } catch (Veto) { reject(currentEvent()->weight()); } catch (Stop) { } catch (Exception &) { reject(currentEvent()->weight()); throw; } return currentEvent(); } void StandardEventHandler::select(tXCombPtr newXComb) { EventHandler::select(newXComb); lastExtractor()->select(newXComb); } void StandardEventHandler::dofinish() { if ( theLastXComb ) theLastXComb->clean(); EventHandler::dofinish(); } ClassDescription StandardEventHandler::initStandardEventHandler; // void StandardEventHandler::setIncomingA(PDPtr p) { theIncomingA = p; theIncoming.first = p; } void StandardEventHandler::setIncomingB(PDPtr p) { theIncomingB = p; theIncoming.second = p; } void StandardEventHandler::Init() { static ClassDocumentation documentation ("This is the standard event handler to generate hard sub-processes " "within ThePEG. It must specify a pair of incoming particle beams " "in BeamA and BeamB " "and a suiteable LuminosityFunction. In " "addition at least one object describing the sub-processes to be " "generated must be specified in " "SubProcessHandlers."); static Reference interfaceIncomingA ("BeamA", "The type of particles in first beam", &StandardEventHandler::theIncomingA, false, false, true, false, &StandardEventHandler::setIncomingA); static Reference interfaceIncomingB ("BeamB", "The type of particles in second beam", &StandardEventHandler::theIncomingB, false, false, true, false, &StandardEventHandler::setIncomingB); static RefVector interfaceSubhandlers ("SubProcessHandlers", "The list of sub-process handlers used in this StandardEventHandler. ", &StandardEventHandler::theSubProcesses, 0, false, false, true, false); static Reference interfaceCuts ("Cuts", "Common kinematical cuts for this StandardEventHandler. These cuts " "may be overidden in individual sub-process handlers.", &StandardEventHandler::theCuts, false, false, true, false); static Switch interfaceBinStrategy ("BinStrategy", "The strategy to be used when sampling different ThePEG::XComb " "objects. An ThePEG::XComb objet represents a pair of incoming " "parton types as defined by a THePEG::PartonExtractor and a " "matrix element.", &StandardEventHandler::theBinStrategy, 2, false, false); static SwitchOption interfaceBinStrategy0 (interfaceBinStrategy, "AllAtOnce", "All bins are sampled together.", 0); static SwitchOption interfaceBinStrategy1 (interfaceBinStrategy, "PerME", "All bins which have the same matrix element object are sampled together.", 1); static SwitchOption interfaceBinStrategy2 (interfaceBinStrategy, "Individual", "All bins are sampled individually.", 2); static Switch interfaceWeighted ("Weighted", "If switched on, this event Handler will produce weighted events", &StandardEventHandler::weightedEvents, false, false); static SwitchOption interfaceWeightedTrue (interfaceWeighted, "On", "This EventHandler produces weighted events.", true); static SwitchOption interfaceWeightedFalse (interfaceWeighted, "Off", "This EventHandler produces unweighted events.", false); static Reference interfaceSampler ("Sampler", "The phase space sampler responsible for generating phase space" "points according to the cross section given by this event handler", &StandardEventHandler::theSampler, false, false, true, true); interfaceSubhandlers.rank(11); interfaceIncomingA.rank(3); interfaceIncomingB.rank(2); } void StandardEventHandler::persistentOutput(PersistentOStream & os) const { os << theIncomingA << theIncomingB << theSubProcesses << theCuts << theXCombs << ounit(theXSecs, nanobarn) << theBinStrategy << theMaxDims << theMEXMap << weightedEvents << theSampler << theLumiDim; } void StandardEventHandler::persistentInput(PersistentIStream & is, int) { is >> theIncomingA >> theIncomingB >> theSubProcesses >> theCuts >> theXCombs >> iunit(theXSecs, nanobarn) >> theBinStrategy >> theMaxDims>> theMEXMap >> weightedEvents >> theSampler >> theLumiDim; } thepeg-1.8.0.orig/Handlers/LuminosityFunction.cc0000644000175000017500000000644711747772425020113 0ustar sunsun// -*- C++ -*- // // LuminosityFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LuminosityFunction class. // #include "LuminosityFunction.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "LuminosityFunction.tcc" #endif using namespace ThePEG; IBPtr LuminosityFunction::clone() const { return new_ptr(*this); } IBPtr LuminosityFunction::fullclone() const { return new_ptr(*this); } LuminosityFunction::LuminosityFunction(Energy a, Energy b) : theBeamEMaxA(a), theBeamEMaxB(b) {} void LuminosityFunction::select(tXCombPtr xcomb) { theLastXComb = xcomb; } bool LuminosityFunction::canHandle(const cPDPair &) const { return true; } Energy LuminosityFunction::maximumCMEnergy() const { return sqrt(4.0*beamEMaxA()*beamEMaxB()); } LorentzRotation LuminosityFunction::getBoost() const { LorentzRotation r(0.0, 0.0, (beamEMaxA() - beamEMaxB())/ (beamEMaxA() + beamEMaxB())); return r; } double LuminosityFunction::Y() const { return 0.5*log(beamEMaxA()/beamEMaxB()); } int LuminosityFunction::nDim(const cPDPair &) const { return 0; } double LuminosityFunction:: value(const cPDPair &, double l1, double l2) const { return l1 == 0.0 && l2 == 0.0? 1.0: 0.0; } pair LuminosityFunction:: generateLL(const double *, double &) const { return make_pair(0.0, 0.0); } void LuminosityFunction::persistentOutput(PersistentOStream & os) const { os << theLastXComb << ounit(theBeamEMaxA, GeV) << ounit(theBeamEMaxB, GeV); } void LuminosityFunction::persistentInput(PersistentIStream & is, int) { is >> theLastXComb >> iunit(theBeamEMaxA, GeV) >> iunit(theBeamEMaxB, GeV); } ClassDescription LuminosityFunction::initLuminosityFunction; void LuminosityFunction::Init() { static ClassDocumentation documentation ("This base class should be used by all classes describing the luminosity " "and energy distribution of colliding particle beams."); static Parameter interfaceBeamEMaxA ("BeamEMaxA", "The maximum energy of the beam entering along the positive z-axis. " "Note that derived classes may shift the beams away from the z-axis.", &LuminosityFunction::theBeamEMaxA, GeV, 45.6*GeV, ZERO, ZERO, true, false, Interface::lowerlim); static Parameter interfaceBeamEMaxB ("BeamEMaxB", "The maximum energy of the beam entering along the negative z-axis. " "Note that derived classes may shift the beams away from the z-axis.", &LuminosityFunction::theBeamEMaxB, GeV, 45.6*GeV, ZERO, ZERO, true, false, Interface::lowerlim); interfaceBeamEMaxA.rank(10); interfaceBeamEMaxB.rank(9); interfaceBeamEMaxA.setHasDefault(false); interfaceBeamEMaxB.setHasDefault(false); } thepeg-1.8.0.orig/Handlers/EventManipulator.cc0000644000175000017500000000141611747772425017515 0ustar sunsun// -*- C++ -*- // // EventManipulator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the EventManipulator class. // #include "EventManipulator.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription EventManipulator::initEventManipulator; void EventManipulator::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::EventManipulator class"); } thepeg-1.8.0.orig/Handlers/Hint.cc0000644000175000017500000000251011747772425015116 0ustar sunsun// -*- C++ -*- // // Hint.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Hint class. // #include "Hint.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/Particle.h" using namespace ThePEG; tPVector Hint::tagged(const Step & s) const { tPVector tags; if ( stop() ) return tags; if ( !tagged() ) { tags.insert(tags.end(), s.particles().begin(), s.particles().end()); return tags; } for ( int i = 0, N = theTagged.size(); i < N; ++i ) { tPPtr p = theTagged[i]; while ( !s.find(p) && p->next() ) p = p->next(); if ( s.find(p) ) tags.push_back(p); } return tags; } void Hint::persistentOutput(PersistentOStream & os) const { os << ounit(theScale, GeV2) << theStopFlag << theTagged; } void Hint::persistentInput(PersistentIStream & is, int) { is >> iunit(theScale, GeV2) >> theStopFlag >> theTagged; } ClassDescription Hint::initHint; void Hint::Init() {} Hint Hint::theDefaultHint; thepeg-1.8.0.orig/Handlers/SubProcessHandler.cc0000644000175000017500000001527311747772425017614 0ustar sunsun// -*- C++ -*- // // SubProcessHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SubProcessHandler class. // #include "SubProcessHandler.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Handlers/MultipleInteractionHandler.h" #include "ThePEG/Handlers/HadronizationHandler.h" #include "ThePEG/Handlers/DecayHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/ReweightBase.h" using namespace ThePEG; SubProcessHandler::~SubProcessHandler() {} SubProcessHandler::SubProcessHandler() { setupGroups(); } SubProcessHandler::SubProcessHandler(const SubProcessHandler & sph) : HandlerBase(sph), thePartonExtractor(sph.thePartonExtractor), theMEs(sph.theMEs), theCuts(sph.theCuts), theSubprocessGroup(sph.theSubprocessGroup), theCascadeGroup(sph.theCascadeGroup), theMultiGroup(sph.theMultiGroup), theHadronizationGroup(sph.theHadronizationGroup), theDecayGroup(sph.theDecayGroup), reweights(sph.reweights), preweights(sph.preweights) { setupGroups(); } void SubProcessHandler::setupGroups() { theGroups.clear(); theGroups.push_back(&theSubprocessGroup); theGroups.push_back(&theCascadeGroup); theGroups.push_back(&theMultiGroup); theGroups.push_back(&theHadronizationGroup); theGroups.push_back(&theDecayGroup); } IBPtr SubProcessHandler::clone() const { return new_ptr(*this); } IBPtr SubProcessHandler::fullclone() const { return new_ptr(*this); } const HandlerGroupBase & SubProcessHandler::handlerGroup(Group::Handler group) const { return *(theGroups[group]); } tCascHdlPtr SubProcessHandler::CKKWHandler() const { return dynamic_ptr_cast(theCascadeGroup.defaultHandler()); } void SubProcessHandler::persistentOutput(PersistentOStream & os) const { os << thePartonExtractor << theCuts << theSubprocessGroup << theCascadeGroup << theMultiGroup << theHadronizationGroup << theDecayGroup << theMEs << reweights << preweights; } void SubProcessHandler::persistentInput(PersistentIStream & is, int) { is >> thePartonExtractor >> theCuts >> theSubprocessGroup >> theCascadeGroup >> theMultiGroup >> theHadronizationGroup >> theDecayGroup >> theMEs >> reweights >> preweights; } void SubProcessHandler::doinit() { for ( MEVector::iterator me = theMEs.begin(); me != theMEs.end(); ++me ) { (**me).init(); for ( ReweightVector::iterator i = reweights.begin(); i != reweights.end(); ++i ) (**me).addReweighter(*i); for ( ReweightVector::iterator i = preweights.begin(); i != preweights.end(); ++i ) (**me).addPreweighter(*i); } HandlerBase::doinit(); } void SubProcessHandler::doinitrun() { HandlerBase::doinitrun(); pExtractor()->initrun(); for ( MEVector::iterator me = theMEs.begin(); me != theMEs.end(); ++me ) (**me).initrun(); for ( ReweightVector::iterator i = reweights.begin(); i != reweights.end(); ++i ) (**i).initrun(); for ( ReweightVector::iterator i = preweights.begin(); i != preweights.end(); ++i ) (**i).initrun(); } ClassDescription SubProcessHandler::initSubProcessHandler; void SubProcessHandler::Init() { static ClassDocumentation documentation ("This object contains information about a set of possible sub-processes " "to be generated from inside ThePEG. It must contain a " "PartonExtractor do describe how the partons " "entering into the hard sub-process are extracted from the beam " "particles. It must also include at least one matrix element object " "in MatrixElements and a " "Cuts object describing the kinematical cuts " "imposed on the sub-process generation."); static Reference interfacePartonExtractor ("PartonExtractor", "The PartonExtractor object to describe the way partons are extracted " "from the incoming particles.", &SubProcessHandler::thePartonExtractor, false, false, true, false); static RefVector interfaceMEs ("MatrixElements", "A list of MEBase objects describing the \\f$2\\rightarrow n\\f$ hard " "matrix elements.", &SubProcessHandler::theMEs, 0, false, false, true, false); static Reference interfaceCuts ("Cuts", "Common kinematical cuts for this SubProcessHandler. These cuts " "overides those in a EventHandler.", &SubProcessHandler::theCuts, false, false, true, true); static RefVector interfaceReweights ("Reweights", "A list of ThePEG::ReweightBase objects to modify all matrix elements " "in this SubProcessHandler.", &SubProcessHandler::reweights, 0, false, false, true, false); static RefVector interfacePreweights ("Preweights", "A list of ThePEG::ReweightBase objects to bias the phase space for all " "matrix elements without in this SubProcessHandler influencing the " "actual cross section.", &SubProcessHandler::preweights, 0, false, false, true, false); ThePEG_DECLARE_PREPOST_OBJECTS(SubProcessHandler, SubProcessHandler, Post, after); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(SubProcessHandler, CascadeHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(SubProcessHandler, MultipleInteractionHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(SubProcessHandler, HadronizationHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(SubProcessHandler, DecayHandler); interfacePartonExtractor.rank(10); interfaceMEs.rank(9); interfaceCuts.rank(8); } ThePEG_IMPLEMENT_PREPOST_GROUP(SubProcessHandler,SubProcessHandler, theSubprocessGroup,Post)\ ThePEG_IMPLEMENT_GROUPINTERFACE(SubProcessHandler,CascadeHandler, theCascadeGroup,CascHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(SubProcessHandler,MultipleInteractionHandler, theMultiGroup,MIHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(SubProcessHandler,HadronizationHandler, theHadronizationGroup,HadrHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(SubProcessHandler,DecayHandler, theDecayGroup,DecayHdlPtr) \ thepeg-1.8.0.orig/Handlers/GaussianPtGenerator.h0000644000175000017500000000766411747772425020022 0ustar sunsun// -*- C++ -*- // // GaussianPtGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_GaussianPtGenerator_H #define THEPEG_GaussianPtGenerator_H // This is the declaration of the GaussianPtGenerator class. #include "ThePEG/Handlers/PtGenerator.h" namespace ThePEG { /** * GaussianPtGenerator inherits from the abstract PtGenerator * class. It will generate a transverse momentum distributed according * to a gaussian. * * @see \ref GaussianPtGeneratorInterfaces "The interfaces" * defined for GaussianPtGenerator. */ class GaussianPtGenerator: public PtGenerator { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ GaussianPtGenerator() : theSigma(1.0*GeV), theUpperCut(5.0*GeV) {} /** * Destructor. */ virtual ~GaussianPtGenerator(); //@} public: /** @name Virtual functions required by the PtGenerator class. */ //@{ /** * Generate (\f$k_x, k_y\f$) components of the transverse * momentum. They will be distributed as * \f$\exp(-k_\perp^2/\sigma^2)k_\perp dk_\perp\f$ with * \f$k_\perp^2=k_x^2+k_y^2\f$ and \f$\sigma=\f$ theSigma. The * distribution is cutoff at \f$k_\perp=\f$ theUpperCut. */ virtual TransverseMomentum generate() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The width of the Gaussian distribution. The average squared * transverse momentum is theSigma squared. */ Energy theSigma; /** * Upper cutoff for the transverse momentum distribution. */ Energy theUpperCut; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initGaussianPtGenerator; /** * Private and non-existent assignment operator. */ GaussianPtGenerator & operator=(const GaussianPtGenerator &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of GaussianPtGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of GaussianPtGenerator. */ typedef PtGenerator NthBase; }; /** * This template specialization informs ThePEG about the name of the * GaussianPtGenerator class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::GaussianPtGenerator"; } /** Return the name of the shared library to be loaded to get access * to the GaussianPtGenerator class and every other class it uses * (except the base class). */ static string library() { return "GaussianPtGenerator.so"; } }; /** @endcond */ } #endif /* THEPEG_GaussianPtGenerator_H */ thepeg-1.8.0.orig/Handlers/LastXCombInfo.h0000644000175000017500000001700111747772425016527 0ustar sunsun// -*- C++ -*- // // LastXCombInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LastXCombInfo_H #define ThePEG_LastXCombInfo_H // This is the declaration of the LastXCombInfo class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Cuts/Cuts.fh" #include "XComb.h" namespace ThePEG { /** * LastXCombInfo is a templated class giving easy access to the * information in an XComb object. The default template argument is * the basic XComb class, but also subclasses of XComb can be * used. Classes which need to have easy access to the last selected * XComb object with information about the sub-process which is being * generated, should (possibly multiple) inherit from the * LastXCombInfo class. The LastXCombInfo is templated to enable * derived classes to only include dependencies necessary for the * access function which are actually used. * */ template class LastXCombInfo { public: ThePEG_DECLARE_TEMPLATE_POINTERS(XC,XCPtr); public: /** @name Acces to the actual XComb object. */ //@{ /** * Return a reference to the last selected XComb. */ const XC & lastXComb() const { return *theLastXComb; } /** * Return a pointer to the last selected XComb. */ tXCPtr lastXCombPtr() const { return theLastXComb; } /** * If the last selected XComb object belongs to a * group of XComb's return a reference to the head * XComb object for this group. */ const XC& lastHeadXComb() const { return *lastXComb().head(); } /** * If the last selected XComb object belongs to a * group of XComb's return a pointer to the head * XComb object for this group. */ tXCPtr lastHeadXCombPtr() const { return lastXComb().head(); } //@} /** @name Access the objects used by the XComb object. */ //@{ /** * Return a reference to the currently used EventHandler */ const EventHandler & lastEventHandler() const { return lastXComb().eventHandler(); } /** * A pointer to the currently used parton extractor. */ tPExtrPtr lastExtractor() const { return lastXComb().pExtractor(); } /** * Return the parton density used to extract the given parton. This * function is templated to avoid having to include the PDF.h and * all its dependencies in this header. */ template PDFT pdf(tcPPtr parton) const { return PDFT(lastXComb().partonBinInstance(parton)); } /** * A reference to the currently used kinematical cuts. */ const Cuts & lastCuts() const { return *lastXComb().cuts(); } /** * A pointer to the currently used kinematical cuts. */ tCutsPtr lastCutsPtr() const { return lastXComb().cuts(); } //@} /** @name Access information about the incoming particles and partons. */ //@{ /** * Return the pair of incoming parton instances. */ const PPair & lastParticles() const { return lastXComb().lastParticles(); } /** * The last generated total energy squared of the incoming particles. */ Energy2 lastS() const { return lastXComb().lastS(); } /** * Return the pair of incoming parton instances. */ const PPair & lastPartons() const { return lastXComb().lastPartons(); } /** * The last used interval in total parton-parton energy squared */ Energy2 lastSHat() const { return lastXComb().lastSHat(); } /** * Return lastSHat()/lastS(). */ double lastTau() const { return lastXComb().lastTau(); } /** * The generated rapidity of the hard scattering sub-system. */ double lastY() const { return lastXComb().lastY(); } /** * Log of one over the momentum fraction of the first incoming * particle w.r.t. the maximum allowed energy. */ double lastP1() const { return lastXComb().lastP1(); } /** * Log of one over the momentum fraction of the second incoming * particle w.r.t. the maximum allowed energy. */ double lastP2() const { return lastXComb().lastP2(); } /** * Log of one over the first incoming parton momentum fraction w.r.t. the * first incoming particle. */ double lastL1() const { return lastXComb().lastL1(); } /** * Log of one over the second incoming parton momentum fraction * w.r.t. the second incoming particle. */ double lastL2() const { return lastXComb().lastL2(); } /** * The first incoming parton momentum fraction w.r.t. the * first incoming particle. */ double lastX1() const { return lastXComb().lastX1(); } /** * The second incoming parton momentum fraction * w.r.t. the second incoming particle. */ double lastX2() const { return lastXComb().lastX2(); } /** * Return 1-lastX1() to highest possible precision for * x \f$\rightarrow\f$ 1. */ double lastE1() const { return lastXComb().lastE1(); } /** * Return 1-lastX2() to highest possible precision for * x\f$\rightarrow\f$ 1. */ double lastE2() const { return lastXComb().lastE2(); } /** * The product of the parton density functions at the last generated * phase-space point. */ double lastFL1L2() const { return lastXComb().lastFL1L2(); } //@} /** @name Access information of the hard sub-process. */ //@{ /** * The chosen scale of the hard scattering. */ Energy2 lastScale() const { return lastXComb().lastScale(); } /** * Get the \f$\alpha_S\f$ used in the hard scattering. Is negative * if no value has been set. */ double lastAlphaS() const { return lastXComb().lastAlphaS(); } /** * Get the \f$\alpha_{EM}\f$ used in the hard scattering. Is negative * if no value has been set. */ double lastAlphaEM() const { return lastXComb().lastAlphaEM(); } /** * Return the momenta of the incoming and outgoing partons to be * used by the matrix element object, in the order specified by the * TreeDiagram objects given by the matrix element. */ const vector & meMomenta() const { return lastXComb().meMomenta(); } /** * Return the matrix element squared as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ double lastME2() const { return lastXComb().lastME2(); } /** * Get the last jacobian obtained when generating the kinematics * for the call to dSigHatDR. */ double jacobian() const { return lastXComb().jacobian(); } /** * Return the partonic cross section as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ CrossSection lastMECrossSection() const { return lastXComb().lastMECrossSection(); } /** * Return the PDF weight as calculated * for the last phase space point, if the matrix * element does supply PDF weights. This may optionally * be used by a matrix element for caching. */ double lastMEPDFWeight() const { return lastXComb().lastMEPDFWeight(); } /** * Return the SubProcess object corresponding to the last generated * sub-process. */ tSubProPtr subProcess() const { return lastXComb().subProcess(); } /** * Return the incoming and outgoing parton types to be used by the * matrix element object, in the order specified by the TreeDiagram * objects given by the matrix element. */ const cPDVector & mePartonData() const { return lastXComb().mePartonData(); } //@} protected: /** * The pointer to the last selected XComb. */ XCPtr theLastXComb; }; } #endif /* ThePEG_LastXCombInfo_H */ thepeg-1.8.0.orig/Handlers/GaussianPtGenerator.cc0000644000175000017500000000453111747772425020146 0ustar sunsun// -*- C++ -*- // // GaussianPtGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the GaussianPtGenerator class. // #include "GaussianPtGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Vectors/Transverse.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; GaussianPtGenerator::~GaussianPtGenerator() {} IBPtr GaussianPtGenerator::clone() const { return new_ptr(*this); } IBPtr GaussianPtGenerator::fullclone() const { return new_ptr(*this); } TransverseMomentum GaussianPtGenerator::generate() const { pair ret; Energy pt = ZERO; while ( ( pt = theSigma*sqrt(-log(rnd())) ) > theUpperCut ) {} double phi = rnd(2.0*Constants::pi); ret.first = pt*cos(phi); ret.second = pt*sin(phi); return ret; } void GaussianPtGenerator::persistentOutput(PersistentOStream & os) const { os << ounit(theSigma, GeV) << ounit(theUpperCut, GeV); } void GaussianPtGenerator::persistentInput(PersistentIStream & is, int) { is >> iunit(theSigma, GeV) >> iunit(theUpperCut, GeV); } ClassDescription GaussianPtGenerator::initGaussianPtGenerator; // Definition of the static class description member. void GaussianPtGenerator::Init() { static ClassDocumentation documentation ("The ThePEG::GaussianPtGenerator class generates a gaussian " "transverse momentum."); static Parameter interfaceSigma ("Sigma", "The width of the Gaussian distribution. The average squared transverse " "momentum is Sigma squared.", &GaussianPtGenerator::theSigma, GeV, 1.0*GeV, ZERO, 10.0*GeV, true, false, true); static Parameter interfaceUpperCut ("UpperCut", "Upper cutoff for the transverse momentum distribution.", &GaussianPtGenerator::theUpperCut, GeV, 5.0*GeV, ZERO, 50.0*GeV, true, false, true); interfaceSigma.rank(10); } thepeg-1.8.0.orig/Handlers/StdDependentXComb.fh0000644000175000017500000000056711747772425017550 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the StdDependentXComb class. // #ifndef ThePEG_StdDependentXComb_FH #define ThePEG_StdDependentXComb_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class StdDependentXComb; ThePEG_DECLARE_POINTERS(StdDependentXComb,StdDependentXCombPtr); typedef vector StdDepXCVector; } #endif thepeg-1.8.0.orig/Handlers/FlavourGenerator.h0000644000175000017500000001605511747772425017354 0ustar sunsun// -*- C++ -*- // // FlavourGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FlavourGenerator_H #define ThePEG_FlavourGenerator_H // This is the declaration of the FlavourGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Handlers/HandlerBase.h" namespace ThePEG { /** * FlavourGenerator is an abstract base class to be used to implement * models describing the quark content of hadrons. FlavourGenerator * inherits from the HandlerBase class. * * The interface is based on the flavour generation implementation in * Pythia but is general enough to be used in other situations. The * main virtual functions to be overridden in subclasses are * generateHadron(tcPDPtr), getHadron(tcPDPtr, tcPDPtr), * getHadron(long, long) getBaryon(tcPDPtr, tcPDPtr, tcPDPtr), * getBaryon(long, long, long), selectQuark() and selectFlavour(). In * this base class the getHadron(tcPDPtr, tcPDPtr) and getHadron(long, * long) are implemented to call eachother, so a subclass must * implement at least one of them. The same thing is true for * getBaryon(tcPDPtr, tcPDPtr, tcPDPtr) and getBaryon(long, long, * long) * * @see \ref FlavourGeneratorInterfaces "The interfaces" * defined for FlavourGenerator. * @see HandlerBase */ class FlavourGenerator: public HandlerBase { public: /** @name Virtual functions to be overridden by subclasses. */ //@{ /** * Generate a hadron from a quark. Given a quark(antiquark, diquark * or antidiquark), choose a quark-antiquark (or * antidiquark-diquark) pair. Return (first) a hadron formed by the * original quark and the antiquark together with (second) the * generated quark. Returns null pointers if the generation failed. * @param quark a quark, antiquark, diquark or antidiquark. * @return a pair of ParticleData pointers. The \a first is the * hadron produced and the \a second is the anti-partner of the * (anti-)(di-)quark generated to form the hadron. */ virtual tcPDPair generateHadron(tcPDPtr quark) const = 0; /** * Same as generateHadron(tcPDPtr), but throws an exception if no * hadron could be produced. */ tcPDPair alwaysGenerateHadron(tcPDPtr quark) const; /** * Get hadron from flavours. Return a hadron with the flavour * content given by the (anti-)(di-)quarks in the argument. The * arguments are given as ParticleData pointers. The default * versions will call the getHadron(long, long). * @param q1 the first flavour. * @param q2 the second flavour. * @return the corresponding hadron type or null if none could be * generated. */ virtual tcPDPtr getHadron(tcPDPtr q1, tcPDPtr q2) const; /** * Get hadron from flavours. Return a hadron with the flavour * content given by the (anti-)(di-)quarks in the argument. The * arguments are given as PDG codes. The default * versions will call the getHadron(tcPDPtr, tcPDPtr). * @param iq1 the PDG code of the first flavour. * @param iq2 the PDG code of the second flavour. * @return the corresponding hadron type or null if none could be * generated. */ virtual tcPDPtr getHadron(long iq1, long iq2) const; /** * Same as getHadron(tcPDPtr, tcPDPtr) but thows an exception if no * hadron could be produced. */ tcPDPtr alwaysGetHadron(tcPDPtr q1, tcPDPtr q2) const; /** * Same as getHadron(long, long) but thows an exception if no hadron * could be produced. */ tcPDPtr alwaysGetHadron(long iq1, long iq2) const; /** * Return a baryon with the flavour content given by the * (anti)quarks in the argument. The arguments are given as * particle data pointers. The default versions will call * getBaryon(long, long, long). If no corresponding hadron was * formed it should return the null pointer. * @param q1 the first flavour. * @param q2 the second flavour. * @param q3 the third flavour. * @return the corresponding baryon type or null if none could be * generated. */ virtual tcPDPtr getBaryon(tcPDPtr q1, tcPDPtr q2, tcPDPtr q3) const; /** * Return a baryon with the flavour content given by the * (anti)quarks in the argument. The arguments are given as * particle data pointers. The default versions will call * getBaryon(tcPDPtr, tcPDPtr, tcPDPtr). If no corresponding hadron was * formed it should return the null pointer. * @param q1 the PDG code of the first flavour. * @param q2 the PDG code of the second flavour. * @param q3 the PDG code of the third flavour. * @return the corresponding baryon type or null if none could be * generated. */ virtual tcPDPtr getBaryon(long q1, long q2, long q3) const; /** * Same as getBaryon(tcPDPtr, tcPDPtr, tcPDPtr), but throws an * exception if no baryon could be produced. */ tcPDPtr alwaysGetBaryon(tcPDPtr q1, tcPDPtr q2, tcPDPtr q3) const; /** * Same as getBaryon(long, long, long), but throws an exception if * no baryon could be produced. */ tcPDPtr alwaysGetBaryon(long q1, long q2, long q3) const; /** * Generate a random quark flavour. */ virtual long selectQuark() const = 0; /** * Generate a random (di)quark flavour. */ virtual long selectFlavour() const = 0; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe aa abstract class without persistent data. */ static AbstractNoPIOClassDescription initFlavourGenerator; /** * Private and non-existent assignment operator. */ FlavourGenerator & operator=(const FlavourGenerator &); }; /** @cond EXCEPTIONCLASSES */ /** An Exception class used by FlavourGenerator classes if no hadrons could be generated. */ class FlavourGeneratorException: public Exception {}; /** @endcond */ /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of FlavourGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of FlavourGenerator. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * DecayHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::FlavourGenerator"; } }; /** @endcond */ } #endif /* ThePEG_FlavourGenerator_H */ thepeg-1.8.0.orig/Handlers/DecayHandler.cc0000644000175000017500000000747211747772425016553 0ustar sunsun// -*- C++ -*- // // DecayHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DecayHandler class. // #include "DecayHandler.h" #include "Hint.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/Decayer.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; DecayHandler::~DecayHandler() {} IBPtr DecayHandler::clone() const { return new_ptr(*this); } IBPtr DecayHandler::fullclone() const { return new_ptr(*this); } void DecayHandler:: handle(EventHandler &, const tPVector & tagged, const Hint &) { // First go through to see which of the tagged particles should be // decayed: Exit if none are found. tPVector parents; for ( int i = 0, N = tagged.size(); i < N; ++i ) if ( tagged[i] && !tagged[i]->data().stable() ) parents.push_back(tagged[i]); if ( parents.empty() ) return; // Create a new step, decay all particles and add their children in // the new step. for ( int i = 0, N = parents.size(); i < N; ++i ) performDecay(newStep()->find(parents[i]->final()), *newStep()); } void DecayHandler:: performDecay(tPPtr parent, Step & s) const { if ( maxLifeTime() >= ZERO ) { if( ( lifeTimeOption() && parent->lifeLength().tau() > maxLifeTime())|| (!lifeTimeOption() && parent->data().cTau() > maxLifeTime()) ) { parent->setLifeLength(Distance()); return; } } ParticleVector children = Decayer::DecayParticle(parent, s, maxLoop()); for ( int i = 0, N = children.size(); i < N; ++i ) if ( !children[i]->data().stable() ) performDecay(children[i], s); } void DecayHandler::persistentOutput(PersistentOStream & os) const { os << theMaxLoop << ounit(theMaxLifeTime, mm) << theLifeTimeOption; } void DecayHandler::persistentInput(PersistentIStream & is, int) { is >> theMaxLoop >> iunit(theMaxLifeTime, mm) >> theLifeTimeOption; } ClassDescription DecayHandler::initDecayHandler; void DecayHandler::Init() { static ClassDocumentation documentation ("This is the main class handling the decay of unstable particles. Note " "that the actual decays will be performed by objects of the " "ThePEG::Decayer class."); static Parameter interfaceMaxLoop ("MaxLoop", "The maximum number of attempts per event when selecting a decay channel.", &DecayHandler::theMaxLoop, 100000, 100, 100000000, true, false, true); static Parameter interfaceMaxLifeTime ("MaxLifeTime", "The maximum lifetime (c*tau) in units of mm. Particles with longer " "lifetimes than this will not be decayed.", &DecayHandler::theMaxLifeTime, mm, -1.0*mm, -1.0*mm, ZERO, true, false, Interface::lowerlim); static Switch interfaceLifeTimeOption ("LifeTimeOption", "Option for how the maximum life time is interpreted", &DecayHandler::theLifeTimeOption, false, false, false); static SwitchOption interfaceLifeTimeOptionAverage (interfaceLifeTimeOption, "Average", "Cut on the average lifetime of the particle type", false); static SwitchOption interfaceLifeTimeOptionReal (interfaceLifeTimeOption, "Real", "Cut on the lifetime generated for the given instance", true); } thepeg-1.8.0.orig/Handlers/SamplerBase.fh0000644000175000017500000000044411747772425016426 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_SamplerBase_FH #define ThePEG_SamplerBase_FH // // This is the forward declaration of the SamplerBase class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { ThePEG_DECLARE_CLASS_POINTERS(SamplerBase,SamplerPtr); } #endif /* ThePEG_SamplerBase_FH */ thepeg-1.8.0.orig/Handlers/StandardXComb.cc0000644000175000017500000003175611747772425016723 0ustar sunsun// -*- C++ -*- // // StandardXComb.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // Copyright (C) 2009-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StandardXComb class. // #include "StandardXComb.h" #include "StdXCombGroup.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/SubProcessGroup.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/EventRecord/TmpTransform.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "StandardXComb.tcc" #endif using namespace ThePEG; StandardXComb::StandardXComb() : XComb(), isMirror(false), theNDim(0), partonDims(make_pair(0, 0)), theLastDiagramIndex(0), theLastPDFWeight(0.0), theLastCrossSection(ZERO), theLastJacobian(1.0), theLastME2(-1.0), theLastMECrossSection(ZERO), theLastMEPDFWeight(1.0) {} StandardXComb:: StandardXComb(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler, tSubHdlPtr newSubProcessHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts, tMEPtr newME, const DiagramVector & newDiagrams, bool mir, tStdXCombPtr newHead) : XComb(newMaxEnergy, inc, newEventHandler, newExtractor, newCKKW, newPartonBins, newCuts), theSubProcessHandler(newSubProcessHandler), theME(newME), theDiagrams(newDiagrams), isMirror(mir), theLastDiagramIndex(0), theLastPDFWeight(0.0), theLastCrossSection(ZERO), theLastME2(-1.0), theLastMECrossSection(ZERO), theLastMEPDFWeight(1.0), theHead(newHead) { partonDims = pExtractor()->nDims(partonBins()); if ( matrixElement()->haveX1X2() ) { partonDims.first = 0; partonDims.second = 0; } theNDim = matrixElement()->nDim() + partonDims.first + partonDims.second; mePartonData() = lastDiagram()->partons(); } StandardXComb::StandardXComb(tMEPtr me, const tPVector & parts, DiagramIndex indx) : theME(me), isMirror(false), theNDim(0), partonDims(make_pair(0, 0)), theLastDiagramIndex(0), theLastPDFWeight(0.0), theLastCrossSection(ZERO), theLastME2(-1.0), theLastMECrossSection(ZERO), theLastMEPDFWeight(1.0) { subProcess(new_ptr(SubProcess(make_pair(parts[0], parts[1]), tCollPtr(), me))); for ( int i = 0, N = parts.size(); i < N; ++i ) { subProcess()->addOutgoing(parts[i], false); theMEPartonData.push_back(parts[i]->dataPtr()); theMEMomenta.push_back(parts[i]->momentum()); } lastSHat((meMomenta()[0] + meMomenta()[1]).m2()); string tag = me->diagrams()[indx]->getTag(); for ( int i = 0, N = me->diagrams().size(); i < N; ++i ) if ( me->diagrams()[i]->getTag() == tag ) theDiagrams.push_back(me->diagrams()[i]); } StandardXComb::~StandardXComb() {} bool StandardXComb::checkInit() { Energy summin = ZERO; for ( int i = 2, N = mePartonData().size(); i < N; ++i ) { summin += mePartonData()[i]->massMin(); } return ( summin < min(maxEnergy(), cuts()->mHatMax()) ); } bool StandardXComb::willPassCuts() const { if ( lastSHat() <= cuts()->sHatMin() || lastSHat() > cuts()->sHatMax() ) return false; cuts()->initSubProcess(lastSHat(), lastY(), mirror()); tcPDVector outdata(mePartonData().begin()+2,mePartonData().end()); vector outmomenta(meMomenta().begin()+2,meMomenta().end()); Boost tocm = (meMomenta()[0]+meMomenta()[1]).findBoostToCM(); if ( tocm.mag2() > Constants::epsilon ) { for ( vector::iterator p = outmomenta.begin(); p != outmomenta.end(); ++p ) { p->boost(tocm); } } if ( !cuts()->passCuts(outdata,outmomenta,mePartonData()[0],mePartonData()[1]) ) { return false; } return true; } CrossSection StandardXComb:: dSigDR(const pair ll, int nr, const double * r) { matrixElement()->flushCaches(); if ( matrixElement()->keepRandomNumbers() ) { lastRandomNumbers().resize(nDim()); copy(r,r+nDim(),lastRandomNumbers().begin()); } pExtractor()->select(this); setPartonBinInfo(); lastP1P2(ll); lastS(sqr(maxEnergy())/exp(lastP1() + lastP2())); meMomenta().resize(mePartonData().size()); matrixElement()->setXComb(this); PPair partons; if ( !matrixElement()->haveX1X2() ) { if ( !pExtractor()->generateL(partonBinInstances(), r, r + nr - partonDims.second) ) { lastCrossSection(ZERO); return ZERO; } partons = make_pair(partonBinInstances().first->parton(), partonBinInstances().second->parton()); lastSHat(lastS()/exp(partonBinInstances().first->l() + partonBinInstances().second->l())); meMomenta()[0] = partons.first->momentum(); meMomenta()[1] = partons.second->momentum(); } else { if ( !matrixElement()->generateKinematics(r + partonDims.first) ) { lastCrossSection(ZERO); return ZERO; } lastSHat((meMomenta()[0]+meMomenta()[1]).m2()); matrixElement()->setKinematics(); lastScale(matrixElement()->scale()); partons.first = mePartonData()[0]->produceParticle(meMomenta()[0]); partons.second = mePartonData()[1]->produceParticle(meMomenta()[1]); Direction<0> dir(true); partonBinInstances().first = new_ptr(PartonBinInstance(lastParticles().first,partons.first, partonBins().first,lastScale())); dir.reverse(); partonBinInstances().second = new_ptr(PartonBinInstance(lastParticles().second,partons.second, partonBins().second,lastScale())); } lastPartons(partons); if ( lastSHat() < cuts()->sHatMin() ) { lastCrossSection(ZERO); return ZERO; } lastY(0.5*(partonBinInstances().second->l() - partonBinInstances().first->l())); if ( !cuts()->initSubProcess(lastSHat(), lastY(), mirror()) ) { lastCrossSection(ZERO); return ZERO; } if ( mirror() ) swap(meMomenta()[0], meMomenta()[1]); if ( matrixElement()->wantCMS() && !matrixElement()->haveX1X2() ) SimplePhaseSpace::CMS(meMomenta()[0], meMomenta()[1], lastSHat()); Energy summ = ZERO; if ( meMomenta().size() == 3 ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[2] = Lorentz5Momentum(sqrt(lastSHat())); } else { for ( int i = 2, N = meMomenta().size(); i < N; ++i ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[i] = Lorentz5Momentum(mePartonData()[i]->mass()); summ += mePartonData()[i]->massMin(); } if ( sqr(summ) >= lastSHat() ) { lastCrossSection(ZERO); return ZERO; } } matrixElement()->setXComb(this); if ( !matrixElement()->haveX1X2() ) lastScale(max(lastSHat()/4.0, cuts()->scaleMin())); lastSHat(pExtractor()->generateSHat(lastS(), partonBinInstances(), r, r + nr - partonDims.second, matrixElement()->haveX1X2())); if ( !cuts()->sHat(lastSHat()) ) { lastCrossSection(ZERO); return ZERO; } r += partonDims.first; lastX1X2(make_pair(lastPartons().first->momentum().plus()/ lastParticles().first->momentum().plus(), lastPartons().second->momentum().minus()/ lastParticles().second->momentum().minus())); if ( !cuts()->x1(lastX1()) || !cuts()->x2(lastX2()) ) { lastCrossSection(ZERO); return ZERO; } lastY((lastPartons().first->momentum() + lastPartons().second->momentum()).rapidity()); if ( !cuts()->yHat(lastY()) ) { lastCrossSection(ZERO); return ZERO; } if ( !cuts()->initSubProcess(lastSHat(), lastY(), mirror()) ) { lastCrossSection(ZERO); return ZERO; } meMomenta()[0] = lastPartons().first->momentum(); meMomenta()[1] = lastPartons().second->momentum(); if ( mirror() ) swap(meMomenta()[0], meMomenta()[1]); if ( matrixElement()->wantCMS() && !matrixElement()->haveX1X2() ) SimplePhaseSpace::CMS(meMomenta()[0], meMomenta()[1], lastSHat()); if ( meMomenta().size() == 3 ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[2] = Lorentz5Momentum(sqrt(lastSHat())); } else { if ( sqr(summ) >= lastSHat() ) { lastCrossSection(ZERO); return ZERO; } } matrixElement()->setXComb(this); if ( !matrixElement()->haveX1X2() ) { if ( !matrixElement()->generateKinematics(r) ) { lastCrossSection(ZERO); return ZERO; } } lastScale(matrixElement()->scale()); if ( !cuts()->scale(lastScale()) ) { lastCrossSection(ZERO); return ZERO; } pair evalPDFS = make_pair(matrixElement()->havePDFWeight1(), matrixElement()->havePDFWeight2()); if ( mirror() ) swap(evalPDFS.first,evalPDFS.second); lastPDFWeight(pExtractor()->fullFn(partonBinInstances(), lastScale(), evalPDFS)); if ( lastPDFWeight() == 0.0 ) { lastCrossSection(ZERO); return ZERO; } matrixElement()->setKinematics(); CrossSection xsec = matrixElement()->dSigHatDR() * lastPDFWeight(); if ( xsec == ZERO ) { lastCrossSection(ZERO); return ZERO; } lastAlphaS (matrixElement()->orderInAlphaS () >0 ? matrixElement()->alphaS() : -1.); lastAlphaEM(matrixElement()->orderInAlphaEW() >0 ? matrixElement()->alphaEM() : -1.); subProcess(SubProPtr()); if ( CKKWHandler() && matrixElement()->maxMultCKKW() > 0 && matrixElement()->maxMultCKKW() > matrixElement()->minMultCKKW() ) { newSubProcess(); CKKWHandler()->setXComb(this); xsec *= CKKWHandler()->reweightCKKW(matrixElement()->minMultCKKW(), matrixElement()->maxMultCKKW()); } if ( matrixElement()->reweighted() ) { newSubProcess(); xsec *= matrixElement()->reWeight() * matrixElement()->preWeight(); } lastCrossSection(xsec); return xsec; } void StandardXComb::newSubProcess(bool group) { if ( subProcess() ) return; if ( !group ) subProcess(new_ptr(SubProcess(lastPartons(), tCollPtr(), matrixElement()))); else subProcess(new_ptr(SubProcessGroup(lastPartons(), tCollPtr(), matrixElement()))); lastDiagramIndex(matrixElement()->diagram(diagrams())); const ColourLines & cl = matrixElement()->selectColourGeometry(lastDiagram()); Lorentz5Momentum p1 = lastPartons().first->momentum(); Lorentz5Momentum p2 = lastPartons().second->momentum(); tPPair inc = lastPartons(); if ( mirror() ) swap(inc.first, inc.second); if ( matrixElement()->wantCMS() && !matrixElement()->haveX1X2() ) { LorentzRotation r = Utilities::boostToCM(inc); lastDiagram()->construct(subProcess(), *this, cl); subProcess()->transform(r.inverse()); lastPartons().first->set5Momentum(p1); lastPartons().second->set5Momentum(p2); } else { lastDiagram()->construct(subProcess(), *this, cl); } lastPartons().first ->scale(partonBinInstances().first ->scale()); lastPartons().second->scale(partonBinInstances().second->scale()); for ( int i = 0, N = subProcess()->outgoing().size(); i < N; ++i ) subProcess()->outgoing()[i]->scale(lastScale()); // construct the spin information for the interaction matrixElement()->constructVertex(subProcess()); // set veto scales matrixElement()->setVetoScales(subProcess()); } tSubProPtr StandardXComb::construct() { matrixElement()->setXComb(this); if ( !cuts()->initSubProcess(lastSHat(), lastY()) ) throw Veto(); setPartonBinInfo(); matrixElement()->setKinematics(); newSubProcess(); TmpTransform tmp(subProcess(), Utilities::getBoostToCM(subProcess()->incoming())); if ( !cuts()->passCuts(*subProcess()) ) throw Veto(); return subProcess(); } void StandardXComb::Init() {} void StandardXComb::persistentOutput(PersistentOStream & os) const { os << theSubProcessHandler << theME << theStats << theDiagrams << isMirror << theNDim << partonDims << theLastDiagramIndex << theMEInfo << theLastRandomNumbers << theMEPartonData << theLastPDFWeight << ounit(theLastCrossSection,nanobarn) << theLastJacobian << theLastME2 << ounit(theLastMECrossSection,nanobarn) << theLastMEPDFWeight << theHead; } void StandardXComb::persistentInput(PersistentIStream & is, int) { is >> theSubProcessHandler >> theME >> theStats >> theDiagrams >> isMirror >> theNDim >> partonDims >> theLastDiagramIndex >> theMEInfo >> theLastRandomNumbers >> theMEPartonData >> theLastPDFWeight >> iunit(theLastCrossSection,nanobarn) >> theLastJacobian >> theLastME2 >> iunit(theLastMECrossSection,nanobarn) >> theLastMEPDFWeight >> theHead; } ClassDescription StandardXComb::initStandardXComb; thepeg-1.8.0.orig/Handlers/HandlerGroup.tcc0000644000175000017500000000332111747772425016773 0ustar sunsun// -*- C++ -*- // // HandlerGroup.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the HandlerGroup class. // #include "ThePEG/Utilities/ClassTraits.h" #include "ThePEG/Handlers/Hint.h" namespace ThePEG { template HandlerGroup::~HandlerGroup() {} template bool HandlerGroup::setHandler(tStepHdlPtr hin, const HandlerGroupBase & ext) { tHdlPtr h = dynamic_ptr_cast(hin); if ( !h ) return false; if ( !theHandler ) refillDefaults(ext); theHandler = h; isEmpty = false; return true; } template void HandlerGroup::refillDefaultHandler(tStepHdlPtr h) { tHdlPtr ext = dynamic_ptr_cast(h); if ( ext ) theHandler = ext; else theHandler = theDefaultHandler; if ( theHandler ) { for ( int i = 0, N = theHints.size(); i < N; ++i ) if ( theHints[i] == Hint::Default() ) return; theHints.push_front(Hint::Default()); isEmpty = false; } } template void HandlerGroup::clear() { theHandler = HdlPtr(); HandlerGroupBase::clear(); } template string HandlerGroup::handlerClass() const { return ClassTraits::className(); } template void HandlerGroup::interfaceSetHandler(HdlPtr p) { theDefaultHandler = p; } template typename HandlerGroup::HdlPtr HandlerGroup::interfaceGetHandler() const { return theDefaultHandler; } } thepeg-1.8.0.orig/Handlers/StandardXComb.fh0000644000175000017500000000044211747772425016717 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the StandardXComb class. // #ifndef ThePEG_StandardXComb_FH #define ThePEG_StandardXComb_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class StandardXComb; ThePEG_DECLARE_POINTERS(StandardXComb,StdXCombPtr); } #endif thepeg-1.8.0.orig/Handlers/DecayHandler.h0000644000175000017500000001105611747772425016406 0ustar sunsun// -*- C++ -*- // // DecayHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DecayHandler_H #define ThePEG_DecayHandler_H // This is the declaration of the DecayHandler class. #include "StepHandler.h" namespace ThePEG { /** * The DecayHandler is the base class of all handlers implementing the * administration of decays of unstable particles. It is derived from * the more general StepHandler class, and overrides the handle() * method. This base class simply decays all unstable particle in the * current step. * * @see \ref DecayHandlerInterfaces "The interfaces" * defined for DecayHandler. * @see StepHandler * @see EventHandler * @see SubProcessHandler * */ class DecayHandler: public StepHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ DecayHandler() : theMaxLoop(100000), theMaxLifeTime(-1.0*mm), theLifeTimeOption(false) {} /** * Destructor. */ virtual ~DecayHandler(); //@} public: /** @name Virtual functions required by the StepHandler class. */ //@{ /** * Look through all \a tagged particled and decay all unstable ones. * @param eh the EventHandler in charge of the generation. * @param tagged the vector of particles to consider. If empty, all * final state particles in the current Step is considered. * @param hint a possible Hint which is ignored in this implementation. */ virtual void handle(EventHandler & eh, const tPVector & tagged, const Hint & hint); //@} /** * Perform the decay of one unstable particle. * @param parent the particle to be decayed. * @param s the Step where decay products are inserted. */ void performDecay(tPPtr parent, Step & s) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); /** * The maximum number of failed decay attempts allowed for each * particle. */ long maxLoop() const { return theMaxLoop; } /** * Get the maximum lifetime above which a particle is not decayed. */ Length maxLifeTime() const { return theMaxLifeTime; } /** * Option for whether the maximum lifetime should be applied to the * mean lifetime of the particle species or the lifetime of the particle * instance */ bool lifeTimeOption() const { return theLifeTimeOption; } protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The maximum number of failed decay attempts allowed for each * particle. */ long theMaxLoop; /** * The maximum lifetime above which a particle is not decayed. */ Length theMaxLifeTime; /** * Option for how theMaxLifeTime should be interpreted */ bool theLifeTimeOption; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initDecayHandler; /** * Private and non-existent assignment operator. */ DecayHandler & operator=(const DecayHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of DecayHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of DecayHandler. */ typedef StepHandler NthBase; }; /** * This template specialization informs ThePEG about the name of the * DecayHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::DecayHandler"; } }; /** @endcond */ } #endif /* ThePEG_DecayHandler_H */ thepeg-1.8.0.orig/Handlers/ACDCSampler.cc0000644000175000017500000001433211747772425016237 0ustar sunsun// -*- C++ -*- // // ACDCSampler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ACDCSampler class. // #include "ThePEG/Handlers/ACDCSampler.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Throw.h" using namespace ThePEG; ACDCSampler::~ACDCSampler() {} IBPtr ACDCSampler::clone() const { return new_ptr(*this); } IBPtr ACDCSampler::fullclone() const { return new_ptr(*this); } void ACDCSampler::initialize() { theSampler.clear(); theSampler.setRnd(0); theSampler.eps(theEps); theSampler.margin(theMargin); theSampler.nTry(2); theSampler.maxTry(eventHandler()->maxLoop()); bool nozero = false; for ( int i = 0, N = eventHandler()->nBins(); i < N; ++i ) { nozero |= theSampler.addFunction(eventHandler()->nDim(i), eventHandler()); } if( eventHandler()->nBins() ==0 ) Throw() << "The event handler '" << eventHandler()->name() << "' cannot be initialized because there are no selected subprocesses" << Exception::maybeabort; if ( !nozero ) Throw() << "The event handler '" << eventHandler()->name() << "' cannot be initialized because the cross-section for the selected " << "sub-processes was zero." << Exception::maybeabort; theSampler.clear(); } double ACDCSampler::generate() { if ( !theSampler.generate() ) throw EventLoopException() << "The maximum number of attempts (" << eventHandler()->maxLoop() << ") to generate the kinematics in the ACDCSampler was exceeded. For " << "the event handler '" << eventHandler()->name() << "'." << Exception::eventerror; lastPoint() = theSampler.lastPoint(); return 1.0; } void ACDCSampler::rejectLast() { theSampler.reject(); } CrossSection ACDCSampler::integratedXSec() const { return theSampler.integral()*nanobarn; } CrossSection ACDCSampler::integratedXSecErr() const { return theSampler.integralErr()*nanobarn; } CrossSection ACDCSampler::maxXSec() const { return theSampler.maxInt()*nanobarn; } int ACDCSampler::lastBin() const { return theSampler.last() - 1; } double ACDCSampler::sumWeights() const { return theSampler.n(); } void ACDCSampler::dofinish() { if ( theSampler.n() <= 0 && eventHandler() && eventHandler()->statLevel() > 1 ) { generator()->log() << "No events generated by the ACDC sampler '" << name() << "'" << endl; } else if ( eventHandler() && eventHandler()->statLevel() > 1 ) generator()->log() << "Statistics for the ACDC sampler '" << name() << "':" << endl << "Number of samplers: " << setw(14) << theSampler.size() << endl << "Number of bins: " << setw(14) << theSampler.nBins() << endl << "Depth of bins: " << setw(14) << theSampler.depth() << endl << "efficiency: " << setw(14) << theSampler.efficiency() << endl << "Total integrated xsec: " << setw(14) << theSampler.integral() << endl << " error in xsec: " << setw(14) << theSampler.integralErr() << endl; if ( theSampler.compensating() ) generator()->logWarning( ACDCStillCompensating() << "The run was ended while the ACDCSampler '" << name() << "' was still trying to compensate for weights larger than 1. " << "The cross section estimates may therefore be statistically " << "inaccurate. At least " << theSampler.compleft() << " additional " << "samplings are needed to get out of compensation mode. " << "This may be avoided if you increase the value of the " << "Ntry parameter determining how many points are presampled before " << "the run." << Exception::warning); SamplerBase::dofinish(); } void ACDCSampler::doinitrun() { SamplerBase::doinitrun(); eventHandler()->initrun(); theSampler.setRnd(0); theSampler.eps(theEps); theSampler.margin(theMargin); theSampler.nTry(theNTry); theSampler.maxTry(eventHandler()->maxLoop()); bool nozero = false; for ( int i = 0, N = eventHandler()->nBins(); i < N; ++i ) if ( theSampler.addFunction(eventHandler()->nDim(i), eventHandler()) ) nozero = true; if ( !nozero ) throw EventInitNoXSec() << "The event handler '" << eventHandler()->name() << "' cannot be initialized because the cross-section for the selected " << "sub-processes was zero." << Exception::maybeabort; } void ACDCSampler::persistentOutput(PersistentOStream & os) const { os << theEps << theMargin << theNTry; theSampler.output(os); } void ACDCSampler::persistentInput(PersistentIStream & is, int) { is >> theEps >> theMargin >> theNTry; theSampler.input(is); if ( generator() ) theSampler.setRnd(0); } ClassDescription ACDCSampler::initACDCSampler; // Definition of the static class description member. void ACDCSampler::Init() { static ClassDocumentation documentation ("This class inherits from ThePEG::SampleBase and implements " "the Auto Compensating Divide-and-Conquer phase space generator, " "ACDCGenerator::ACDCGen."); static Parameter interfaceMargin ("Margin", "The factor controlling the loss of efficiency when compensating " "for a previously underestimated phase space point. If close to one, " "the efficiency is increased at the expence of increased number " "of cells.", &ACDCSampler::theMargin, 1.1, 1.0, 2.0, true, false, true); static Parameter interfaceEps ("Epsilon", "The smallest possible cell division allowed.", &ACDCSampler::theEps, 100.0*Constants::epsilon, Constants::epsilon, 1.0e-6, true, false, true); static Parameter interfaceNTry ("Ntry", "The number of phase space points tried in the initialization.", &ACDCSampler::theNTry, 1000, 2, 1000000, true, false, true); interfaceNTry.rank(10); interfaceEps.rank(9); } thepeg-1.8.0.orig/Handlers/StdXCombGroup.h0000644000175000017500000001037211747772425016563 0ustar sunsun// -*- C++ -*- // // StdXCombGroup.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StdXCombGroup_H #define ThePEG_StdXCombGroup_H // This is the declaration of the StdXCombGroup class. #include "StandardXComb.h" #include "StdDependentXComb.h" #include "StdXCombGroup.fh" #include "ThePEG/MatrixElement/MEGroup.fh" namespace ThePEG { /** * The StdXCombGroup class represents a 'head' XComb object * in association with a group of dependent XComb objects. * * @see StdDependendXComb * @see MEGroup */ class StdXCombGroup: public StandardXComb { /** MEBase needs to be a friend. */ friend class MEBase; public: /** @name Standard constructors and destructors. */ //@{ /** * Standard constructor. */ StdXCombGroup(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler,tSubHdlPtr newSubProcessHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts, tMEGroupPtr newME, const DiagramVector & newDiagrams, bool mir); /** * Default constructor. */ StdXCombGroup(); /** * Destructor. */ virtual ~StdXCombGroup(); public: /** * Generate a phase space point from a vector \a r of \a nr numbers * in the interval ]0,1[ and return the corresponding differential * cross section. */ virtual CrossSection dSigDR(const pair ll, int nr, const double * r); /** * Return the cross section calculated from the head matrix element */ CrossSection lastHeadCrossSection() const { return theLastHeadCrossSection; } /** * Visit the dependent XComb objects */ const StdDepXCVector& dependent() const { return theDependent; } /** * Return the matrix element group steered by this * XComb group. */ tcMEGroupPtr meGroup() const { return theMEGroup; } /** * Initialize this XComb group */ void build(const PartonPairVec& allPBins); /** * Construct a sub-process object from the information available. */ virtual tSubProPtr construct(); protected: /** * Construct the corresponding SubProcess object if it hasn't been * done before. */ virtual void newSubProcess(bool); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Set the cross section calculated from the head matrix element */ void lastHeadCrossSection(CrossSection xs) { theLastHeadCrossSection = xs; } private: /** * The MEGroup object */ MEGroupPtr theMEGroup; /** * The dependent XComb objects */ StdDepXCVector theDependent; /** * The cross section calculated from the head matrix element */ CrossSection theLastHeadCrossSection; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStdXCombGroup; /** * Private and non-existent assignment operator. */ StdXCombGroup & operator=(const StdXCombGroup &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * StdXCombGroup. */ template <> struct BaseClassTrait { /** Typedef of the base class of StdXCombGroup. */ typedef StandardXComb NthBase; }; /** * This template specialization informs ThePEG about the name of the * StdXCombGroup class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::StdXCombGroup"; } }; /** @endcond */ } #endif /* ThePEG_StdXCombGroup_H */ thepeg-1.8.0.orig/Handlers/HandlerBase.cc0000644000175000017500000000106111747772425016364 0ustar sunsun// -*- C++ -*- // // HandlerBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HandlerBase class. // #include "HandlerBase.h" using namespace ThePEG; AbstractNoPIOClassDescription HandlerBase::initHandlerBase; void HandlerBase::Init() {} thepeg-1.8.0.orig/Handlers/ZGenerator.h0000644000175000017500000000447011747772425016145 0ustar sunsun// -*- C++ -*- // // ZGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ZGenerator_H #define ThePEG_ZGenerator_H // This is the declaration of the ZGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Handlers/HandlerBase.h" namespace ThePEG { /** * ZGenerator is the base class for all classes implementing models to * generate the momentum fraction, \f$z\f$, taken by hadrons produced in a * hadronization scenario. * * It inherits from HandlerBase class which among other * things provides forward access to the random number generator of * the EventGenerator class. * * @see \ref ZGeneratorInterfaces "The interfaces" * defined for ZGenerator. * @see HandlerBase * @see EventGenerator */ class ZGenerator: public HandlerBase { public: /** @name Virtual functions mandated by the ZGenerator base class. */ //@{ /** * Return the momentum fraction. Assume that an initial * (anti-)(di-)quark \a q1 produces a hadron and leaves behind * another (anti-)(di-)quark \a q2. The hadron is assumed to have a * squared transverse mass, \a mT2, w.r.t. the initial quark * direction. * @return the energy fraction. */ virtual double generate(cPDPtr q1, cPDPtr q2, Energy2 mT2 ) const =0; //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractClassDescription initZGenerator; }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * ZGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of ZGenerator. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * ZGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::ZGenerator"; } }; /** @endcond */ } #endif /* ThePEG_ZGenerator_H */ thepeg-1.8.0.orig/Handlers/StepHandler.h0000644000175000017500000001126411747772425016275 0ustar sunsun// -*- C++ -*- // // StepHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StepHandler_H #define ThePEG_StepHandler_H // This is the declaration of the StepHandler class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Exception.fh" #include "ThePEG/Handlers/HandlerBase.h" #include namespace ThePEG { /** * StepHandler is the base class for implementing any model for a step * in the event generation chain. It has one main virtual method, * handle(), which should be overridden by sub classes. The handle * method is given a reference to a EventHandler, a vector * of particles and a Hint as arguments. The handler is only allowed * to treat particles which are in the vector. The Hint may be cast * dynamically to a sub class and do whatever it wishes with the * information found there. The EventHandler can be used to * add other StepHandlers and Hints to modify the * subsequent generation. If the StepHandler actually performs some * action, the resulting particles should be added to a new Step which * should be aquired with the newStep() function. * * @see \ref StepHandlerInterfaces "The interfaces" * defined for StepHandler. * @see EventHandler * @see Hint * @see Step * */ class StepHandler: public HandlerBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The destructor. */ virtual ~StepHandler(); //@} public: /** @name Virtual functions to be implemented by concrete sub-classes. */ //@{ /** * The main function called by the EventHandler class to * perform a step. * @param eh the EventHandler in charge of the Event generation. * @param tagged if not empty these are the only particles which should * be considered by the StepHandler. * @param hint a Hint object with possible information from previously * performed steps. * @throws Veto if the StepHandler requires the current step to be * discarded. * @throws Stop if the generation of the current Event should be stopped * after this call. * @throws Exception if something goes wrong. */ virtual void handle(EventHandler & eh, const tPVector & tagged, const Hint & hint) = 0; //@} /** @name Access to the calling EventHandler and current Step. */ //@{ /** * Get a pointer to the EventHandler which made the last call to * handle(). */ tEHPtr eventHandler() const { return theEventHandler; } /** * Set a pointer to the EventHandler which made the last call to * handle(). */ void eventHandler(tEHPtr); /** * Return a pointer to a new step. If one has alredy been created in * the last call to handle(), that step will be returned. */ tStepPtr newStep() { if ( !theNewStep ) createNewStep(); return theNewStep; } /** * If a new step has been created, return it, otherwise return the * current step from the eventHandler(). */ tStepPtr currentStep() { if ( theNewStep ) return theNewStep; return theCurrentStep; } //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Use the collision handler to create a new step. */ void createNewStep(); private: /** * A pointer to the (partial) collision handler which made the current * call to handle(). */ tEHPtr theEventHandler; /** * A pointer to a new step if created in the last call to handle(). */ tStepPtr theNewStep; /** * A pointer to the current step. Is equal to theNewStep if one was * created in the current call to handle(). */ tStepPtr theCurrentStep; private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initStepHandler; /** * Private and non-existent assignment operator. */ StepHandler & operator=(const StepHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * StepHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of StepHandler. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * StepHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::StepHandler"; } }; /** @endcond */ } #endif /* ThePEG_StepHandler_H */ thepeg-1.8.0.orig/Handlers/AnalysisHandler.h0000644000175000017500000002030611747772425017142 0ustar sunsun// -*- C++ -*- // // AnalysisHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_AnalysisHandler_H #define ThePEG_AnalysisHandler_H // This is the declaration of the AnalysisHandler class. #include "HandlerBase.h" #include "AnalysisHandler.fh" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Analysis/FactoryBase.h" #include "ThePEG/EventRecord/Event.h" #include namespace ThePEG { /** * The AnalysisHandler is the base class of all analysis objects which * may be handled by the FullEventGenerator. The main function is the * virtual analyze() method which which is called for * each analysis handler after each event. The method may be called * several times for each event - this may be checked by the analysis * handler by looking at the ieve, loop and * state arguments to the analyze method. * * Initialization of histograms etc. should be made in the * doinitrun() function, while writing out of histograms * and analysis results should be performed in the * dofinish() function. * * @see \ref AnalysisHandlerInterfaces "The interfaces" * defined for AnalysisHandler. * @see FullEventGenerator * @see Event */ class AnalysisHandler: public HandlerBase { public: /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef FactoryBase::tH1DPtr tH1DPtr; /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef FactoryBase::tcH1DPtr tcH1DPtr; /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef FactoryBase::tH2DPtr tH2DPtr; /** * Convenient typedef for pointer to AIDA::IHistogram1D. */ typedef FactoryBase::tcH2DPtr tcH2DPtr; public: /** @name Virtual functions required by the AnalysisHandler class. */ //@{ /** * Analyze a given Event. Note that a fully generated event may be * presented several times, if it has been manipulated in * between. The default version of this function will extract all * final state particles, temporarily boost them according to the * transform(tEventPtr) function and call analyze(tPVector) of this * analysis object and those of all associated analysis objects. The * default version will not, however, do anything on events which * have not been fully generated, or have been manipulated in any * way. * @param event pointer to the Event to be analyzed. * @param ieve the event number. * @param loop the number of times this event has been presented. * If negative the event is now fully generated. * @param state a number different from zero if the * event has been manipulated in some way since it was last * presented. */ virtual void analyze(tEventPtr event, long ieve, int loop, int state); /** * Transform the event to the desired Lorentz frame and return the * corresponding LorentzRotation. * @param event a pointer to the Event to be transformed. * @return the LorentzRotation used in the transformation. * @deprecated Use transform(tcEventPtr) instead. This method is no * longer used automatically. */ virtual LorentzRotation transform(tEventPtr event) const; /** * Return a LorentzTransform which would put the event in the * desired Lorentz frame. * @param event a pointer to the Event to be considered. * @return the LorentzRotation used in the transformation. */ virtual LorentzRotation transform(tcEventPtr event) const; /** * Analyze the given vector of particles. The default version calls * analyze(tPPtr) for each of the particles. * @param particles the vector of pointers to particles to be analyzed * @deprecated Use analyze(const tPVector &, double) instead. */ virtual void analyze(const tPVector & particles); /** * Analyze the given vector of particles. The default version calls * analyze(tPPtr) for each of the particles. * @param particles the vector of pointers to particles to be analyzed * @param weight the weight of the current event. */ virtual void analyze(const tPVector & particles, double weight); /** * Analyze the given particle. * @param particle pointer to the particle to be analyzed. * @deprecated us analyze(tPPtr, double) instead. */ virtual void analyze(tPPtr particle); /** * Analyze the given particle. * @param particle pointer to the particle to be analyzed. * @param weight the weight of the current event. */ virtual void analyze(tPPtr particle, double weight); //@} /** @name Functions to access histograms. */ //@{ /** * Check if the associated EventGenerator has been assigned a * histogram factory. If \a warn is true also emit a warning saying * that no histograms will be generated. */ bool checkHistogramFactory(bool warn = false) const; /** * Access the HistogramFactory from the EventGenerator. */ FactoryBase & histogramFactory(); /** * Access the HistogramFactory from the EventGenerator. */ const FactoryBase & histogramFactory() const; /** * Access the underlying AIDA::IHistogramFactory in the * HistogramFactory from the EventGenerator. */ AIDA::IHistogramFactory & iHistogramFactory() const { return histogramFactory().histogramFactory(); } /** * Normalize the histogran \a h using the collected statistics from * the EventGenerator. If the histogram has been filled with the * Event::weight() as weight a plotted function will correspond to a * proper cross section distribution in units of \a unit. This only * works for evenly binned histograms. If not evenly binned, nothing * will be done. */ void normalize(tH1DPtr h, CrossSection unit = picobarn) const; /** * Normalize the histogran \a h to unit integral. */ void unitNormalize(tH1DPtr h) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * A list of slave analysis objects which are called for the same * extracted particles and in the same Lorentz frame as this one. */ AnalysisVector theSlaves; //@} public: /** Exception class used if no histogram factory was found. */ class NoHistFactory: public InitException {}; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initAnalysisHandler; }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AnalysisHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of AnalysisHandler. */ typedef HandlerBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AnalysisHandler class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::AnalysisHandler"; } }; /** @endcond */ } #endif /* ThePEG_AnalysisHandler_H */ thepeg-1.8.0.orig/Handlers/MultipleInteractionHandler.cc0000644000175000017500000000156011747772425021511 0ustar sunsun// -*- C++ -*- // // MultipleInteractionHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MultipleInteractionHandler class. // #include "MultipleInteractionHandler.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription MultipleInteractionHandler::initMultipleInteractionHandler; void MultipleInteractionHandler::Init() { static ClassDocumentation documentation ("There is no documentation for the " "ThePEG::MultipleInteractionHandler class"); } thepeg-1.8.0.orig/Handlers/StdDependentXComb.h0000644000175000017500000001177111747772425017401 0ustar sunsun// -*- C++ -*- // // StdDependentXComb.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StdDependentXComb_H #define ThePEG_StdDependentXComb_H // This is the declaration of the StdDependentXComb class. #include "StandardXComb.h" #include "StdDependentXComb.fh" namespace ThePEG { /** * The StdDependentXComb class inherits from the StandardXComb * class and represents information on a hard subprocess in dependence * of another hard subprocess referred to by the head XComb object. * Such associations are commonly encountered in higher order corrections * carried ouut within the subtraction method. This is indeed the main * application of the StdXCombGroup and StdDependentXComb classes. * * @see StdXCombGroup * @see MEGroup */ class StdDependentXComb: public StandardXComb { /** MEBase needs to be a friend. */ friend class MEBase; public: /** @name Standard constructors and destructors. */ //@{ /** * Standard constructor. */ StdDependentXComb(tStdXCombPtr newHead, const PBPair & newPartonBins, tMEPtr newME, const DiagramVector & newDiagrams); /** * Default constructor. */ StdDependentXComb(); /** * Destructor. */ virtual ~StdDependentXComb(); public: /** * Return the cross section differential in the variables * previously supplied. The PDF weight is taken from the * lastPDFWeight supplied by the head XComb object. */ CrossSection dSigDR(); /** * Setup information on incoming partons depending * on the information previously supplied through the * choice of diagram and incoming momenta in the first * two entries of meMomenta(). Partons are not actually * extracted from the incoming particles, though a subprocess * detached from the current Event may be created. */ void setIncomingPartons(); /** * Indicate that information on incoming partons * has to be collected. */ void remakeIncoming() { resetIncoming = true; } /** * Set the process as selected by the dependent matrix element. */ void setProcess(); /** * Construct a sub-process object from the information available. */ virtual tSubProPtr construct(); /** * Properly setup the PartonBinInstance objects * provided a sub process has been constructed * using this XComb. */ void setPartonBinInstances(Energy2 scale = ZERO); /** @name Functions used for collecting statistics. */ //@{ /** * The statistics object for this XComb. */ virtual const XSecStat & stats() const { return head()->stats(); } /** * Select the current event. It will later be rejected with a * probability given by \a weight. */ virtual void select(double weight) { head()->select(weight); } /** * Accept the current event assuming it was previously selcted. */ virtual void accept() { head()->accept(); } /** * Reject the current event assuming it was previously accepted. If * weighted events are produced, the \a weight should be the same as * the previous call to select(double). */ virtual void reject(double weight = 1.0) { head()->reject(weight); } /** * Reset statistics. */ virtual void reset() { head()->reset(); } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Wether or not we have to reset the incoming partons */ bool resetIncoming; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStdDependentXComb; /** * Private and non-existent assignment operator. */ StdDependentXComb & operator=(const StdDependentXComb &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * StdDependentXComb. */ template <> struct BaseClassTrait { /** Typedef of the base class of StdDependentXComb. */ typedef StandardXComb NthBase; }; /** * This template specialization informs ThePEG about the name of the * StdDependentXComb class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::StdDependentXComb"; } }; /** @endcond */ } #endif /* ThePEG_StdDependentXComb_H */ thepeg-1.8.0.orig/Handlers/FlavourGenerator.cc0000644000175000017500000000616611747772425017514 0ustar sunsun// -*- C++ -*- // // FlavourGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FlavourGenerator class. // #include "FlavourGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/ParticleData.h" using namespace ThePEG; tcPDPair FlavourGenerator::alwaysGenerateHadron(tcPDPtr q) const { tcPDPair hq = generateHadron(q); if ( !hq.first || ! hq.second ) throw FlavourGeneratorException() << "Flavour generator '" << name() << "' was not able to generate a " << "hadron from the flavour " << q->PDGName() << "." << Exception::runerror; return hq; } tcPDPtr FlavourGenerator::getBaryon(tcPDPtr q1, tcPDPtr q2, tcPDPtr q3) const { return getBaryon(q1->id(), q2->id(), q3->id()); } tcPDPtr FlavourGenerator::getBaryon(long iq1, long iq2, long iq3) const { return getBaryon(getParticleData(iq1), getParticleData(iq2), getParticleData(iq3)); } tcPDPtr FlavourGenerator:: alwaysGetBaryon(tcPDPtr q1, tcPDPtr q2, tcPDPtr q3) const { tcPDPtr ret = getBaryon(q1, q2, q3); if ( !ret ) throw FlavourGeneratorException() << "Flavour generator '" << name() << "' was not able to get a " << "baryon from the flavours " << q1->PDGName() << "," << q2->PDGName() << " and " << q3->PDGName() << "." << Exception::runerror; return ret; } tcPDPtr FlavourGenerator::alwaysGetBaryon(long iq1, long iq2, long iq3) const { tcPDPtr ret = getBaryon(iq1, iq2, iq3); if ( !ret ) throw FlavourGeneratorException() << "Flavour generator '" << name() << "' was not able to get a " << "baryon from the flavours " << iq1 << "," << iq2 << " and " << iq3 << "." << Exception::runerror; return ret; } tcPDPtr FlavourGenerator::getHadron(tcPDPtr q1, tcPDPtr q2) const { return getHadron(q1->id(), q2->id()); } tcPDPtr FlavourGenerator::getHadron(long iq1, long iq2) const { return getHadron(getParticleData(iq1), getParticleData(iq2)); } tcPDPtr FlavourGenerator::alwaysGetHadron(tcPDPtr q1, tcPDPtr q2) const { tcPDPtr ret = getHadron(q1, q2); if ( !ret ) throw FlavourGeneratorException() << "Flavour generator '" << name() << "' was not able to get a " << "hadron from the flavours " << q1->PDGName() << " and " << q2->PDGName() << "." << Exception::runerror; return ret; } tcPDPtr FlavourGenerator::alwaysGetHadron(long iq1, long iq2) const { tcPDPtr ret = getHadron(iq1, iq2); if ( !ret ) throw FlavourGeneratorException() << "Flavour generator '" << name() << "' was not able to get a " << "hadron from the flavours " << iq1 << " and " << iq2 << "." << Exception::runerror; return ret; } AbstractNoPIOClassDescription FlavourGenerator::initFlavourGenerator; void FlavourGenerator::Init() { static ClassDocumentation documentation ("This class is used to generate hadron types using a given flavour " "content."); } thepeg-1.8.0.orig/Handlers/SimpleZGenerator.h0000644000175000017500000000746611747772425017327 0ustar sunsun// -*- C++ -*- // // SimpleZGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SimpleZGenerator_H #define THEPEG_SimpleZGenerator_H // This is the declaration of the SimpleZGenerator class. #include "ThePEG/Handlers/ZGenerator.h" namespace ThePEG { /** * SimpleZGenerator is a very simple concrete subclass of * ZGenerator. It implements a naive unphysical model to generate the * momentum fraction, \f$z\f$, taken by hadrons produced in a hadronization * scenario. It should only be used for testing purposes. * * @see \ref SimpleZGeneratorInterfaces "The interfaces" * defined for SimpleZGenerator. */ class SimpleZGenerator: public ZGenerator { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~SimpleZGenerator(); //@} public: /** @name Virtual functions mandated by the ZGenerator base class. */ //@{ /** * Return the momentum fraction. Assume that an initial * (anti-)(di-)quark \a q1 produces a hadron and leaves behind * another (anti-)(di-)quark \a q2. The hadron is assumed to have a * squared transverse mass, \a mT2, w.r.t. the initial quark * direction. * @return the energy fraction distributed as \f$\sqrt{z}\f$ (or * \f$1-\sqrt{z}\f$) if \a q1 (or \a q2) is a diquark. Otherwise a * flat distribution is used. */ virtual double generate(cPDPtr q1, cPDPtr q2, Energy2 mT2 ) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class with persistent data. */ static ClassDescription initSimpleZGenerator; /** * Private and non-existent assignment operator. */ SimpleZGenerator & operator=(const SimpleZGenerator &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * SimpleZGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of SimpleZGenerator. */ typedef ZGenerator NthBase; }; /** * This template specialization informs ThePEG about the name of the * SimpleZGenerator class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::SimpleZGenerator"; } /** * Return the name of the shared library to be loaded to get access * to the SimpleZGenerator class and every other class it uses * (except the base class). */ static string library() { return "SimpleZGenerator.so"; } }; /** @endcond */ } #endif /* THEPEG_SimpleZGenerator_H */ thepeg-1.8.0.orig/Handlers/StdXCombGroup.cc0000644000175000017500000002473411747772425016730 0ustar sunsun// -*- C++ -*- // // StdXCombGroup.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StdXCombGroup class. // #include "StdXCombGroup.h" #include "ThePEG/MatrixElement/MEGroup.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/SubProcessGroup.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/EventRecord/TmpTransform.h" using namespace ThePEG; StdXCombGroup::StdXCombGroup(Energy newMaxEnergy, const cPDPair & inc, tEHPtr newEventHandler,tSubHdlPtr newSubProcessHandler, tPExtrPtr newExtractor, tCascHdlPtr newCKKW, const PBPair & newPartonBins, tCutsPtr newCuts, tMEGroupPtr newME, const DiagramVector & newDiagrams, bool mir) : StandardXComb(newMaxEnergy,inc,newEventHandler,newSubProcessHandler, newExtractor, newCKKW, newPartonBins, newCuts, newME, newDiagrams, mir), theMEGroup(newME), theDependent(), theLastHeadCrossSection(ZERO) {} StdXCombGroup::StdXCombGroup() : StandardXComb(), theDependent() {} void StdXCombGroup::build(const PartonPairVec& allPBins) { for ( MEVector::const_iterator me = theMEGroup->dependent().begin(); me != theMEGroup->dependent().end(); ++me ) { StdDependentXCombPtr dep = theMEGroup->makeDependentXComb(this,diagrams().front()->partons(),*me,allPBins); theDependent.push_back(dep); } } StdXCombGroup::~StdXCombGroup() { } CrossSection StdXCombGroup::dSigDR(const pair ll, int nr, const double * r) { matrixElement()->flushCaches(); if ( matrixElement()->keepRandomNumbers() ) { lastRandomNumbers().resize(nDim()); copy(r,r+nDim(),lastRandomNumbers().begin()); } pExtractor()->select(this); setPartonBinInfo(); lastP1P2(ll); lastS(sqr(maxEnergy())/exp(lastP1() + lastP2())); meMomenta().resize(mePartonData().size()); matrixElement()->setXComb(this); PPair partons; if ( !matrixElement()->haveX1X2() ) { if ( !pExtractor()->generateL(partonBinInstances(), r, r + nr - partonDims.second) ) { lastCrossSection(ZERO); return ZERO; } partons = make_pair(partonBinInstances().first->parton(), partonBinInstances().second->parton()); lastSHat(lastS()/exp(partonBinInstances().first->l() + partonBinInstances().second->l())); meMomenta()[0] = partons.first->momentum(); meMomenta()[1] = partons.second->momentum(); } else { if ( !matrixElement()->generateKinematics(r + partonDims.first) ) { lastCrossSection(ZERO); return ZERO; } lastSHat((meMomenta()[0]+meMomenta()[1]).m2()); matrixElement()->setKinematics(); lastScale(matrixElement()->scale()); partons.first = mePartonData()[0]->produceParticle(meMomenta()[0]); partons.second = mePartonData()[1]->produceParticle(meMomenta()[1]); Direction<0> dir(true); partonBinInstances().first = new_ptr(PartonBinInstance(lastParticles().first,partons.first, partonBins().first,lastScale())); dir.reverse(); partonBinInstances().second = new_ptr(PartonBinInstance(lastParticles().second,partons.second, partonBins().second,lastScale())); } lastPartons(partons); if ( lastSHat() < cuts()->sHatMin() ) { lastCrossSection(ZERO); return ZERO; } lastY(0.5*(partonBinInstances().second->l() - partonBinInstances().first->l())); if ( !cuts()->initSubProcess(lastSHat(), lastY(), mirror()) ) { lastCrossSection(ZERO); return ZERO; } if ( mirror() ) swap(meMomenta()[0], meMomenta()[1]); if ( matrixElement()->wantCMS() && !matrixElement()->haveX1X2() ) SimplePhaseSpace::CMS(meMomenta()[0], meMomenta()[1], lastSHat()); Energy summ = ZERO; if ( meMomenta().size() == 3 ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[2] = Lorentz5Momentum(sqrt(lastSHat())); } else { for ( int i = 2, N = meMomenta().size(); i < N; ++i ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[i] = Lorentz5Momentum(mePartonData()[i]->mass()); summ += mePartonData()[i]->massMin(); } if ( sqr(summ) >= lastSHat() ) { lastCrossSection(ZERO); return ZERO; } } matrixElement()->setXComb(this); if ( !matrixElement()->haveX1X2() ) lastScale(max(lastSHat()/4.0, cuts()->scaleMin())); lastSHat(pExtractor()->generateSHat(lastS(), partonBinInstances(), r, r + nr - partonDims.second, matrixElement()->haveX1X2())); if ( !cuts()->sHat(lastSHat()) ) { lastCrossSection(ZERO); return ZERO; } r += partonDims.first; lastX1X2(make_pair(lastPartons().first->momentum().plus()/ lastParticles().first->momentum().plus(), lastPartons().second->momentum().minus()/ lastParticles().second->momentum().minus())); if ( !cuts()->x1(lastX1()) || !cuts()->x2(lastX2()) ) { lastCrossSection(ZERO); return ZERO; } lastY((lastPartons().first->momentum() + lastPartons().second->momentum()).rapidity()); if ( !cuts()->yHat(lastY()) ) { lastCrossSection(ZERO); return ZERO; } if ( !cuts()->initSubProcess(lastSHat(), lastY(), mirror()) ) { lastCrossSection(ZERO); return ZERO; } meMomenta()[0] = lastPartons().first->momentum(); meMomenta()[1] = lastPartons().second->momentum(); if ( mirror() ) swap(meMomenta()[0], meMomenta()[1]); if ( matrixElement()->wantCMS() && !matrixElement()->haveX1X2() ) SimplePhaseSpace::CMS(meMomenta()[0], meMomenta()[1], lastSHat()); if ( meMomenta().size() == 3 ) { if ( !matrixElement()->haveX1X2() ) meMomenta()[2] = Lorentz5Momentum(sqrt(lastSHat())); } else { if ( sqr(summ) >= lastSHat() ) { lastCrossSection(ZERO); return ZERO; } } matrixElement()->setXComb(this); if ( !matrixElement()->haveX1X2() ) { if ( !matrixElement()->generateKinematics(r) ) { lastCrossSection(ZERO); return ZERO; } } lastScale(matrixElement()->scale()); if ( !cuts()->scale(lastScale()) ) { lastCrossSection(ZERO); return ZERO; } pair evalPDFS = make_pair(matrixElement()->havePDFWeight1(), matrixElement()->havePDFWeight2()); if ( mirror() ) swap(evalPDFS.first,evalPDFS.second); lastPDFWeight(pExtractor()->fullFn(partonBinInstances(), lastScale(), evalPDFS)); if ( lastPDFWeight() == 0.0 ) { lastCrossSection(ZERO); return ZERO; } matrixElement()->setKinematics(); CrossSection xsec = matrixElement()->dSigHatDR() * lastPDFWeight(); bool noHeadPass = !willPassCuts() || xsec == ZERO; if ( noHeadPass ) lastCrossSection(ZERO); lastAlphaS(matrixElement()->alphaS()); lastAlphaEM(matrixElement()->alphaEM()); subProcess(SubProPtr()); if ( CKKWHandler() && matrixElement()->maxMultCKKW() > 0 && matrixElement()->maxMultCKKW() > matrixElement()->minMultCKKW() ) { newSubProcess(theMEGroup->subProcessGroups()); CKKWHandler()->setXComb(this); xsec *= CKKWHandler()->reweightCKKW(matrixElement()->minMultCKKW(), matrixElement()->maxMultCKKW()); } if ( matrixElement()->reweighted() ) { newSubProcess(theMEGroup->subProcessGroups()); xsec *= matrixElement()->reWeight() * matrixElement()->preWeight(); } lastHeadCrossSection(xsec); CrossSection depxsec = ZERO; if ( !theMEGroup->mcSumDependent() ) { for ( StdDepXCVector::const_iterator dep = theDependent.begin(); dep != theDependent.end(); ++dep ) { if ( !(*dep) ) continue; if ( !(**dep).matrixElement()->apply() ) continue; if ( noHeadPass && (**dep).matrixElement()->headCuts() ) continue; depxsec += (**dep).dSigDR(); } } else { if ( !noHeadPass || !theMEGroup->lastDependentXComb()->matrixElement()->headCuts() ) depxsec = theDependent.size()*theMEGroup->lastDependentXComb()->dSigDR(); } if ( xsec != ZERO ) { double rw = 1.0 + depxsec/xsec; xsec *= rw; } else { xsec = depxsec; } lastCrossSection(xsec); if ( xsec != ZERO ) theMEGroup->lastEventStatistics(); return xsec; } void StdXCombGroup::newSubProcess(bool) { // subprocess selection goes here // if me group returns an associated // selector StandardXComb::newSubProcess(theMEGroup->subProcessGroups()); if ( !theMEGroup->subProcessGroups() ) return; subProcess()->groupWeight(lastHeadCrossSection()/lastCrossSection()); Ptr::tptr group = dynamic_ptr_cast::tptr>(subProcess()); assert(group); for ( StdDepXCVector::iterator dep = theDependent.begin(); dep != theDependent.end(); ++dep ) { if ( !(*dep) ) continue; if ( (**dep).lastCrossSection() == ZERO || !(**dep).matrixElement()->apply() ) continue; tSubProPtr ds; try { ds = (**dep).construct(); } catch(Veto&) { continue; } if ( ds ) group->add(ds); } } tSubProPtr StdXCombGroup::construct() { if ( !theMEGroup->subProcessGroups() ) return StandardXComb::construct(); matrixElement()->setXComb(this); setPartonBinInfo(); matrixElement()->setKinematics(); newSubProcess(true); TmpTransform tmp(subProcess(), Utilities::getBoostToCM(subProcess()->incoming())); if ( !cuts()->passCuts(*subProcess()) ) { subProcess()->groupWeight(0.0); } return subProcess(); } void StdXCombGroup::Init() {} void StdXCombGroup::persistentOutput(PersistentOStream & os) const { os << theDependent << theMEGroup << ounit(theLastHeadCrossSection,nanobarn); } void StdXCombGroup::persistentInput(PersistentIStream & is, int) { is >> theDependent >> theMEGroup >> iunit(theLastHeadCrossSection,nanobarn); } ClassDescription StdXCombGroup::initStdXCombGroup; thepeg-1.8.0.orig/Handlers/ClusterCollapser.fh0000644000175000017500000000053711747772425017521 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_ClusterCollapser_FH #define ThePEG_ClusterCollapser_FH // // This is the forward declaration of the ClusterCollapser class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class ClusterCollapser; ThePEG_DECLARE_CLASS_POINTERS(ClusterCollapser,ClusterCollapserPtr); } #endif /* ThePEG_ClusterCollapser_FH */ thepeg-1.8.0.orig/Handlers/EventHandler.h0000644000175000017500000004164611747772425016452 0ustar sunsun// -*- C++ -*- // // EventHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventHandler_H #define ThePEG_EventHandler_H // This is the declaration of the EventHandler class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/Handlers/HandlerGroup.h" #include "ThePEG/Handlers/StepHandler.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/Handlers/SubProcessHandler.fh" #include "ThePEG/Cuts/Cuts.fh" #include "EventHandler.fh" namespace ThePEG { /** * The EventHandler is the base class used to implement event handlers * in ThePEG. Objects of this class is assigned to an EventGenerator * object which supervises a run. This base class is not able to * generate complete events, although it does have a virtual * generateEvent(). If the EventGenerator to which an EventGenerator * is assinged is asked to generate a full event, it will call the * generateEvent() function which will write an error message and * abort the run. * * Objects of this base class can, however, be used to administer the * evolution of a partially generated event supplied from the * outside. To specify this event evolution the EventHandler maintains * five groups of so-called StepHandlers implemented as * HandlerGroups. Each group have a main step handler: * SubProcessHandler, CascadeHandler, MultipleInteractionHandler, * HadronizationHandler and DecayHandler respectively, whereof the * first group only uses the post-handler part of the group. * * The EventHandler class inherits from the LastXCombInfo class to * have easy interface to the information in the last selected XComb * which carries information about the hard sub-process in the event. * * If a sub-class implements the generation of sub-processes and thus * becomes a full event handler it should implement the * generateEvent() function appropriately. It should also set the flag * warnIncomplete to false, to avoid warnings when initialized as the main * EventHandler of an Eventgenerator. * * @see \ref EventHandlerInterfaces "The interfaces" defined for EventHandler. * @see Collision * @see StepHandler * @see HandlerGroup * @see SubProcessHandler * @see CascadeHandler * @see MultipleInteractionHandler * @see HadronizationHandler * @see DecayHandler */ class EventHandler: public HandlerBase, public LastXCombInfo<> { public: /** Enumerate the different levels of consistency checking. */ enum ConsistencyLevel { clNoCheck, /**< Do not perform consistency checks. */ clCollision, /**< Check every Collision. */ clStep, /**< Check every Step. */ clPrintCollision, /**< Check every Collision. Print event if inconsistent.*/ clPrintStep /**< Check every Step. Print event if inconsistent. */ }; /** A vector of HandlerGroups. */ typedef vector GroupVector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ EventHandler(bool warnincomplete = true); /** * Copy-constructor. */ EventHandler(const EventHandler &); /** * Destructor. */ virtual ~EventHandler(); //@} public: /** @name Main functions, some of which may be overridden by subclasses. */ //@{ /** * Initialize this event handler and all related objects needed to * generate events. */ virtual void initialize(); /** * Generate an event. This base class is not capable of generating * complete events and calling this function will result in an * exception. Sub-classes which are capable of generating complete * events from scratch must override this function. */ virtual EventPtr generateEvent(); /** * Generate an Event, where the initial state is supplied * from the outside. * @return a pointer to the generated Event. */ tEventPtr generateEvent(tEventPtr e); /** * Generate an Event, where the initial state is supplied as a * single step from the outside. * @return a pointer to the generated Event. */ tEventPtr generateEvent(tStepPtr s); /** * Continue generating an event if the generation has been stopped * before finishing. */ virtual EventPtr continueEvent(); /** * Continue the generation of a Collision. Used if the generation * was previously interrupted. */ tCollPtr continueCollision(); /** * Clear all step handlers, making the handler ready for a new event. */ void clearEvent(); /** * Change the XComb object */ virtual void select(tXCombPtr newXComb); /** * Returns true if there are no step handlers left to apply to the * current event; */ virtual bool empty() const; /** * Write out accumulated statistics about intergrated cross sections * and stuff. */ virtual void statistics(ostream &) const; /** * Histogram scale. A histogram bin which has been filled with the * weights associated with the Event objects should be scaled by * this factor to give the correct cross section. This version of * the function will produce an error message. It is up to a * sub-class able to generate full events to return the correct * value. */ virtual CrossSection histogramScale() const; /** * The total integrated cross section of the processes generated in * this run. This version of the function will produce an error * message. It is up to a sub-class able to generate full events to * return the correct value. * @return 0 if no integrated cross section could be estimated. */ virtual CrossSection integratedXSec() const; /** * The estimated error in the total integrated cross section of the * processes generated in this run. This version of the function * will produce an error message. It is up to a sub-class able to * generate full events to return the correct value. * @return 0 if no integrated cross section error could be estimated. */ virtual CrossSection integratedXSecErr() const; //@} /** @name Simple access functions. */ //@{ /** * Return the maximum number attemts allowed to select a sub-process * for each event. */ long maxLoop() const { return theMaxLoop; } /** * The pair of incoming particle types. These are null if not set by * a subclass. */ const cPDPair & incoming() const { return theIncoming; } /** * Access the luminosity function. */ const LuminosityFunction & lumiFn() const { return *theLumiFn; } /** * Access the luminosity function. */ tcLumiFnPtr lumiFnPtr() const{ return theLumiFn; } /** * Access to the luminosity function. */ tLumiFnPtr lumiFnPtr(){ return theLumiFn; } /** * The kinematical cuts to used by subclasses which do not provide their own. */ tCutsPtr cuts() const { return theCuts; } /** * A PartonExtractor object to be used by sub classes which do not * provide their own. */ tPExtrPtr partonExtractor() const { return thePartonExtractor; } /** * Return a pointer (possibly null) to the assigned main * CascadeHandler to be used as CKKW-reweighter. */ tCascHdlPtr CKKWHandler() const; /** * Gget current event. */ tEventPtr currentEvent() const { return theCurrentEvent; } /** * Get current collision. */ tCollPtr currentCollision() const { return theCurrentCollision; } /** * Get current step. */ tStepPtr currentStep() const { return theCurrentStep; } /** * The level of statistics. Controlls the amount of statistics * written out after each run to the EventGenerators * .out file. */ int statLevel() const { return theStatLevel; } /** * Determines how often the event handler should check for charge * and energy-momentum conservation. */ ConsistencyLevel consistencyLevel() const { return theConsistencyLevel; } /** * The maximum fraction of the total invariant mass of a collision * that any of the components of the summed momentum is allowed to * change during the generation. */ double consistencyEpsilon() const { return theConsistencyEpsilon; } //@} /** @name Internal functions used by main functions and possibly from the outside. */ //@{ /** * Perform a given step using a handler and a hint. */ void performStep(tStepHdlPtr handler, tHintPtr hint); /** * In the curresnt list of step handlers to go through, add another * step handler and/or hint. */ void addStep(Group::Level, Group::Handler, tStepHdlPtr = tStepHdlPtr(), tHintPtr = tHintPtr()); /** * Create a new step and make it current. A StepHandler should be * supplied which will be set as the handler for the created * Step. */ tStepPtr newStep(tcStepHdlPtr sh) { currentStep(currentCollision()->newStep(sh)); return currentStep(); } /** * Remove the last step. */ void popStep() { currentCollision()->popStep(); currentStep(currentCollision()->finalStep()); } /** * Initialize the groups of step handlers. */ virtual void initGroups(); /** * Set current event. */ void currentEvent(tEventPtr e) { theCurrentEvent = e; } /** * Set current collision. */ void currentCollision(tCollPtr c) { theCurrentCollision = c; } /** * Set current step. */ void currentStep(tStepPtr s) { theCurrentStep = s; } /** * Get current StepHandler. */ tStepHdlPtr currentStepHandler() const { return theCurrentStepHandler; } /** * Set current StepHandler. */ void currentStepHandler(tStepHdlPtr sh) { theCurrentStepHandler = sh; } /** * Throw away the current event/collision. */ void throwCurrent(); /** * Throw away the last generated event before generating a new one. */ virtual void clean(); /** * Check that the charge and energy-momentum in the last step of the * current collision is consistent with the incoming particles. If * not, a warning will be generated. */ virtual void checkConsistency() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish() { currentEvent(tEventPtr()); currentCollision(tCollPtr()); currentStep(tStepPtr()); HandlerBase::dofinish(); } /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans); /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} protected: /** * Access to the luminosity function. */ LuminosityFunction & lumiFn() { return *theLumiFn; } /** * Setup the step handler groups. */ void setupGroups(); /** * Access the step handler groups */ GroupVector & groups() { return theGroups; } /** * Access the step handler groups */ const GroupVector & groups() const { return theGroups; } protected: /** * Set the luminosity function */ void lumiFn(LumiFnPtr); private: /** * The maximum number of attempts to select a sub-process allowed * per event. */ long theMaxLoop; /** * Controlls the amount of statistics written out after each run to * the EventGenerators .out file. */ int theStatLevel; /** * Determines how often the event handler should check for charge * and energy-momentum conservation. */ ConsistencyLevel theConsistencyLevel; /** * The maximum fraction of the total invariant mass of a collision * that any of the components of the summed momentum is allowed to * change during the generation. */ double theConsistencyEpsilon; /** * Pointer to a luminosity function tobe used by subclasses. */ LumiFnPtr theLumiFn; /** * The kinematical cuts to used by subclasses which do not provide * their own. */ CutsPtr theCuts; /** * A PartonExtractor object to be used by sub classes which do not * provide their own. */ PExtrPtr thePartonExtractor; /** * The SubProcessHandler group. */ HandlerGroup theSubprocessGroup; /** * The CascadeHandler group. */ HandlerGroup theCascadeGroup; /** * The MultipleInteractionHandler group. */ HandlerGroup theMultiGroup; /** * The HadronizationHandler group. */ HandlerGroup theHadronizationGroup; /** * The DecayHandler group. */ HandlerGroup theDecayGroup; /** * The step handler groups. */ GroupVector theGroups; /** * The current Event. */ EventPtr theCurrentEvent; /** * The current Collision. */ CollPtr theCurrentCollision; /** * The current Step. */ StepPtr theCurrentStep; /** * The current StepHandler. */ StepHdlPtr theCurrentStepHandler; protected: /** * Utility object to facilitate default selection of step handlers. */ HandlerGroup optSubprocessGroup; /** * Utility object to facilitate default selection of step handlers. */ HandlerGroup optCascadeGroup; /** * Utility object to facilitate default selection of step handlers. */ HandlerGroup optMultiGroup; /** * Utility object to facilitate default selection of step handlers. */ HandlerGroup optHadronizationGroup; /** * Utility object to facilitate default selection of step handlers. */ HandlerGroup optDecayGroup; protected: /** * Utility object to facilitate default selection of step handlers. */ GroupVector optGroups; protected: /** * Emit warning that this EventHandler is incomplete. */ bool warnIncomplete; /** * The pair of incoming particle types. Should be set by a subclass * which implements a complete EventHandler. */ cPDPair theIncoming; protected: /** @cond EXCEPTIONCLASSES */ /** * Exception class used by EventHandler when a StepHandler of the * wrong class was added. */ class EventHandlerStepError: public Exception {}; /** * Exception class used by EventHandler when not able to produce a * correct histogram scale. */ class EventHandlerHistError: public Exception {}; /** * Exception class used by EventHandler if asked to generate a * complete event. */ class EventHandlerIncompleteError: public Exception {}; /** Exception class used if too many attempts to generate an event * failed. */ struct EventLoopException: public Exception { /** Standard constructor. */ EventLoopException(const EventHandler &); }; /** * Exception class used if the assignment of a LuminosityFunction * failed */ struct LumiFuncError: public Exception {}; /** * Exception class used if inconsistent charge or energy-momentum was found. */ struct ConsistencyException: public Exception {}; /** @endcond */ private: ThePEG_DECLARE_PREPOST_GROUP(SubProcessHandler,Post); ThePEG_DECLARE_GROUPINTERFACE(CascadeHandler,CascHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(MultipleInteractionHandler,MIHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(HadronizationHandler,HadrHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(DecayHandler,DecayHdlPtr); ThePEG_DECLARE_CLASS_DESCRIPTION(EventHandler); /** * Private and non-existent assignment operator. */ EventHandler & operator=(const EventHandler &); }; /** @cond TRAITSPECIALIZATIONS */ ThePEG_DECLARE_CLASS_TRAITS(EventHandler,HandlerBase); /** @endcond */ } #endif /* ThePEG_EventHandler_H */ thepeg-1.8.0.orig/Handlers/FixedCMSLuminosity.cc0000644000175000017500000000360411747772425017720 0ustar sunsun// -*- C++ -*- // // FixedCMSLuminosity.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FixedCMSLuminosity class. // #include "FixedCMSLuminosity.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; FixedCMSLuminosity::~FixedCMSLuminosity() {} IBPtr FixedCMSLuminosity::clone() const { return new_ptr(*this); } IBPtr FixedCMSLuminosity::fullclone() const { return new_ptr(*this); } void FixedCMSLuminosity::setEnergy(Energy e) { beamEMaxA(e*0.5); beamEMaxB(e*0.5); } Energy FixedCMSLuminosity::getEnergy() const { return energy(); } NoPIOClassDescription FixedCMSLuminosity::initFixedCMSLuminosity; void FixedCMSLuminosity::Init() { static ClassDocumentation documentation ("The ThePEG::FixedCMSLuminosity class describes an experiment " "with incoming particles colliding with precicely defined and " "opposite momenta given by half the Energy."); static Parameter interfaceEnergy ("Energy", "The total energy in GeV in the cms of the colliding particles.", 0, GeV, 91.2*GeV, ZERO, ZERO, true, false, Interface::lowerlim, &FixedCMSLuminosity::setEnergy, &FixedCMSLuminosity::getEnergy, (Energy(FixedCMSLuminosity::*)()const)(0), (Energy(FixedCMSLuminosity::*)()const)(0), (Energy(FixedCMSLuminosity::*)()const)(0)); interfaceEnergy.setHasDefault(false); interfaceEnergy.rank(11); } thepeg-1.8.0.orig/Handlers/SamplerBase.h0000644000175000017500000001157411747772425016266 0ustar sunsun// -*- C++ -*- // // SamplerBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SamplerBase_H #define ThePEG_SamplerBase_H // This is the declaration of the SamplerBase class. #include "ThePEG/Interface/Interfaced.h" #include "SamplerBase.fh" #include "ThePEG/Handlers/StandardEventHandler.fh" // #include "SamplerBase.xh" namespace ThePEG { /** * This is the base class for all phase space sampler classes to be * used by the EventHandler class to sample the phase space according * to the cross sections for the processes in the EventHandler. The * class should be able to sample a unit hyper-cube in arbitrary * dimensions. The points need not necessarily be sampled with unit * weight. * * The virtual methods to be implemented by concrete sub-classes are * initialize(), generate() and rejectLast(). * * @see \ref SamplerBaseInterfaces "The interfaces" * defined for SamplerBase. * @see EventHandler */ class SamplerBase: public Interfaced { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~SamplerBase(); //@} public: /** * Set the event handler for which the function * StandardEventHandler::dSigDR(const vector &) function * returns the cross section for the chosen phase space point. */ void setEventHandler(tStdEHPtr eh) { theEventHandler = eh; } /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Initialize the the sampler, possibly doing presampling of the * phase space. */ virtual void initialize() = 0; /** * Generarate a new phase space point and return a weight associated * with it. This weight should preferably be 1. */ virtual double generate() = 0; /** * Reject the last chosen phase space point. */ virtual void rejectLast() = 0; /** * Return the last generated phase space point. */ const vector & lastPoint() const { return theLastPoint; } /** * If the sampler is able to sample several different functions * separately, this function should return the last chosen * function. This default version always returns 0. */ virtual int lastBin() const { return 0; } /** * Return the total integrated cross section determined from the * Monte Carlo sampling so far. */ virtual CrossSection integratedXSec() const = 0; /** * Return the error on the total integrated cross section determined * from the Monte Carlo sampling so far. */ virtual CrossSection integratedXSecErr() const = 0; /** * Return the overestimated integrated cross section. */ virtual CrossSection maxXSec() const = 0; /** * Return the sum of the weights returned by generate() so far (of * the events that were not rejeted). */ virtual double sumWeights() const = 0; //@} protected: /** * Return the last generated phase space point. */ vector & lastPoint() { return theLastPoint; } /** * Return the associated event handler. */ tStdEHPtr eventHandler() const { return theEventHandler; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); private: /** * The associated event handler. */ tStdEHPtr theEventHandler; /** * The last generated phase space point. */ vector theLastPoint; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initSamplerBase; /** * Private and non-existent assignment operator. */ SamplerBase & operator=(const SamplerBase &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * SamplerBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of SamplerBase. */ typedef Interfaced NthBase; }; /** * This template specialization informs ThePEG about the name of the * SamplerBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::SamplerBase"; } }; /** @endcond */ } #endif /* ThePEG_SamplerBase_H */ thepeg-1.8.0.orig/Handlers/EventManipulator.h0000644000175000017500000000577711747772425017375 0ustar sunsun// -*- C++ -*- // // EventManipulator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventManipulator_H #define ThePEG_EventManipulator_H // This is the declaration of the EventManipulator class. #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Handlers/EventHandler.fh" #include namespace ThePEG { /** * An object of the EventManipulator class may be assigned to a * FullEventGenerator object. The manipulate() method is called for * each event generated, after the AnalysisHandlers have been called, * and may manipulate the event in any way needed. The manipulator may * alseo add StepHandlers to the EventHandler which produced the * event. The manipulate() method returns an integer which should be * zero if nothing was done to the event. If the EventHandler has * steps left to do, these are performed, after which the * AnalysisHandlers are called with the return value from * the previous manipulate() call. Then manipulate is called again and * the procedure is repeated until the EventHandler has no more steps * to do. * * @see \ref EventManipulatorInterfaces "The interfaces" * defined for EventManipulator. * @see FullEventGenerator * @see AnalysisHandler * @see EventHandler * @see StepHandler * */ class EventManipulator: public Interfaced { public: /** * Manipulate an event and the event handler. * @param eh the EventHandler in charge of the generation. * @param event the Event to be manipulated. * @return zero if the event was not manipulated. Otherwise return * an integer which will be given to the * AnalysisHandlers of the current FullEventGenerator. */ virtual int manipulate(tEHPtr eh, tEventPtr event) = 0; public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initEventManipulator; /** * Private and non-existent assignment operator. */ EventManipulator & operator=(const EventManipulator &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of EventManipulator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of EventManipulator. */ typedef Interfaced NthBase; }; /** * This template specialization informs ThePEG about the name of the * DecayHandler class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::EventManipulator"; } }; /** @endcond */ } #endif /* ThePEG_EventManipulator_H */ thepeg-1.8.0.orig/Handlers/StdXCombGroup.fh0000644000175000017500000000044711747772425016733 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the StdXCombGroup class. // #ifndef ThePEG_StdXCombGroup_FH #define ThePEG_StdXCombGroup_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class StdXCombGroup; ThePEG_DECLARE_POINTERS(StdXCombGroup,StdXCombGroupPtr); } #endif thepeg-1.8.0.orig/Handlers/HandlerBase.h0000644000175000017500000001237111747772425016234 0ustar sunsun// -*- C++ -*- // // HandlerBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HandlerBase_H #define ThePEG_HandlerBase_H // This is the declaration of the HandlerBase class. #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Repository/UseRandom.fh" #include "ThePEG/Repository/EventGenerator.h" #include namespace ThePEG { template /** * HandlerBaseT is a dummy abstract templated class used as base class * to HandlerBase. HandlerBaseT inherits from the Interfaced class * adding some functionality such as easy acces to the RandomGenerator * and the StandardModel object of the controlling EventGenerator * object. The HandlerBaseT should only be used by the HandlerBase as * a base class. The fact that it is templated allows classes which in * turn inherits from HandlerBase to not explicitly depend on * EventGenerator class if the inlined accessor funtions are not * actually used. The only class which actually works as a template * argument is UseRandom, which is used to generate random numbers. * * @see Interfaced * @see RandomGenerator * @see StandardModel * @see EventGenerator * */ class HandlerBaseT: public Interfaced { public: /** HandlerBase is a friend. */ friend class HandlerBase; private: /** @name Standard constructors and destructors are private and can * only be used from the HandlerBase class. */ //@{ /** * Default constructor. */ HandlerBaseT() {} public: /** * Destructor. */ virtual ~HandlerBaseT() {} //@} public: /** * Return a simple flat random number in the range ]0,1[. */ double rnd() const { return T::rnd(); } /** * Return a simple flat random number in the range ]0,\a xu[. */ double rnd(double xu) const { return T::rnd(xu); } /** * Return a simple flat random number in the range ]\a xl,\a xu[. */ double rnd(double xl, double xu) const { return T::rnd(xl, xu); } /** * Return true with 50% probability. */ bool rndbool() const { return T::rndbool(); } /** * Return a true with probability \a p. */ bool rndbool(double p) const { return T::rndbool(p); } /** * Return a true with probability \a p1/(\a p1+\a p2). */ bool rndbool(double p1, double p2) const { return T::rndbool(p1, p2); } /** * Return -1, 0, or 1 with relative probabilities \a p1, \a p2, \a p3. */ int rndsign(double p1, double p2, double p3) const { return T::rndsign(p1, p2, p3); } /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a p1). */ int rnd2(double p0, double p1) const { return T::rnd2(p0, p1); } /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a * p1+\a p2). */ int rnd3(double p0, double p1, double p2) const { return T::rnd3(p0, p1, p2); } /** * Return an integer/ \f$i\f$ with probability p\f$i\f$(\a p0+\a * p1+\a p2+\a p3). */ int rnd4(double p0, double p1, double p2, double p3) const { return T::rnd4(p0, p1, p2, p3); } /** * Return a simple flat random integrer number in the range [0,\a xu[. */ long irnd(long xu = 2) const { return T::irnd(xu); } /** * Return a simple flat random integrer number in the range [\a xl,\a xu[. */ long irnd(long xl, long xu) const { return T::irnd(xl, xu); } /** * Return a reference to the object containing the standard model * parameters for this run. */ const StandardModelBase & SM() const { return *standardModel(); } /** * Return a pointer to the object containing the standard model * parameters for this run. */ tSMPtr standardModel() const { return generator()->standardModel(); } }; /** * HandlerBase is an abstract base class derived from the Interfaced * class via the HandlerBaseT class adding some functionality such as * easy acces to the RandomGenerator and the StandardModel object of * the controlling EventGenerator object. * * @see Interfaced * @see RandomGenerator * @see StandardModel * @see EventGenerator * */ class HandlerBase: public HandlerBaseT { public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initHandlerBase; /** * Private and non-existent assignment operator. */ HandlerBase & operator=(const HandlerBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of HandlerBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of HandlerBase. Note that HandlerBaseT * is not treated as a base class in this respect. */ typedef Interfaced NthBase; }; /** * This template specialization informs ThePEG about the name of the * HandlerBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::HandlerBase"; } }; /** @endcond */ } #endif /* ThePEG_HandlerBase_H */ thepeg-1.8.0.orig/Handlers/StdDependentXComb.cc0000644000175000017500000001111211747772425017524 0ustar sunsun// -*- C++ -*- // // StdDependentXComb.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StdDependentXComb class. // #include "StdDependentXComb.h" #include "StdXCombGroup.h" #include "ThePEG/MatrixElement/MEGroup.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; StdDependentXComb::StdDependentXComb(tStdXCombPtr newHead, const PBPair & newPartonBins, tMEPtr newME, const DiagramVector & newDiagrams) : StandardXComb(newHead->maxEnergy(),newHead->particles(), newHead->eventHandlerPtr(), const_ptr_cast(newHead->subProcessHandler()), newHead->pExtractor(),newHead->CKKWHandler(), newPartonBins,newHead->cuts(),newME,newDiagrams,newHead->mirror(), newHead), resetIncoming(true) {} StdDependentXComb::StdDependentXComb() : StandardXComb(), resetIncoming(true) {} StdDependentXComb::~StdDependentXComb() { } tSubProPtr StdDependentXComb::construct() { // first get the meMomenta in their CMS, as this may // not be the case Boost cm = (meMomenta()[0] + meMomenta()[1]).findBoostToCM(); if ( cm.mag2() > Constants::epsilon ) { for ( vector::iterator m = meMomenta().begin(); m != meMomenta().end(); ++m ) { *m = m->boost(cm); } } tSubProPtr sub = StandardXComb::construct(); sub->head(head()->subProcess()); sub->groupWeight(lastCrossSection()/head()->lastCrossSection()); return sub; } void StdDependentXComb::setProcess() { meMomenta().resize(mePartonData().size()); } void StdDependentXComb::setPartonBinInstances(Energy2 scale) { PBIPair newBins; Direction<0> dir(true); newBins.first = new_ptr(PartonBinInstance(lastPartons().first,partonBins().first,scale)); dir.reverse(); newBins.second = new_ptr(PartonBinInstance(lastPartons().second,partonBins().second,scale)); resetPartonBinInstances(newBins); setPartonBinInfo(); lastPartons().first->scale(partonBinInstances().first->scale()); lastPartons().second->scale(partonBinInstances().second->scale()); } void StdDependentXComb::setIncomingPartons() { if ( !resetIncoming ) return; resetIncoming = false; clean(); createPartonBinInstances(); setPartonBinInfo(); lastParticles(head()->lastParticles()); lastPartons(make_pair(mePartonData()[0]->produceParticle(Lorentz5Momentum()), mePartonData()[1]->produceParticle(Lorentz5Momentum()))); Lorentz5Momentum pFirst = meMomenta()[0]; Lorentz5Momentum pSecond = meMomenta()[1]; if ( head()->matrixElement()->wantCMS() ) { Boost toLab = (head()->lastPartons().first->momentum() + head()->lastPartons().second->momentum()).boostVector(); if ( toLab.mag2() > Constants::epsilon ) { pFirst.boost(toLab); pSecond.boost(toLab); } } lastPartons().first->set5Momentum(pFirst); lastPartons().second->set5Momentum(pSecond); lastS((lastParticles().first->momentum() + lastParticles().second->momentum()).m2()); lastSHat((lastPartons().first->momentum() + lastPartons().second->momentum()).m2()); lastP1P2(make_pair(0.0, 0.0)); double x1 = lastPartons().first->momentum().plus()/ lastParticles().first->momentum().plus(); double x2 = lastPartons().second->momentum().minus()/ lastParticles().second->momentum().minus(); lastX1X2(make_pair(x1,x2)); lastY(log(lastX1()/lastX2())*0.5); } CrossSection StdDependentXComb::dSigDR() { setProcess(); setIncomingPartons(); lastScale(head()->lastScale()); lastAlphaS(head()->lastAlphaS()); lastAlphaEM(head()->lastAlphaEM()); if ( (!willPassCuts() && !matrixElement()->headCuts() && !matrixElement()->ignoreCuts()) || !matrixElement()->apply() ) { subProcess(SubProPtr()); lastCrossSection(ZERO); return ZERO; } lastPDFWeight(head()->lastPDFWeight()); CrossSection xsec = matrixElement()->dSigHatDR() * lastPDFWeight(); subProcess(SubProPtr()); lastCrossSection(xsec); return xsec; } void StdDependentXComb::Init() {} void StdDependentXComb::persistentOutput(PersistentOStream &) const { } void StdDependentXComb::persistentInput(PersistentIStream &, int) { } ClassDescription StdDependentXComb::initStdDependentXComb; thepeg-1.8.0.orig/Handlers/CascadeHandler.cc0000644000175000017500000000327711747772425017050 0ustar sunsun// -*- C++ -*- // // CascadeHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CascadeHandler class. // #include "CascadeHandler.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; CascadeHandler::~CascadeHandler() {} void CascadeHandler:: handle(EventHandler & eh, const tPVector & tagged, const Hint & hint) { static tPVector notags; theLastXComb = eh.lastXCombPtr(); theHint = &hint; // if ( hint.tagged() ) theTagged = &tagged; // else // theTagged = ¬ags; // if ( !lastXComb().empty() ) thePDFs = make_pair(pdf(lastPartons().first), pdf(lastPartons().second)); cascade(); } void CascadeHandler::resetPDFs(const pair & pdfpair) { thePDFs.first = PDF(pdfpair.first, thePDFs.first.particle()); thePDFs.second = PDF(pdfpair.second, thePDFs.second.particle()); } double CascadeHandler::reweightCKKW(int, int) { return 1.0; } void CascadeHandler::setXComb(tXCombPtr xc) { theLastXComb = xc; } AbstractNoPIOClassDescription CascadeHandler::initCascadeHandler; void CascadeHandler::Init() { static ClassDocumentation documentation ("This is the base class to be used by all models of partonic cascades."); } thepeg-1.8.0.orig/Handlers/SimpleFlavour.h0000644000175000017500000002702711747772425016660 0ustar sunsun// -*- C++ -*- // // SimpleFlavour.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SimpleFlavour_H #define THEPEG_SimpleFlavour_H // This is the declaration of the SimpleFlavour class. #include "ThePEG/Handlers/FlavourGenerator.h" #include "ThePEG/Utilities/VSelector.h" // #include "SimpleFlavour.fh" // #include "SimpleFlavour.xh" namespace ThePEG { /** * SimpleFlavour is a simple class to generate hadrons given the quark * flavours. It implements a simplified version of the model of the * old fortran version of Pythia. * * @see \ref SimpleFlavourInterfaces "The interfaces" * defined for SimpleFlavour. */ class SimpleFlavour: public FlavourGenerator { public: /** A map of Selectors. */ typedef map > > ProbabilityMap; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ SimpleFlavour(); /** * Destructor. */ virtual ~SimpleFlavour(); //@} public: /** @name Virtual functions mandated by the FlavourGenerator base class. */ //@{ /** * Generate a hadron from a quark. Given a quark(antiquark, diquark * or antidiquark), choose a quark-antiquark (or * antidiquark-diquark) pair. Return (first) a hadron formed by the * original quark and the antiquark together with (second) the * generated quark. Returns null pointers if the generation failed. * @param quark a quark, antiquark, diquark or antidiquark. * @return a pair of ParticleData pointers. The \a first is the * hadron produced and the \a second is the anti-partner of the * (anti-)(di-)quark generated to form the hadron. */ virtual tcPDPair generateHadron(tcPDPtr quark) const; /** * Get hadron from flavours. Return a hadron with the flavour * content given by the (anti-)(di-)quarks in the argument. The * arguments are given as PDG codes. * @param iq1 the PDG code of the first flavour. * @param iq2 the PDG code of the second flavour. * @return the corresponding hadron type or null if none could be * generated. */ virtual tcPDPtr getHadron(long iq1, long iq2) const; using FlavourGenerator::getHadron; /** * Return a baryon with the flavour content given by the * (anti)quarks in the argument. The arguments are given as * particle data pointers. * @param q1 the PDG code of the first flavour. * @param q2 the PDG code of the second flavour. * @param q3 the PDG code of the third flavour. * @return the corresponding baryon type or null if none could be * generated. */ virtual tcPDPtr getBaryon(long q1, long q2, long q3) const; using FlavourGenerator::getBaryon; /** * Generate a random quark flavour. */ virtual long selectQuark() const; /** * Generate a random (di)quark flavour. */ virtual long selectFlavour() const; //@} public: /** @name Access the parameters controlling the generation. */ //@{ /** * Return the suppression factor of strange quarks w.r.t. u and d. */ double sSup() const { return theSSup; } /** * Return the suppression factor for di-quarks w.r.t. quarks */ double diSup() const { return theDiSup; } /** * Return the suppression of spin-1 di-quarks w.r.t. spin-0 ones; */ double di1Sup() const { return theDi1Sup; } /** * Return the suppression of strange di-quarks w.r.t. u and d ones * in addition to the standard strangness suppression of quarks. */ double diSSup() const { return theDiSSup; } /** * Return the extra suppression of eta's */ double etaSup() const { return theEtaSup; } /** * Return the extra suppression of ets-prime's */ double etaPSup() const { return theEtaPSup; } /** * Return the extra suppression for baryons of the spin 3/2 * decuplet. */ double baryon10Sup() const { return theBaryon10Sup; } /** * Return the probability that light (u/d) mesons has spin 1; */ double pSpin1() const { return thePSpin1; } /** * Return the probability that strange mesons has spin 1; */ double pSpinS1() const { return thePSpinS1; } /** * Return the probability that charmed and heavier mesons has spin * 1; */ double pSpinC1() const { return thePSpinC1; } //@} protected: /** * Calculate the probabilities for generateHadron for the given * flavour. */ virtual void setProbabilities(long iq) const; /** * Return the probability that the given quark flavours end up in a * vector meson rather than in a pseudo scalar meson. */ virtual double vectorMesonProbability(long iq1, long iq2) const; /** * Return the probability that the given quark and diquark flavours * end up in a spin 3/2 decuplet baryon rather than in a spin 1/2 * octet baryon. */ virtual double baryonDecupletProbability(long iq1, long iq2) const; /** * Return a pseudo scalar meson formed by the two quark flavours. */ virtual tcPDPtr pseudoScalarMeson(long iq, long iqbar) const; /** * Return a vector meson formed by the two quark flavours. */ virtual tcPDPtr vectorMeson(long iq, long iqbar) const; /** * Return a spin 1/2 octet baryon formed by the given quark and * diquark flavours. */ virtual tcPDPtr baryonOctet(long iq, long idq) const; /** * Return a spin 3/2 decuplet baryon formed by the given quark and * diquark flavours. */ virtual tcPDPtr baryonDecuplet(long iq, long idq) const; /** * Return the PDG code of a pseudo scalar meson formed by the two * quark flavours for \a iqh >= \a iql > 0. */ virtual long pseudoScalarId(long iqh, long iql) const; /** * Return the PDG code of a vector meson formed by the two quark * flavours for \a iqh >= \a iql > 0. */ virtual long vectorId(long iqh, long iql) const; /** * Return the PDG code for a spin 1/2 octet baryon formed by the * given quark flavours (\a iqa >= \a iqb >= \a iqc > 0). iq is one * of the flavours and the other two are assumed to be in a diquark * (in a spin-1 state if \a dqs1). */ virtual long baryonOctetId(long iqa, long iqb, long iqc, long iq, bool dqs1) const; /** * Return the PDG code for a spin 3/2 decuplet baryon formed by the * given quark flavours (\a iqa >= \a iqb >= \a iqc > 0). */ virtual long baryonDecupletId(long iqa, long iqb, long iqc) const; /** * Return the PDG code of pseudo scalar mesons formed by the two * quark flavours (for \a iqh >= \a iql > 0), together with suitable * weights. */ virtual vector< pair > pseudoScalarIds(long iqh, long iql) const; /** * Return the PDG codes of vector mesons formed by the two quark * flavours (for \a iqh >= \a iql > 0), together with * suitable weights. */ virtual vector< pair > vectorIds(long iqh, long iql) const; /** * Return the PDG codes for spin 1/2 octet baryons formed by the * given quark flavours (\a iqa >= \a iqb >= \a iqc > 0) together * with suitable weights. iq is one of the flavours and the other * two are assumed to be in a diquark (in a spin-1 state if \a dqs1). */ virtual vector< pair > baryonOctetIds(long iqa, long iqb, long iqc, long iq, bool dqs1) const; /** * Return the PDG codes for spin 3/2 decuplet baryons formed by * the given quark flavours (\a iqa >= \a iqb >= \a iqc > 0) together with * suitable weights. */ virtual vector< pair > baryonDecupletIds(long iqa, long iqb, long iqc) const; /** * Clear all cashed weights. */ void clear(); /** * Return the SU(6) weight for the given quark and di-quark flavours * to end up with in a baryon with the given spin (2S+1). */ static double weightSU6QDiQSpin(long iq, long idq, int spin); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * Suppression factor of strange quarks w.r.t. u and d. */ double theSSup; /** * Suppression factor for di-quarks w.r.t. quarks. */ double theDiSup; /** * Suppression of spin-1 di-quarks w.r.t. spin-0 ones. */ double theDi1Sup; /** * Suppression of strange di-quarks w.r.t. u and d ones in addition * to the standard strangness suppression of quarks. */ double theDiSSup; /** * Extra suppression of eta's. */ double theEtaSup; /** * Extra suppression of ets-prime's. */ double theEtaPSup; /** * Extra suppression for baryons of the spin 3/2 decuplet. */ double theBaryon10Sup; /** * Probability that light (u/d) mesons has spin 1. */ double thePSpin1; /** * Probability that strange mesons has spin 1. */ double thePSpinS1; /** * Probability that charmed and heavier mesons has spin 1. */ double thePSpinC1; /** * A selector used to weight the creation of (di)quark-anti(di)quark * pairs. */ mutable VSelector theFlavourSelector; /** * A map of selectors to cash probabilities for generateHadron. */ mutable ProbabilityMap theProbabilities; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initSimpleFlavour; /** * Private and non-existent assignment operator. */ SimpleFlavour & operator=(const SimpleFlavour &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * SimpleFlavour. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of SimpleFlavour. */ typedef FlavourGenerator NthBase; }; template <> /** * This template specialization informs ThePEG about the name of the * SimpleFlavour class and the shared object where it is defined. */ struct ClassTraits : public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::SimpleFlavour"; } /** * Return the name of the shared library to be loaded to get access * to the SimpleFlavour class and every other class it uses (except * the base class). */ static string library() { return "SimpleFlavour.so"; } }; /** @endcond */ } #endif /* THEPEG_SimpleFlavour_H */ thepeg-1.8.0.orig/Handlers/Makefile.in0000644000175000017500000007217311756366734015770 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Handlers ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) ACDCSampler_la_LIBADD = am_ACDCSampler_la_OBJECTS = ACDCSampler.lo ACDCSampler_la_OBJECTS = $(am_ACDCSampler_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent ACDCSampler_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ACDCSampler_la_LDFLAGS) \ $(LDFLAGS) -o $@ FixedCMSLuminosity_la_LIBADD = am_FixedCMSLuminosity_la_OBJECTS = FixedCMSLuminosity.lo FixedCMSLuminosity_la_OBJECTS = $(am_FixedCMSLuminosity_la_OBJECTS) FixedCMSLuminosity_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(FixedCMSLuminosity_la_LDFLAGS) \ $(LDFLAGS) -o $@ GaussianPtGenerator_la_LIBADD = am_GaussianPtGenerator_la_OBJECTS = GaussianPtGenerator.lo GaussianPtGenerator_la_OBJECTS = $(am_GaussianPtGenerator_la_OBJECTS) GaussianPtGenerator_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(GaussianPtGenerator_la_LDFLAGS) \ $(LDFLAGS) -o $@ SimpleFlavour_la_LIBADD = am_SimpleFlavour_la_OBJECTS = SimpleFlavour.lo SimpleFlavour_la_OBJECTS = $(am_SimpleFlavour_la_OBJECTS) SimpleFlavour_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(SimpleFlavour_la_LDFLAGS) \ $(LDFLAGS) -o $@ SimpleZGenerator_la_LIBADD = am_SimpleZGenerator_la_OBJECTS = SimpleZGenerator.lo SimpleZGenerator_la_OBJECTS = $(am_SimpleZGenerator_la_OBJECTS) SimpleZGenerator_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(SimpleZGenerator_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGHandlers_la_LIBADD = am__objects_1 = EventHandler.lo SubProcessHandler.lo HandlerGroup.lo \ Hint.lo XComb.lo AnalysisHandler.lo CascadeHandler.lo \ MultipleInteractionHandler.lo DecayHandler.lo \ EventManipulator.lo StepHandler.lo HadronizationHandler.lo \ HandlerBase.lo FlavourGenerator.lo LuminosityFunction.lo \ StandardEventHandler.lo SamplerBase.lo ClusterCollapser.lo \ PtGenerator.lo ZGenerator.lo StandardXComb.lo \ StdDependentXComb.lo StdXCombGroup.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGHandlers_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGHandlers_la_OBJECTS = $(am_libThePEGHandlers_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(ACDCSampler_la_SOURCES) $(FixedCMSLuminosity_la_SOURCES) \ $(GaussianPtGenerator_la_SOURCES) $(SimpleFlavour_la_SOURCES) \ $(SimpleZGenerator_la_SOURCES) $(libThePEGHandlers_la_SOURCES) DIST_SOURCES = $(ACDCSampler_la_SOURCES) \ $(FixedCMSLuminosity_la_SOURCES) \ $(GaussianPtGenerator_la_SOURCES) $(SimpleFlavour_la_SOURCES) \ $(SimpleZGenerator_la_SOURCES) $(libThePEGHandlers_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = EventHandler.cc SubProcessHandler.cc \ HandlerGroup.cc Hint.cc XComb.cc AnalysisHandler.cc \ CascadeHandler.cc MultipleInteractionHandler.cc DecayHandler.cc \ EventManipulator.cc StepHandler.cc HadronizationHandler.cc \ HandlerBase.cc \ FlavourGenerator.cc LuminosityFunction.cc \ StandardEventHandler.cc \ SamplerBase.cc ClusterCollapser.cc \ PtGenerator.cc ZGenerator.cc \ StandardXComb.cc StdDependentXComb.cc StdXCombGroup.cc DOCFILES = AnalysisHandler.h CascadeHandler.h \ DecayHandler.h EventHandler.h EventManipulator.h \ FlavourGenerator.h HadronizationHandler.h \ HandlerBase.h HandlerGroup.h Hint.h \ LuminosityFunction.h \ MultipleInteractionHandler.h StandardEventHandler.h \ StepHandler.h SubProcessHandler.h XComb.h LastXCombInfo.h \ SamplerBase.h ClusterCollapser.h \ PtGenerator.h ZGenerator.h StandardXComb.h StdDependentXComb.h \ StdXCombGroup.h INCLUDEFILES = $(DOCFILES) HandlerGroup.tcc \ StandardEventHandler.fh \ SubProcessHandler.fh EventHandler.fh SamplerBase.fh \ ClusterCollapser.fh StandardXComb.fh StdDependentXComb.fh \ StdXCombGroup.fh AnalysisHandler.fh noinst_LTLIBRARIES = libThePEGHandlers.la pkglib_LTLIBRARIES = FixedCMSLuminosity.la \ ACDCSampler.la SimpleFlavour.la GaussianPtGenerator.la \ SimpleZGenerator.la libThePEGHandlers_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed FixedCMSLuminosity_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) FixedCMSLuminosity_la_SOURCES = FixedCMSLuminosity.cc FixedCMSLuminosity.h # Version info should be updated if any interface or persistent I/O # function is changed ACDCSampler_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ACDCSampler_la_SOURCES = ACDCSampler.cc ACDCSampler.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleFlavour_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleFlavour_la_SOURCES = SimpleFlavour.cc SimpleFlavour.h # Version info should be updated if any interface or persistent I/O # function is changed GaussianPtGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GaussianPtGenerator_la_SOURCES = GaussianPtGenerator.cc GaussianPtGenerator.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleZGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleZGenerator_la_SOURCES = SimpleZGenerator.cc SimpleZGenerator.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Handlers/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Handlers/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } ACDCSampler.la: $(ACDCSampler_la_OBJECTS) $(ACDCSampler_la_DEPENDENCIES) $(EXTRA_ACDCSampler_la_DEPENDENCIES) $(AM_V_CXXLD)$(ACDCSampler_la_LINK) -rpath $(pkglibdir) $(ACDCSampler_la_OBJECTS) $(ACDCSampler_la_LIBADD) $(LIBS) FixedCMSLuminosity.la: $(FixedCMSLuminosity_la_OBJECTS) $(FixedCMSLuminosity_la_DEPENDENCIES) $(EXTRA_FixedCMSLuminosity_la_DEPENDENCIES) $(AM_V_CXXLD)$(FixedCMSLuminosity_la_LINK) -rpath $(pkglibdir) $(FixedCMSLuminosity_la_OBJECTS) $(FixedCMSLuminosity_la_LIBADD) $(LIBS) GaussianPtGenerator.la: $(GaussianPtGenerator_la_OBJECTS) $(GaussianPtGenerator_la_DEPENDENCIES) $(EXTRA_GaussianPtGenerator_la_DEPENDENCIES) $(AM_V_CXXLD)$(GaussianPtGenerator_la_LINK) -rpath $(pkglibdir) $(GaussianPtGenerator_la_OBJECTS) $(GaussianPtGenerator_la_LIBADD) $(LIBS) SimpleFlavour.la: $(SimpleFlavour_la_OBJECTS) $(SimpleFlavour_la_DEPENDENCIES) $(EXTRA_SimpleFlavour_la_DEPENDENCIES) $(AM_V_CXXLD)$(SimpleFlavour_la_LINK) -rpath $(pkglibdir) $(SimpleFlavour_la_OBJECTS) $(SimpleFlavour_la_LIBADD) $(LIBS) SimpleZGenerator.la: $(SimpleZGenerator_la_OBJECTS) $(SimpleZGenerator_la_DEPENDENCIES) $(EXTRA_SimpleZGenerator_la_DEPENDENCIES) $(AM_V_CXXLD)$(SimpleZGenerator_la_LINK) -rpath $(pkglibdir) $(SimpleZGenerator_la_OBJECTS) $(SimpleZGenerator_la_LIBADD) $(LIBS) libThePEGHandlers.la: $(libThePEGHandlers_la_OBJECTS) $(libThePEGHandlers_la_DEPENDENCIES) $(EXTRA_libThePEGHandlers_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGHandlers_la_OBJECTS) $(libThePEGHandlers_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ACDCSampler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AnalysisHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CascadeHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ClusterCollapser.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DecayHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EventHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/EventManipulator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FixedCMSLuminosity.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FlavourGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GaussianPtGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HadronizationHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HandlerBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HandlerGroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Hint.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LuminosityFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultipleInteractionHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PtGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SamplerBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleFlavour.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleZGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardEventHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardXComb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdDependentXComb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StdXCombGroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StepHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SubProcessHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/XComb.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ZGenerator.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Handlers/PtGenerator.cc0000644000175000017500000000202511747772425016447 0ustar sunsun// -*- C++ -*- // // PtGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // //$Id: PtGenerator.cc 2274 2011-02-08 13:29:29Z dgrell $ // -------------------------------------------------------- // // This is the implementation of the non-inlined, non-templated member // functions of the PtGenerator class. // #include "PtGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; // *** Standard Interfaced functions *** AbstractClassDescription PtGenerator::initPtGenerator; void PtGenerator::Init() { static ClassDocumentation documentation ("This base class should be used by models describing intrinsic " "transverse momenta distributions in hadrons."); } thepeg-1.8.0.orig/Handlers/SimpleZGenerator.cc0000644000175000017500000000351711747772425017456 0ustar sunsun// -*- C++ -*- // // SimpleZGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleZGenerator class. // #include "SimpleZGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; SimpleZGenerator::~SimpleZGenerator() {} IBPtr SimpleZGenerator::clone() const { return new_ptr(*this); } IBPtr SimpleZGenerator::fullclone() const { return new_ptr(*this); } double SimpleZGenerator::generate(cPDPtr q1, cPDPtr q2, Energy2) const { if ( BaryonMatcher::Check(*q1) || DiquarkMatcher::Check(*q1) ) { if ( BaryonMatcher::Check(*q2) || DiquarkMatcher::Check(*q2) ) return rnd(); else return sqrt(rnd()); } else { if ( BaryonMatcher::Check(*q2) || DiquarkMatcher::Check(*q2) ) return 1.0 - sqrt(rnd()); else return rnd(); } } void SimpleZGenerator::persistentOutput(PersistentOStream &) const {} void SimpleZGenerator::persistentInput(PersistentIStream &, int) {} ClassDescription SimpleZGenerator::initSimpleZGenerator; // Definition of the static class description member. void SimpleZGenerator::Init() { static ClassDocumentation documentation ("Implements a naive unphysical model to generate the momentum fraction " "\\f$z\\f$ taken by hadrons produced in a hadronization scenario. It " "should only be used for testing purposes."); } thepeg-1.8.0.orig/Handlers/LuminosityFunction.h0000644000175000017500000001440511747772425017746 0ustar sunsun// -*- C++ -*- // // LuminosityFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LuminosityFunction_H #define ThePEG_LuminosityFunction_H // This is the declaration of the LuminosityFunction class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/Vectors/LorentzRotation.fh" #include "ThePEG/Utilities/Interval.h" namespace ThePEG { /** * The LuminosityFunction describes the momentum distribution of the * incoming beams in an experiment. This is used by a EventHandler to * generate collisions in their CM system. The LuminosityFunction will * be asked to produce a LorentzRotation giving the transformation to * the laboratory system. * * The LuminosityFunction inherits from the LastXCombInfo class to * give easy access to the information of the generated primary * sub-process in the selected XComb. * * This base class implements simple fixed momentum beams with * energies given by the BeamEMaxA and BeamEMaxB interfaces. * * @see \ref LuminosityFunctionInterfaces "The interfaces" * defined for LuminosityFunction. * @see XComb * */ class LuminosityFunction: public HandlerBase, public LastXCombInfo<> { /** EventHandler is a friend. */ friend class EventHandler; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. Optionally the maximum energy of beam \a a * and \a b can be given. */ LuminosityFunction(Energy a = 45.6*GeV, Energy b = 45.6*GeV); //@} /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this luminosity function can actually handle a * given pair of incoming particles. */ virtual bool canHandle(const cPDPair &) const; /** * Return the maximum possible center of mass energy for an event. */ virtual Energy maximumCMEnergy() const; /** * Return the rotation needed to transform from the collision cm * system to the labotatory system. This default version returns the * unit transformation. */ virtual LorentzRotation getBoost() const; /** * Return the rapidity of the colliding particles (at the maximum * energy) in the laboratory system. This default version assumes * the CM system is the same as the lab system and returns zero. */ virtual double Y() const; /** * How many random numbers are needed to generate a phase space * point? Default is zero in which means the energy of the incoming * particles is fixed. The only other reasonable values are 1 and 2. */ virtual int nDim(const cPDPair &) const; /** * The value of the luminosity function for the given particle types * for the given energy fractions l1 and l2 (\f$l=\log(1/x)\f$). The * default version returns 1 if l1 and l2 are zero otherwize zero. */ virtual double value(const cPDPair &, double l1, double l2) const; /** * Generate energy fractions l1 and l2 (\f$l=\log(1/x)\f$) given * 'nDim()' random numbers in the range ]0,1[ given by the * iterators. The jacobian argument must be multiplied by the * jacobian of the variable transformation to l1 and l2. The default * version is just a delta function with a jacobian of 1. */ virtual pair generateLL(const double * r, double & jacobian) const; //@} public: /** @name Simple access functions */ //@{ /** * The maximum energy of the beam entering along the positive z-axis. */ Energy beamEMaxA() const { return theBeamEMaxA; } /** * The maximum energy of the beam entering along the negative z-axis. */ Energy beamEMaxB() const { return theBeamEMaxB; } //@} protected: /** * The maximum energy of the beam entering along the positive z-axis. */ void beamEMaxA(Energy x) { theBeamEMaxA = x; } /** * The maximum energy of the beam entering along the negative z-axis. */ void beamEMaxB(Energy x) { theBeamEMaxB = x; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); /** * Set information about the selected XComb. */ void select(tXCombPtr); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The maximum energy of the beam entering along the positive z-axis. */ Energy theBeamEMaxA; /** * The maximum energy of the beam entering along the negative z-axis. */ Energy theBeamEMaxB; private: /** * Describe an abstract class with persistent data. */ static ClassDescription initLuminosityFunction; /** * Private and non-existent assignment operator. */ LuminosityFunction & operator=(const LuminosityFunction &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of LuminosityFunction. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of LuminosityFunction. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * LuminosityFunction class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::LuminosityFunction"; } }; /** @endcond */ } #endif /* ThePEG_LuminosityFunction_H */ thepeg-1.8.0.orig/Handlers/SamplerBase.cc0000644000175000017500000000275111747772425016421 0ustar sunsun// -*- C++ -*- // // SamplerBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SamplerBase class. // #include "SamplerBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Handlers/StandardEventHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; SamplerBase::~SamplerBase() {} void SamplerBase::persistentOutput(PersistentOStream & os) const { os << theEventHandler << theLastPoint; // Add all member variable which should be written persistently here. } void SamplerBase::persistentInput(PersistentIStream & is, int) { is >> theEventHandler >> theLastPoint; // Add all member variable which should be read persistently here. } AbstractClassDescription SamplerBase::initSamplerBase; // Definition of the static class description member. void SamplerBase::Init() { static ClassDocumentation documentation ("This is the base class for all phase space sampler classes to be" "used by the ThePEG::StandardEventHandler class to sample the phase" "space according to the cross sections for the proceses in the" "ThePEG::StandardEventHandler."); } thepeg-1.8.0.orig/Handlers/StandardEventHandler.fh0000644000175000017500000000054411747772425020271 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_StandardEventHandler_FH #define ThePEG_StandardEventHandler_FH // // This is the forward declaration of the EventHandler class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class StandardEventHandler; ThePEG_DECLARE_CLASS_POINTERS(StandardEventHandler,StdEHPtr); } #endif /* ThePEG_StandardEventHandler_FH */ thepeg-1.8.0.orig/Handlers/Makefile.am0000644000175000017500000000537611747772425015756 0ustar sunsunmySOURCES = EventHandler.cc SubProcessHandler.cc \ HandlerGroup.cc Hint.cc XComb.cc AnalysisHandler.cc \ CascadeHandler.cc MultipleInteractionHandler.cc DecayHandler.cc \ EventManipulator.cc StepHandler.cc HadronizationHandler.cc \ HandlerBase.cc \ FlavourGenerator.cc LuminosityFunction.cc \ StandardEventHandler.cc \ SamplerBase.cc ClusterCollapser.cc \ PtGenerator.cc ZGenerator.cc \ StandardXComb.cc StdDependentXComb.cc StdXCombGroup.cc DOCFILES = AnalysisHandler.h CascadeHandler.h \ DecayHandler.h EventHandler.h EventManipulator.h \ FlavourGenerator.h HadronizationHandler.h \ HandlerBase.h HandlerGroup.h Hint.h \ LuminosityFunction.h \ MultipleInteractionHandler.h StandardEventHandler.h \ StepHandler.h SubProcessHandler.h XComb.h LastXCombInfo.h \ SamplerBase.h ClusterCollapser.h \ PtGenerator.h ZGenerator.h StandardXComb.h StdDependentXComb.h \ StdXCombGroup.h INCLUDEFILES = $(DOCFILES) HandlerGroup.tcc \ StandardEventHandler.fh \ SubProcessHandler.fh EventHandler.fh SamplerBase.fh \ ClusterCollapser.fh StandardXComb.fh StdDependentXComb.fh \ StdXCombGroup.fh AnalysisHandler.fh noinst_LTLIBRARIES = libThePEGHandlers.la pkglib_LTLIBRARIES = FixedCMSLuminosity.la \ ACDCSampler.la SimpleFlavour.la GaussianPtGenerator.la \ SimpleZGenerator.la libThePEGHandlers_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed FixedCMSLuminosity_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) FixedCMSLuminosity_la_SOURCES = FixedCMSLuminosity.cc FixedCMSLuminosity.h # Version info should be updated if any interface or persistent I/O # function is changed ACDCSampler_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ACDCSampler_la_SOURCES = ACDCSampler.cc ACDCSampler.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleFlavour_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleFlavour_la_SOURCES = SimpleFlavour.cc SimpleFlavour.h # Version info should be updated if any interface or persistent I/O # function is changed GaussianPtGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GaussianPtGenerator_la_SOURCES = GaussianPtGenerator.cc GaussianPtGenerator.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleZGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleZGenerator_la_SOURCES = SimpleZGenerator.cc SimpleZGenerator.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Handlers/EventHandler.cc0000644000175000017500000004457711747772425016616 0ustar sunsun// -*- C++ -*- // // EventHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the EventHandler class. // #include "EventHandler.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Handlers/MultipleInteractionHandler.h" #include "ThePEG/Handlers/HadronizationHandler.h" #include "ThePEG/Handlers/DecayHandler.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Utilities/Rebinder.h" using namespace ThePEG; EventHandler::EventHandler(bool warnincomplete) : theMaxLoop(100000), theStatLevel(2), theConsistencyLevel(clCollision), theConsistencyEpsilon(sqrt(Constants::epsilon)), warnIncomplete(warnincomplete) { setupGroups(); } EventHandler:: EventHandler(const EventHandler & x) : HandlerBase(x), LastXCombInfo<>(x), theMaxLoop(x.theMaxLoop), theStatLevel(x.theStatLevel), theConsistencyLevel(x.theConsistencyLevel), theConsistencyEpsilon(x.theConsistencyEpsilon), theLumiFn(x.theLumiFn), theCuts(x.theCuts), thePartonExtractor(x.thePartonExtractor), theSubprocessGroup(x.theSubprocessGroup), theCascadeGroup(x.theCascadeGroup), theMultiGroup(x.theMultiGroup), theHadronizationGroup(x.theHadronizationGroup), theDecayGroup(x.theDecayGroup), warnIncomplete(x.warnIncomplete), theIncoming(x.theIncoming) { setupGroups(); } EventHandler::~EventHandler() {} IBPtr EventHandler::clone() const { return new_ptr(*this); } IBPtr EventHandler::fullclone() const { return new_ptr(*this); } void EventHandler::lumiFn(LumiFnPtr newLumiFn) { if ( newLumiFn->canHandle(incoming()) ) theLumiFn = newLumiFn; else throw LumiFuncError() << "Cannot use '" << newLumiFn->name() << "' as the luminosity function in the event handler '" << name() << "' since it cannot handle the requested incoming particles." << Exception::warning; } void EventHandler::setupGroups() { theGroups.clear(); theGroups.push_back(&theSubprocessGroup); theGroups.push_back(&theCascadeGroup); theGroups.push_back(&theMultiGroup); theGroups.push_back(&theHadronizationGroup); theGroups.push_back(&theDecayGroup); optGroups.clear(); optGroups.push_back(&optSubprocessGroup); optGroups.push_back(&optCascadeGroup); optGroups.push_back(&optMultiGroup); optGroups.push_back(&optHadronizationGroup); optGroups.push_back(&optDecayGroup); } void EventHandler::initGroups() { for ( unsigned int i = 0; i < groups().size(); ++i ) groups()[i]->init(*optGroups[i]); } tCascHdlPtr EventHandler::CKKWHandler() const { return dynamic_ptr_cast(theCascadeGroup.defaultHandler()); } EventPtr EventHandler::generateEvent() { throw EventHandlerIncompleteError() << "The function generateEvent() was called for the EventHandler '" << name() << "' which is not capable of generating complete events." << Exception::runerror; } tEventPtr EventHandler::generateEvent(tStepPtr s) { EventPtr e = new_ptr(Event(PPair(), tcEventBasePtr(), generator()->runName(), generator()->currentEventNumber())); e->newCollision()->addStep(s); return generateEvent(tEventPtr(e)); } tEventPtr EventHandler::generateEvent(tEventPtr e) { clearEvent(); e->setInfo(this, generator()->runName(), generator()->currentEventNumber(), 1.0); currentEvent(e); if ( e->collisions().empty() || !e->collisions().back()->finalStep()) { throw EventHandlerIncompleteError() << "The function generateEvent() was called with an empty Event " << "for the EventHandler '" << name() << "' which is not capable of generating complete events." << Exception::runerror; } currentCollision(e->collisions().back()); currentStep(currentCollision()->finalStep()); EventHandler::initGroups(); continueCollision(); return currentEvent(); } tCollPtr EventHandler::continueCollision() { generator()->currentEventHandler(this); while (1) { if ( consistencyLevel() == clStep || consistencyLevel() == clPrintStep ) checkConsistency(); bool done = true; for ( GroupVector::iterator git = groups().begin(); git != groups().end(); ++git ) { HandlerGroupBase & group = **git; HandlerGroupBase::StepWithHint sh; sh = group.next(); if ( !group.empty() ) { performStep(sh.first, sh.second); done = false; break; } } if ( done ) break; } if ( consistencyLevel() == clCollision || consistencyLevel() == clPrintCollision ) checkConsistency(); return currentCollision(); } void EventHandler::clearEvent() { for ( GroupVector::const_iterator git = groups().begin(); git != groups().end(); ++git ) (**git).clear(); } bool EventHandler::empty() const { for ( GroupVector::const_iterator git = groups().begin(); git != groups().end(); ++git ) if ( !(**git).empty() ) return false; return true; } void EventHandler::select(tXCombPtr newXComb) { theLastXComb = newXComb; lumiFn().select(newXComb); if ( CKKWHandler() ) CKKWHandler()->setXComb(newXComb); } void EventHandler:: performStep(tStepHdlPtr handler, tHintPtr hint) { if ( !lastXCombPtr() ) theLastXComb = new_ptr(XComb()); if ( hint->stop() ) throw Stop(); tStepPtr oldStep = currentStep(); currentStepHandler(handler); handler->eventHandler(this); try { generator()->currentStepHandler(handler); handler->handle(*this, hint->tagged(*oldStep), *hint); generator()->currentStepHandler(tStepHdlPtr()); } catch (...) { generator()->currentStepHandler(tStepHdlPtr()); if ( oldStep != currentStep() ) popStep(); throw; } while ( currentStep()->nullStep() ) popStep(); if ( ThePEG_DEBUG_ITEM(2) && oldStep != currentStep() ) generator()->logfile() << *currentStep(); } void EventHandler:: addStep(Group::Level level, Group::Handler group, tStepHdlPtr s, tHintPtr h) { if ( !h ) h = Hint::Default(); switch ( level ) { case Group::main: if ( s && !groups()[group]->setHandler(s, *optGroups[group]) ) throw EventHandlerStepError() << "Cannot add the StepHandler '" << s->name() << "' to the list of step handlers in the EventHandler '" << name() << "' because it is not of class '" << groups()[group]->handlerClass() << "'." << Exception::abortnow; groups()[group]->addHint(h, *optGroups[group]); break; case Group::before: groups()[group]->addPreHandler(s, h, *optGroups[group]); break; case Group::after: groups()[group]->addPostHandler(s, h, *optGroups[group]); break; } for ( long gr = group + 1; gr <= Group::decay; ++gr ) groups()[gr]->addHint(Hint::Default(), *optGroups[group]); } void EventHandler::throwCurrent() { clean(); } void EventHandler::clean() { currentEvent(EventPtr()); currentCollision(CollPtr()); currentStep(StepPtr()); } void EventHandler::statistics(ostream &) const {} void EventHandler::initialize() {} EventPtr EventHandler::continueEvent() { try { continueCollision(); } catch (Veto) { } catch (Stop) { } catch (Exception &) { throw; } return currentEvent(); } CrossSection EventHandler::histogramScale() const { generator()->logWarning( EventHandlerHistError() << "The event handler '" << name() << "' was not able give a cross " "section for scaling histograms. The resulting histograms will not " "yeald correct cross section." << Exception::warning); return 1.0*picobarn; } CrossSection EventHandler::integratedXSec() const { generator()->logWarning( EventHandlerHistError() << "The event handler '" << name() << "' was not able give the cross " "section for the generated processes." << Exception::warning); return 1.0*picobarn; } CrossSection EventHandler::integratedXSecErr() const { generator()->logWarning( EventHandlerHistError() << "The event handler '" << name() << "' was not able give the cross " "section error for the generated processes." << Exception::warning); return ZERO; } void EventHandler::checkConsistency() const { if ( !currentCollision() ) return; const Collision & c = *currentCollision(); if ( !c.incoming().first && !c.incoming().second ) return; if ( !c.finalStep() ) return; LorentzMomentum pi; if ( c.incoming().first ) pi = c.incoming().first->momentum(); if ( c.incoming().second ) pi += c.incoming().second->momentum(); int ci = 0; if ( c.incoming().first ) ci = c.incoming().first->data().iCharge(); if ( c.incoming().second ) ci += c.incoming().second->data().iCharge(); const ParticleSet & fs = c.finalStep()->particles(); LorentzMomentum pf; int cf = 0; for ( ParticleSet::const_iterator it = fs.begin(); it != fs.end(); ++it ) { pf += (**it).momentum(); cf += (**it).data().iCharge(); } if ( cf != ci ) Throw() << "Event handler '" << name() << "' found charge non-conservation by " << cf - ci << "/3 units after generating step number " << c.steps().size() << ". Dump of event follows: \n\n" << *currentEvent() << "\n" << Exception::warning; Energy eps = consistencyEpsilon()*pi.m()*sqrt(double(fs.size())); pf -= pi; if ( abs(pf.x()) > eps || abs(pf.y()) > eps || abs(pf.z()) > eps || abs(pf.e()) > eps ) Throw() << "Event handler '" << name() << "' found energy-momentum non-" << "conservation by (" << pf.x()/GeV << "," << pf.y()/GeV << "," << pf.z()/GeV << ";" << pf.e()/GeV << ") GeV after generating step number " << c.steps().size() << ". Dump of event follows: \n\n" << *currentEvent() << "\n" << Exception::warning; } void EventHandler::rebind(const TranslationMap & trans) { theIncoming.first = trans.translate(theIncoming.first); theIncoming.second = trans.translate(theIncoming.second); HandlerBase::rebind(trans); } IVector EventHandler::getReferences() { IVector ret = HandlerBase::getReferences(); ret.push_back(const_ptr_cast(theIncoming.first)); ret.push_back(const_ptr_cast(theIncoming.second)); return ret; } void EventHandler::persistentOutput(PersistentOStream & os) const { os << theLastXComb << theMaxLoop << theStatLevel << oenum(theConsistencyLevel) << theConsistencyEpsilon << theLumiFn << theCuts << thePartonExtractor << theSubprocessGroup << theCascadeGroup << theMultiGroup << theHadronizationGroup << theDecayGroup << theCurrentEvent << theCurrentCollision << theCurrentStep << theCurrentStepHandler << warnIncomplete << theIncoming; } void EventHandler::persistentInput(PersistentIStream & is, int) { is >> theLastXComb >> theMaxLoop >> theStatLevel >> ienum(theConsistencyLevel) >> theConsistencyEpsilon >> theLumiFn >> theCuts >> thePartonExtractor >> theSubprocessGroup >> theCascadeGroup >> theMultiGroup >> theHadronizationGroup >> theDecayGroup >> theCurrentEvent >> theCurrentCollision >> theCurrentStep >> theCurrentStepHandler >> warnIncomplete >> theIncoming; } ThePEG_IMPLEMENT_CLASS_DESCRIPTION(EventHandler); void EventHandler::Init() { static ClassDocumentation documentation ("This is the base class controlling the generation of the event after " "the hard sub-process generation. To its help it has a number of step " "handler objects, most noticeable the " "CascadeHandler, the " "HadronizationHandler and the " "DecayHandler. Derived classes may " "also make use of the LuminosityFunction " "to specify the incoming beams, the " "PartonExtractor to administer the " "extraction of partons from incoming hadrons, and the " "Cuts to specify cuts on the primary sub-process."); static Parameter interfaceMaxLoop ("MaxLoop", "The maximum number of attempts per event when selecting a sub-process.", &EventHandler::theMaxLoop, 100000, 100, 100000000, true, false, true); static Switch interfaceStatLevel ("StatLevel", "Controlls the amount of statistics written out after each run to " "the EventGenerators .out file.", &EventHandler::theStatLevel, 2, true, false); static SwitchOption interfaceStatLevelNone (interfaceStatLevel, "None", "No statistics is written out.", 0); static SwitchOption interfaceStatLevelTot (interfaceStatLevel, "TotalXSec", "Only the total cross-section is written out.", 1); static SwitchOption interfaceStatLevelME (interfaceStatLevel, "MatrixElements", "The cross-section for each subprocess group is written out.", 2); static SwitchOption interfaceStatLevelBins (interfaceStatLevel, "Bins", "The cross-sections for individual subprocesses are written out.", 3); static SwitchOption interfaceStatLevelFull (interfaceStatLevel, "Full", "A detailed account of the cross-sections of the generated sub-processes " "is written out.", 4); static Reference interfaceLumifn ("LuminosityFunction", "An object derived from the ThePEG::LuminosityFunction class, " "which describes the beams in the collider under study.", &EventHandler::theLumiFn, false, false, true, true, &EventHandler::lumiFn); static Reference interfaceCuts ("Cuts", "Kinematical cuts to be used by subclasses which do not provide " "their own. Note that this may be overridden by subclasses.", &EventHandler::theCuts, true, false, true, true, false); static Reference interfacePartonExtractor ("PartonExtractor", "A PartonExtractor object to be used by subclasses which do not " "provide their own. Note that this may be overridden by subclasses.", &EventHandler::thePartonExtractor, true, false, true, true, false); ThePEG_DECLARE_PREPOST_OBJECTS(EventHandler, SubProcessHandler, Post, after); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(EventHandler, CascadeHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(EventHandler, MultipleInteractionHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(EventHandler, HadronizationHandler); ThePEG_DECLARE_GROUPINTERFACE_OBJECTS(EventHandler, DecayHandler); static Switch interfaceWarnIncomplete ("WarnIncomplete", "Emit a warning during the initialization that this EventHandler is " "incomplete. Should only be manipulated if the object is in fact an " "incomlete EventHandler and you do not want a warning.", &EventHandler::warnIncomplete, true, true, false); static SwitchOption interfaceWarnIncompleteYes (interfaceWarnIncomplete, "Yes", "This is an incomplete EventHandler and warning should be emitted.", true); static SwitchOption interfaceWarnIncompleteNo (interfaceWarnIncomplete, "No", "This EventHandler is either complete or no warning should be emitted " "in either case.", false); interfaceWarnIncomplete.setHasDefault(false); static Switch interfaceConsistencyLevel ("ConsistencyLevel", "Determines how often the event handler should check for charge and " "energy-momentum conservation.", &EventHandler::theConsistencyLevel, clCollision, true, false); static SwitchOption interfaceConsistencyLevelNever (interfaceConsistencyLevel, "Never", "No consistency checks are made.", clNoCheck); static SwitchOption interfaceConsistencyLevelEveryCollision (interfaceConsistencyLevel, "EveryCollision", "Every collision is checked for consistency.", clCollision); static SwitchOption interfaceConsistencyLevelEveryStep (interfaceConsistencyLevel, "EveryStep", "Every step is checked for consistency.", clStep); static SwitchOption interfaceConsistencyLevelPrintEveryCollision (interfaceConsistencyLevel, "PrintEveryCollision", "Every collision is checked for consistency. If an inconsistency is " "found, the event is printed to the log file.", clPrintCollision); static SwitchOption interfaceConsistencyLevelPrintEveryStep (interfaceConsistencyLevel, "PrintEveryStep", "Every step is checked for consistency. If an inconsistency is " "found, the event is printed to the log file.", clPrintStep); interfaceConsistencyLevel.setHasDefault(false); static Parameter interfaceConsistencyEpsilon ("ConsistencyEpsilon", "The maximum fraction of the total invariant mass of a collision that " "any of the components of the summed momentum is allowed to change during " "the generation. Used if ConsistencyLevel is " "switched on.", &EventHandler::theConsistencyEpsilon, sqrt(Constants::epsilon), 0.0, 1.0, true, false, Interface::limited); interfaceLumifn.rank(10); interfaceCascadeHandler.rank(9); interfaceHadronizationHandler.rank(8); interfaceDecayHandler.rank(7); interfaceCuts.rank(6); interfacePartonExtractor.rank(5); } ThePEG_IMPLEMENT_PREPOST_GROUP(EventHandler,SubProcessHandler, theSubprocessGroup,Post) \ ThePEG_IMPLEMENT_GROUPINTERFACE(EventHandler,CascadeHandler, theCascadeGroup,CascHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(EventHandler, MultipleInteractionHandler, theMultiGroup,MIHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(EventHandler,HadronizationHandler, theHadronizationGroup,HadrHdlPtr) \ ThePEG_IMPLEMENT_GROUPINTERFACE(EventHandler,DecayHandler, theDecayGroup,DecayHdlPtr) \ EventHandler::EventLoopException:: EventLoopException(const EventHandler & eh) { theMessage << "The maximum number of attempts per event (" << eh.maxLoop() << ") in event handler '" << eh.name() << "' was exceeded."; severity(maybeabort); } thepeg-1.8.0.orig/Handlers/HadronizationHandler.h0000644000175000017500000000402611747772425020171 0ustar sunsun// -*- C++ -*- // // HadronizationHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HadronizationHandler_H #define ThePEG_HadronizationHandler_H // This is the declaration of the HadronizationHandler class. #include "StepHandler.h" namespace ThePEG { /** * The HadronizationHandler is the base class of all handlers * implementing models for hadronization of coloured particles. It is * derived from the more general StepHandler class, but does not * introduce more functioanality as it stands. * * @see \ref HadronizationHandlerInterfaces "The interfaces" * defined for HadronizationHandler. * @see StepHandler * @see EventHandler * @see SubProcessHandler * */ class HadronizationHandler: public StepHandler { public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initHadronizationHandler; /** * Private and non-existent assignment operator. */ HadronizationHandler & operator=(const HadronizationHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of HadronizationHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of HadronizationHandler. */ typedef StepHandler NthBase; }; /** * This template specialization informs ThePEG about the name of the * HadronizationHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::HadronizationHandler"; } }; /** @endcond */ } #endif /* ThePEG_HadronizationHandler_H */ thepeg-1.8.0.orig/Handlers/SubProcessHandler.h0000644000175000017500000001571711747772425017461 0ustar sunsun// -*- C++ -*- // // SubProcessHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SubProcessHandler_H #define ThePEG_SubProcessHandler_H // This is the declaration of the SubProcessHandler class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Interval.h" #include "ThePEG/Handlers/HandlerGroup.h" #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/MatrixElement/MEBase.fh" #include "ThePEG/Cuts/Cuts.fh" #include "SubProcessHandler.fh" namespace ThePEG { /** * The SubProcessHandler class is used to handle a set of MEBase * objects together with a PartonExtractor. It is used by the * StandardEventHandler to group together different ways of extracting * partons from incoming particles with associated hard parton-parton * matrix elements. * * Just as the EventHandler class, a SubProcessHandler keeps a full * set of HandlerGroups, which may be filled with * defaults which overrides the ones specified in the EventHandler in * each event the SubProcessHandler is chosen. * * The SubProcessHandler has also a Cuts object which is * responsible for restricting the kinematics of the sub-process and * produced collision. This object takes precedence over the one in * the EventHandler in each event the SubProcessHandler is chosen. * * @see \ref SubProcessHandlerInterfaces "The interfaces" * defined for SubProcessHandler. * @see MEBase * @see PartonExtractor * @see EventHandler * @see StandardEventHandler * @see HandlerGroup * @see Cuts */ class SubProcessHandler: public HandlerBase { public: /** A vector of HandlerGroup pointers. */ typedef vector GroupVector; /** A vector of ReweightBase pointers. */ typedef vector ReweightVector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ SubProcessHandler(); /** * Copy-constructor. */ SubProcessHandler(const SubProcessHandler &); /** * Default destructor. */ virtual ~SubProcessHandler(); //@} public: /** @name Access objects assigned to the SubProcessHandler. */ //@{ /** * Return a pointer to the parton extractor used. */ tPExtrPtr pExtractor() const { return thePartonExtractor; } /** * Return a reference to the vector of parton matrix elements used. */ const MEVector & MEs() const { return theMEs; } /** * Return a pointer to the kinematical cuts used. */ tCutsPtr cuts() const { return theCuts; } /** * Return a pointer (possibly null) to the assigned main * CascadeHandler to be used as CKKW-reweighter. */ tCascHdlPtr CKKWHandler() const; /** * Access a step handler group. */ const HandlerGroupBase & handlerGroup(Group::Handler) const; /** * Access the step handler groups. */ const GroupVector & groups() const { return theGroups; } /** * Return a reference to the vector of parton matrix elements used. */ MEVector & MEs() { return theMEs; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} private: /** * Setup the step handler groups. */ void setupGroups(); private: /** * The pointer to the parton extractor used. */ PExtrPtr thePartonExtractor; /** * The vector of partonic matrix elements to be used. */ MEVector theMEs; /** * The pointer to the kinematical cuts used. */ CutsPtr theCuts; /** * The SubProcessHandler group. */ HandlerGroup theSubprocessGroup; /** * The CascadeHandler group. */ HandlerGroup theCascadeGroup; /** * The MultipleInteractionHandler group. */ HandlerGroup theMultiGroup; /** * The HadronizationHandler group. */ HandlerGroup theHadronizationGroup; /** * The DecayHandler group. */ HandlerGroup theDecayGroup; /** * The step handler groups. */ GroupVector theGroups; /** * The pre- and re-weight objects modifying all matrix element in * this sub-process hander. */ ReweightVector reweights; /** * The pre- and re-weight objects modifying all matrix element in * this sub-process hander. */ ReweightVector preweights; private: ThePEG_DECLARE_PREPOST_GROUP(SubProcessHandler,Post); ThePEG_DECLARE_GROUPINTERFACE(CascadeHandler,CascHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(MultipleInteractionHandler,MIHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(HadronizationHandler,HadrHdlPtr); ThePEG_DECLARE_GROUPINTERFACE(DecayHandler,DecayHdlPtr); /** * Describe a concreta class with persistent data. */ static ClassDescription initSubProcessHandler; private: /** * Private and non-existent assignment operator. */ const SubProcessHandler & operator=(const SubProcessHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of SubProcessHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of SubProcessHandler. */ typedef HandlerBase NthBase; }; /** This template specialization informs ThePEG about the name of * the SubProcessHandler class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SubProcessHandler"; } }; /** @endcond */ } #endif /* ThePEG_SubProcessHandler_H */ thepeg-1.8.0.orig/configure0000755000175000017500000226726111756366732014076 0ustar sunsun#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for ThePEG 1.8.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://www.thep.lu.se/ThePEG/ about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='ThePEG' PACKAGE_TARNAME='ThePEG' PACKAGE_VERSION='1.8.0' PACKAGE_STRING='ThePEG 1.8.0' PACKAGE_BUGREPORT='http://www.thep.lu.se/ThePEG/' PACKAGE_URL='' ac_unique_file="EventRecord/SubProcess.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS JAVAGUI_FALSE JAVAGUI_TRUE JAR JAVA JAVAC PERL EMPTY AM_LDFLAGS AM_CXXFLAGS AM_CPPFLAGS LWHINCLUDE BZ2WRITE_FILE BZ2READ_FILE GZWRITE_FILE GZREAD_FILE LOAD_RIVET RIVETLIBS RIVETINCLUDE HAVE_RIVET_FALSE HAVE_RIVET_TRUE LOAD_HEPMC CREATE_HEPMC HEPMCLIBS HEPMCINCLUDE HAVE_HEPMC_FALSE HAVE_HEPMC_TRUE USELHAPDF_FALSE USELHAPDF_TRUE LHAPDF_PKGDATADIR LHAPDF_LDFLAGS LOAD_LHAPDF LHAPDF_LIBS GSLLIBS GSLINCLUDE CXXCPP CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL RANLIB DLLTOOL OBJDUMP NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE ac_ct_CC CFLAGS CC LIBTOOL LN_S am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX ac_ct_AR AR AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOLVERSIONINFO target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_static with_pic enable_shared enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_readline enable_unitchecks with_gsl with_LHAPDF with_hepmc with_rivet with_zlib with_javagui ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC CC CFLAGS CPP CXXCPP GZREAD_FILE GZWRITE_FILE BZ2READ_FILE BZ2WRITE_FILE' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures ThePEG 1.8.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/ThePEG] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of ThePEG 1.8.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static[=PKGS] build static libraries [default=no] --enable-shared[=PKGS] build shared libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --disable-readline turns off readline support. --enable-unitchecks turns on dimension checking for physical quantities. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gsl=path location of gsl installation. Default: system lib --without-LHAPDF do not use LHAPDF package (requires g77 compiler) (included by default --with-LHAPDF=path to specify where the LHAPDF shared library is located) --with-hepmc=DIR Location of HepMC installation [default=system libs] --with-rivet=DIR Location of Rivet installation [default=system libs] --with-zlib=DIR root directory path of zlib installation defaults to /usr/local or /usr if not found in /usr/local --without-zlib to disable zlib usage completely --with-javagui Compile and install the java-based GUI. Some influential environment variables: CXX C++ compiler command CXXFLAGS C++ compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CC C compiler command CFLAGS C compiler flags CPP C preprocessor CXXCPP C++ preprocessor GZREAD_FILE The command which, taking the name of a gzipped file as argument, unzips it and prints it to stdout. Default is "gunzip -c" GZWRITE_FILE The command which, taking the name of a gzipped file as argument, reads stdin, zips it and writes it to the file. Default is "gzip -c > ". BZ2READ_FILE The command which, taking the name of a bzipped file as argument, unzips it and prints it to stdout. Default is "bunzip2 -c". BZ2WRITE_FILE The command which, taking the name of a bzipped file as argument, reads stdin, zips it and writes it to the file. Default is "bzip2 -c > ". Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF ThePEG configure 1.8.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_cxx_try_cpp LINENO # ------------------------ # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link # ac_fn_cxx_check_header_mongrel LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_cxx_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------------- ## ## Report this to http://www.thep.lu.se/ThePEG/ ## ## -------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_mongrel # ac_fn_cxx_check_header_compile LINENO HEADER VAR INCLUDES # --------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_cxx_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_cxx_check_header_compile # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## -------------------------------------------- ## ## Report this to http://www.thep.lu.se/ThePEG/ ## ## -------------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_cxx_try_run LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_cxx_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_run cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by ThePEG $as_me 1.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in Config "$srcdir"/Config; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in Config \"$srcdir\"/Config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. LIBTOOLVERSIONINFO="-version-info 15:0:0" ac_config_headers="$ac_config_headers Config/config.h Config/LWH.h Config/ThePEG_Qty.h:Config/ThePEG_Qty.h.a:Config/ThePEG_Qty.h.in:Config/ThePEG_Qty.h.b" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac case "${host}" in *-darwin[0156].*) as_fn_error $? "ThePEG requires OS X 10.3 or later" "$LINENO" 5 ;; *-darwin7.*) if test "x$MACOSX_DEPLOYMENT_TARGET" != "x10.3"; then as_fn_error $? "Please export the MACOSX_DEPLOYMENT_TARGET variable, set to 10.3" "$LINENO" 5 fi ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu am__api_version='1.12' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='ThePEG' VERSION='1.8.0' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 $as_echo_n "checking whether the C++ compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C++ compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 $as_echo_n "checking for C++ compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C++ compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CXX_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi case `pwd` in *\ * | *\ *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 $as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 $as_echo_n "checking for fgrep... " >&6; } if ${ac_cv_path_FGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in fgrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 $as_echo "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 $as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if ${lt_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM="$NM" else lt_nm_to_check="${ac_tool_prefix}nm" if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. tmp_nm="$ac_dir/$lt_tmp_nm" if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in */dev/null* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS="$lt_save_ifs" done : ${lt_cv_path_NM=no} fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 $as_echo "$lt_cv_path_NM" >&6; } if test "$lt_cv_path_NM" != "no"; then NM="$lt_cv_path_NM" else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 $as_echo "$DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DUMPBIN+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 $as_echo "$ac_ct_DUMPBIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi if test "$DUMPBIN" != ":"; then NM="$DUMPBIN" fi fi test -z "$NM" && NM=nm { $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 $as_echo_n "checking the name lister ($NM) interface... " >&6; } if ${lt_cv_nm_interface+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 $as_echo "$lt_cv_nm_interface" >&6; } # find the maximum length of command line arguments { $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 $as_echo_n "checking the maximum length of command line arguments... " >&6; } if ${lt_cv_sys_max_cmd_len+:} false; then : $as_echo_n "(cached) " >&6 else i=0 teststring="ABCD" case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8 ; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test $i != 17 # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n $lt_cv_sys_max_cmd_len ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 $as_echo "$lt_cv_sys_max_cmd_len" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 $as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } # Try some XSI features xsi_shell=no ( _lt_dummy="a/b/c" test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ = c,a/b,b/c, \ && eval 'test $(( 1 + 1 )) -eq 2 \ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ && xsi_shell=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 $as_echo "$xsi_shell" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 $as_echo_n "checking whether the shell understands \"+=\"... " >&6; } lt_shell_append=no ( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ >/dev/null 2>&1 \ && lt_shell_append=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 $as_echo "$lt_shell_append" >&6; } if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 $as_echo_n "checking for $LD option to reload object files... " >&6; } if ${lt_cv_ld_reload_flag+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_reload_flag='-r' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 $as_echo "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; darwin*) if test "$GCC" = yes; then reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 $as_echo "$OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OBJDUMP="objdump" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 $as_echo "$ac_ct_OBJDUMP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 $as_echo_n "checking how to recognize dependent libraries... " >&6; } if ${lt_cv_deplibs_check_method+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # `unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # which responds to the $file_magic_cmd with a given extended regex. # If you have `file' or equivalent on your system and you're not sure # whether `pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; gnu*) lt_cv_deplibs_check_method=pass_all ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 $as_echo "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 $as_echo "$DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DLLTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DLLTOOL="dlltool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 $as_echo "$ac_ct_DLLTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 $as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } if ${lt_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test "$host_cpu" = ia64; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function # and D for any global variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ " {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ " s[1]~/^[@?]/{print s[1], s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS="conftstm.$ac_objext" CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext}; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test "$pipe_works" = yes; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # Check whether --enable-libtool-lock was given. if test "${enable_libtool_lock+set}" = set; then : enableval=$enable_libtool_lock; fi test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE="32" ;; *ELF-64*) HPUX_IA64_MODE="64" ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out which ABI we are using. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test "$lt_cv_prog_gnu_ld" = yes; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_i386" ;; ppc64-*linux*|powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; ppc*-*linux*|powerpc*-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -belf" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 $as_echo_n "checking whether the C compiler needs -belf... " >&6; } if ${lt_cv_cc_needs_belf+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_cc_needs_belf=yes else lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 $as_echo "$lt_cv_cc_needs_belf" >&6; } if test x"$lt_cv_cc_needs_belf" != x"yes"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS="$SAVE_CFLAGS" fi ;; *-*solaris*) # Find out which ABI we are using. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks="$enable_libtool_lock" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 $as_echo "$DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 $as_echo "$ac_ct_DSYMUTIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 $as_echo "$NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_NMEDIT+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_NMEDIT="nmedit" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 $as_echo "$ac_ct_NMEDIT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_LIPO="${ac_tool_prefix}lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 $as_echo "$LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_LIPO+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_LIPO="lipo" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 $as_echo "$ac_ct_LIPO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL="${ac_tool_prefix}otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 $as_echo "$OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL="otool" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 $as_echo "$ac_ct_OTOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 $as_echo "$OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_OTOOL64+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_OTOOL64="otool64" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 $as_echo "$ac_ct_OTOOL64" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 $as_echo_n "checking for -single_module linker flag... " >&6; } if ${lt_cv_apple_cc_single_mod+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_apple_cc_single_mod=no if test -z "${LT_MULTI_MODULE}"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 0; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 $as_echo "$lt_cv_apple_cc_single_mod" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 $as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } if ${lt_cv_ld_exported_symbols_list+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_ld_exported_symbols_list=yes else lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 $as_echo "$lt_cv_ld_exported_symbols_list" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; 10.[012]*) _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test "$lt_cv_apple_cc_single_mod" = "yes"; then _lt_dar_single_mod='$single_module' fi if test "$lt_cv_ld_exported_symbols_list" = "yes"; then _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' fi if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in dlfcn.h do : ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default " if test "x$ac_cv_header_dlfcn_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf # Set options # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS="$lt_save_ifs" ;; esac else enable_static=no fi enable_dlopen=yes # Check whether --with-pic was given. if test "${with_pic+set}" = set; then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac else pic_mode=default fi test -z "$pic_mode" && pic_mode=yes enable_win32_dll=no # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS="$lt_save_ifs" ;; esac else enable_shared=yes fi # Check whether --enable-fast-install was given. if test "${enable_fast_install+set}" = set; then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for pkg in $enableval; do IFS="$lt_save_ifs" if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS="$lt_save_ifs" ;; esac else enable_fast_install=yes fi # This can be used to rebuild libtool when needed LIBTOOL_DEPS="$ltmain" # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 $as_echo_n "checking for objdir... " >&6; } if ${lt_cv_objdir+:} false; then : $as_echo_n "(cached) " >&6 else rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 $as_echo "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir cat >>confdefs.h <<_ACEOF #define LT_OBJDIR "$lt_cv_objdir/" _ACEOF case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld="$lt_cv_prog_gnu_ld" old_CC="$CC" old_CFLAGS="$CFLAGS" # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 $as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/${ac_tool_prefix}file; then lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 $as_echo_n "checking for file... " >&6; } if ${lt_cv_path_MAGIC_CMD+:} false; then : $as_echo_n "(cached) " >&6 else case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD="$MAGIC_CMD" lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/file; then lt_cv_path_MAGIC_CMD="$ac_dir/file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS="$lt_save_ifs" MAGIC_CMD="$lt_save_MAGIC_CMD" ;; esac fi MAGIC_CMD="$lt_cv_path_MAGIC_CMD" if test -n "$MAGIC_CMD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 $as_echo "$MAGIC_CMD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC="$CC" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test "$GCC" = yes; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 $as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 $as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test "$GCC" = yes; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='${wl}-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec ;then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if ${lt_cv_prog_compiler_pic_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 $as_echo "$lt_cv_prog_compiler_pic_works" >&6; } if test x"$lt_cv_prog_compiler_pic_works" = xyes; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 $as_echo "$lt_cv_prog_compiler_static_works" >&6; } if test x"$lt_cv_prog_compiler_static_works" = xyes; then : else lt_prog_compiler_static= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 $as_echo "$lt_cv_prog_compiler_c_o" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ` (' and `)$', so one must not match beginning or # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', # as well as any symbol that contains `d'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = yes; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='${wl}' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec='${wl}--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='${wl}--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test "$tmp_diet" = no then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi case $cc_basename in xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='${wl}-f,' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' ${wl}-bernotok' allow_undefined_flag=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test "$GCC" = yes; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='${wl}-E' ;; hpux10*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$GCC" = yes && test "$with_gnu_ld" = no; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='${wl}-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test "$GCC" = yes; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' export_dynamic_flag_spec='${wl}-E' else case $host_os in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-R$libdir' ;; *) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' ;; osf3*) if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test "$GCC" = yes; then allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test "$GCC" = yes; then wlarc='${wl}' archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='${wl}' archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. GCC discards it without `$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test "$GCC" = yes; then whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test "x$host_vendor" = xsequent; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='${wl}-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='${wl}-z,text' allow_undefined_flag='${wl}-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='${wl}-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='${wl}-Bexport' runpath_var='LD_RUN_PATH' if test "$GCC" = yes; then archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test x$host_vendor = xsni; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='${wl}-Blargedynsym' ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 $as_echo "$ld_shlibs" >&6; } test "$ld_shlibs" = no && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } if test "$GCC" = yes; then case $host_os in darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; *) lt_awk_arg="/^libraries:/" ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary. lt_tmp_lt_search_path_spec= lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path/$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" else test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS=" "; FS="/|\n";} { lt_foo=""; lt_count=0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo="/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test "X$hardcode_automatic" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && test "$hardcode_minus_L" != no; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 $as_echo "$hardcode_action" >&6; } if test "$hardcode_action" = relink || test "$inherit_rpath" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi if test "x$enable_dlopen" != xyes; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen="load_add_on" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen="LoadLibrary" lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen="dlopen" lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else lt_cv_dlopen="dyld" lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes; then : lt_cv_dlopen="shl_load" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 $as_echo_n "checking for shl_load in -ldld... " >&6; } if ${ac_cv_lib_dld_shl_load+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shl_load (); int main () { return shl_load (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_shl_load=yes else ac_cv_lib_dld_shl_load=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 $as_echo "$ac_cv_lib_dld_shl_load" >&6; } if test "x$ac_cv_lib_dld_shl_load" = xyes; then : lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" else ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes; then : lt_cv_dlopen="dlopen" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 $as_echo_n "checking for dlopen in -ldl... " >&6; } if ${ac_cv_lib_dl_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dl_dlopen=yes else ac_cv_lib_dl_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 $as_echo "$ac_cv_lib_dl_dlopen" >&6; } if test "x$ac_cv_lib_dl_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 $as_echo_n "checking for dlopen in -lsvld... " >&6; } if ${ac_cv_lib_svld_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_svld_dlopen=yes else ac_cv_lib_svld_dlopen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 $as_echo "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes; then : lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 $as_echo_n "checking for dld_link in -ldld... " >&6; } if ${ac_cv_lib_dld_dld_link+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldld $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dld_link (); int main () { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dld_dld_link=yes else ac_cv_lib_dld_dld_link=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 $as_echo "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes; then : lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" fi fi fi fi fi fi ;; esac if test "x$lt_cv_dlopen" != xno; then enable_dlopen=yes else enable_dlopen=no fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS="$CPPFLAGS" test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS="$LDFLAGS" wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS="$LIBS" LIBS="$lt_cv_dlopen_libs $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 $as_echo_n "checking whether a program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 $as_echo "$lt_cv_dlopen_self" >&6; } if test "x$lt_cv_dlopen_self" = xyes; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 $as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } if ${lt_cv_dlopen_self_static+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 $as_echo "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS="$save_CPPFLAGS" LDFLAGS="$save_LDFLAGS" LIBS="$save_LIBS" ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 $as_echo_n "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP" ; then striplib="$STRIP -x" old_striplib="$STRIP -S" { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } ;; esac fi # Report which library types will actually be built { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 $as_echo_n "checking if libtool supports shared libraries... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 $as_echo "$can_build_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 $as_echo_n "checking whether to build shared libraries... " >&6; } test "$can_build_shared" = "no" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test "$enable_shared" = yes && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then test "$enable_shared" = yes && enable_static=no fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 $as_echo "$enable_shared" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 $as_echo_n "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test "$enable_shared" = yes || enable_static=yes { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 $as_echo "$enable_static" >&6; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu CC="$lt_save_CC" if test -n "$CXX" && ( test "X$CXX" != "Xno" && ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || (test "X$CXX" != "Xg++"))) ; then ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 $as_echo_n "checking how to run the C++ preprocessor... " >&6; } if test -z "$CXXCPP"; then if ${ac_cv_prog_CXXCPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CXXCPP needs to be expanded for CXXCPP in "$CXX -E" "/lib/cpp" do ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CXXCPP=$CXXCPP fi CXXCPP=$ac_cv_prog_CXXCPP else ac_cv_prog_CXXCPP=$CXXCPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 $as_echo "$CXXCPP" >&6; } ac_preproc_ok=false for ac_cxx_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_cxx_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C++ preprocessor \"$CXXCPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu else _lt_caught_CXX_error=yes fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu archive_cmds_need_lc_CXX=no allow_undefined_flag_CXX= always_export_symbols_CXX=no archive_expsym_cmds_CXX= compiler_needs_object_CXX=no export_dynamic_flag_spec_CXX= hardcode_direct_CXX=no hardcode_direct_absolute_CXX=no hardcode_libdir_flag_spec_CXX= hardcode_libdir_separator_CXX= hardcode_minus_L_CXX=no hardcode_shlibpath_var_CXX=unsupported hardcode_automatic_CXX=no inherit_rpath_CXX=no module_cmds_CXX= module_expsym_cmds_CXX= link_all_deplibs_CXX=unknown old_archive_cmds_CXX=$old_archive_cmds reload_flag_CXX=$reload_flag reload_cmds_CXX=$reload_cmds no_undefined_flag_CXX= whole_archive_flag_spec_CXX= enable_shared_with_static_runtimes_CXX=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o objext_CXX=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test "$_lt_caught_CXX_error" != yes; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC compiler_CXX=$CC for cc_temp in $compiler""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test "$GXX" = yes; then lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' else lt_prog_compiler_no_builtin_flag_CXX= fi if test "$GXX" = yes; then # Set up default GNU C++ configuration # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${lt_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$lt_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${lt_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test "$with_gnu_ld" = yes; then archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='${wl}' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' else whole_archive_flag_spec_CXX= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } ld_shlibs_CXX=yes case $host_os in aix3*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag="" else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds_CXX='' hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes file_list_spec_CXX='${wl}-f,' if test "$GXX" = yes; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct_CXX=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L_CXX=yes hardcode_libdir_flag_spec_CXX='-L$libdir' hardcode_libdir_separator_CXX= fi esac shared_flag='-shared' if test "$aix_use_runtimelinking" = yes; then shared_flag="$shared_flag "'${wl}-G' fi else # not using gcc if test "$host_cpu" = ia64; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test "$aix_use_runtimelinking" = yes; then shared_flag='${wl}-G' else shared_flag='${wl}-bM:SRE' fi fi fi export_dynamic_flag_spec_CXX='${wl}-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. always_export_symbols_CXX=yes if test "$aix_use_runtimelinking" = yes; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag_CXX='-berok' # Determine the default libpath from the value encoded in an empty # executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' allow_undefined_flag_CXX="-z nodefs" archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath__CXX+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath__CXX"; then lt_cv_aix_libpath__CXX="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath__CXX fi hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag_CXX=' ${wl}-bernotok' allow_undefined_flag_CXX=' ${wl}-berok' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec_CXX='$convenience' fi archive_cmds_need_lc_CXX=yes # This is similar to how AIX traditionally builds its shared # libraries. archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag_CXX=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' else ld_shlibs_CXX=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec_CXX=' ' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=yes file_list_spec_CXX='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=".dll" # FIXME: Setting linknames here is a bad hack. archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' enable_shared_with_static_runtimes_CXX=yes # Don't use ranlib old_postinstall_cmds_CXX='chmod 644 $oldlib' postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec_CXX='-L$libdir' export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' allow_undefined_flag_CXX=unsupported always_export_symbols_CXX=no enable_shared_with_static_runtimes_CXX=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file (1st line # is EXPORTS), use it as is; otherwise, prepend... archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs_CXX=no fi ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc_CXX=no hardcode_direct_CXX=no hardcode_automatic_CXX=yes hardcode_shlibpath_var_CXX=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec_CXX='' fi link_all_deplibs_CXX=yes allow_undefined_flag_CXX="$_lt_dar_allow_undefined" case $cc_basename in ifort*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test "$_lt_dar_can_shared" = "yes"; then output_verbose_link_cmd=func_echo_all archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" if test "$lt_cv_apple_cc_single_mod" != "yes"; then archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" fi else ld_shlibs_CXX=no fi ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF ld_shlibs_CXX=no ;; freebsd-elf*) archive_cmds_need_lc_CXX=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions ld_shlibs_CXX=yes ;; gnu*) ;; haiku*) archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs_CXX=yes ;; hpux9*) hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: export_dynamic_flag_spec_CXX='${wl}-E' hardcode_direct_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; hpux10*|hpux11*) if test $with_gnu_ld = no; then hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' hardcode_libdir_separator_CXX=: case $host_cpu in hppa*64*|ia64*) ;; *) export_dynamic_flag_spec_CXX='${wl}-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no ;; *) hardcode_direct_CXX=yes hardcode_direct_absolute_CXX=yes hardcode_minus_L_CXX=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; aCC*) case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then if test $with_gnu_ld = no; then case $host_cpu in hppa*64*) archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; interix[3-9]*) hardcode_direct_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test "$GXX" = yes; then if test "$with_gnu_ld" = no; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' fi fi link_all_deplibs_CXX=yes ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: inherit_rpath_CXX=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' ;; esac archive_cmds_need_lc_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [1-5].* | *pgcpp\ [1-5].*) prelink_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' old_archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' archive_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' ;; cxx*) # Compaq C++ archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec_CXX='-rpath $libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' export_dynamic_flag_spec_CXX='${wl}--export-dynamic' archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' if test "x$supports_anon_versioning" = xyes; then archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' hardcode_libdir_flag_spec_CXX='-R$libdir' whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object_CXX=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; m88k*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) ld_shlibs_CXX=yes ;; openbsd2*) # C++ shared libraries are fairly broken ld_shlibs_CXX=no ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct_CXX=yes hardcode_shlibpath_var_CXX=no hardcode_direct_absolute_CXX=yes archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' export_dynamic_flag_spec_CXX='${wl}-E' whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else ld_shlibs_CXX=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' hardcode_libdir_separator_CXX=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; cxx*) case $host in osf3*) allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' ;; *) allow_undefined_flag_CXX=' -expect_unresolved \*' archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ $RM $lib.exp' hardcode_libdir_flag_spec_CXX='-rpath $libdir' ;; esac hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test "$GXX" = yes && test "$with_gnu_ld" = no; then allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' case $host in osf3*) archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; esac hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator_CXX=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support ld_shlibs_CXX=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ archive_cmds_need_lc_CXX=yes no_undefined_flag_CXX=' -zdefs' archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' hardcode_libdir_flag_spec_CXX='-R$libdir' hardcode_shlibpath_var_CXX=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands `-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' ;; esac link_all_deplibs_CXX=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test "$GXX" = yes && test "$with_gnu_ld" = no; then no_undefined_flag_CXX=' ${wl}-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require `-G' NOT `-shared' on this # platform. archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag_CXX='${wl}-z,text' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We can NOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag_CXX='${wl}-z,text' allow_undefined_flag_CXX='${wl}-z,nodefs' archive_cmds_need_lc_CXX=no hardcode_shlibpath_var_CXX=no hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' hardcode_libdir_separator_CXX=':' link_all_deplibs_CXX=yes export_dynamic_flag_spec_CXX='${wl}-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ '"$old_archive_cmds_CXX" reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ '"$reload_cmds_CXX" ;; *) archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; *) # FIXME: insert proper C++ library support ld_shlibs_CXX=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no GCC_CXX="$GXX" LD_CXX="$LD" ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... # Dependencies to place before and after the object being linked: predep_objects_CXX= postdep_objects_CXX= predeps_CXX= postdeps_CXX= compiler_lib_search_path_CXX= cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case ${prev}${p} in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test $p = "-L" || test $p = "-R"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$compiler_lib_search_path_CXX"; then compiler_lib_search_path_CXX="${prev}${p}" else compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$postdeps_CXX"; then postdeps_CXX="${prev}${p}" else postdeps_CXX="${postdeps_CXX} ${prev}${p}" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test "$pre_test_object_deps_done" = no; then if test -z "$predep_objects_CXX"; then predep_objects_CXX="$p" else predep_objects_CXX="$predep_objects_CXX $p" fi else if test -z "$postdep_objects_CXX"; then postdep_objects_CXX="$p" else postdep_objects_CXX="$postdep_objects_CXX $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling CXX test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken case $host_os in interix[3-9]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. predep_objects_CXX= postdep_objects_CXX= postdeps_CXX= ;; linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # The more standards-conforming stlport4 library is # incompatible with the Cstd library. Avoid specifying # it if it's in CXXFLAGS. Ignore libCrun as # -library=stlport4 depends on it. case " $CXX $CXXFLAGS " in *" -library=stlport4 "*) solaris_use_stlport4=yes ;; esac # Adding this requires a known-good setup of shared libraries for # Sun compiler versions before 5.6, else PIC objects from an old # archive will be linked into the output, leading to subtle bugs. if test "$solaris_use_stlport4" != yes; then postdeps_CXX='-library=Cstd -library=Crun' fi ;; esac ;; esac case " $postdeps_CXX " in *" -lc "*) archive_cmds_need_lc_CXX=no ;; esac compiler_lib_search_dirs_CXX= if test -n "${compiler_lib_search_path_CXX}"; then compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` fi lt_prog_compiler_wl_CXX= lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX= # C++ specific cases for pic, static, wl, etc. if test "$GXX" = yes; then lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-static' case $host_os in aix*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic_CXX='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the `-m68020' flag to GCC prevents building anything better, # like `-m68040'. lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic_CXX='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all lt_prog_compiler_pic_CXX= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static_CXX= ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic_CXX=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; *) lt_prog_compiler_pic_CXX='-fPIC' ;; esac else case $host_os in aix[4-9]*) # All AIX code is PIC. if test "$host_cpu" = ia64; then # AIX 5 now supports IA64 processor lt_prog_compiler_static_CXX='-Bstatic' else lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic_CXX='-DDLL_EXPORT' ;; dgux*) case $cc_basename in ec++*) lt_prog_compiler_pic_CXX='-KPIC' ;; ghcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' if test "$host_cpu" != ia64; then lt_prog_compiler_pic_CXX='+Z' fi ;; aCC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic_CXX='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_static_CXX='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler lt_prog_compiler_wl_CXX='--backend -Wl,' lt_prog_compiler_pic_CXX='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64 which still supported -KPIC. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fPIC' lt_prog_compiler_static_CXX='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-fpic' lt_prog_compiler_static_CXX='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) # IBM XL 8.0, 9.0 on PPC and BlueGene lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-qpic' lt_prog_compiler_static_CXX='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) lt_prog_compiler_pic_CXX='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic_CXX='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) lt_prog_compiler_wl_CXX='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 lt_prog_compiler_pic_CXX='-pic' ;; cxx*) # Digital/Compaq C++ lt_prog_compiler_wl_CXX='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. lt_prog_compiler_pic_CXX= lt_prog_compiler_static_CXX='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' lt_prog_compiler_wl_CXX='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler lt_prog_compiler_pic_CXX='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x lt_prog_compiler_pic_CXX='-pic' lt_prog_compiler_static_CXX='-Bstatic' ;; lcc*) # Lucid lt_prog_compiler_pic_CXX='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) lt_prog_compiler_wl_CXX='-Wl,' lt_prog_compiler_pic_CXX='-KPIC' lt_prog_compiler_static_CXX='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 lt_prog_compiler_pic_CXX='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) lt_prog_compiler_can_build_shared_CXX=no ;; esac fi case $host_os in # For platforms which do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic_CXX= ;; *) lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 $as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic_works_CXX=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works_CXX=yes fi fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then case $lt_prog_compiler_pic_CXX in "" | " "*) ;; *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; esac else lt_prog_compiler_pic_CXX= lt_prog_compiler_can_build_shared_CXX=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 $as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_static_works_CXX=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works_CXX=yes fi else lt_cv_prog_compiler_static_works_CXX=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 $as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then : else lt_prog_compiler_static_CXX= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 $as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_c_o_CXX=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o_CXX=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 $as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } hard_links="nottested" if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then # do not overwrite the value of need_locks provided by the user { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 $as_echo_n "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 $as_echo "$hard_links" >&6; } if test "$hard_links" = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 $as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 $as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' case $host_os in aix[4-9]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to AIX nm, but means don't demangle with GNU nm # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' else export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' fi ;; pw32*) export_symbols_cmds_CXX="$ltdll_cmds" ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' ;; esac ;; *) export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 $as_echo "$ld_shlibs_CXX" >&6; } test "$ld_shlibs_CXX" = no && can_build_shared=no with_gnu_ld_CXX=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc_CXX" in x|xyes) # Assume -lc should be added archive_cmds_need_lc_CXX=yes if test "$enable_shared" = yes && test "$GCC" = yes; then case $archive_cmds_CXX in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 $as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : $as_echo_n "(cached) " >&6 else $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl_CXX pic_flag=$lt_prog_compiler_pic_CXX compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag_CXX allow_undefined_flag_CXX= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc_CXX=no else lt_cv_archive_cmds_need_lc_CXX=yes fi allow_undefined_flag_CXX=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 $as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX ;; esac fi ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 $as_echo_n "checking dynamic linker characteristics... " >&6; } library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=".so" postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='${libname}${release}${shared_ext}$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test "$host_cpu" = ia64; then # AIX 5 supports IA64 library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line `#! .'. This would cause the generated library to # depend on `.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # AIX (on Power*) has no versioning support, so currently we can not hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. if test "$aix_use_runtimelinking" = yes; then # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' else # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='${libname}${release}.a $libname.a' soname_spec='${libname}${release}${shared_ext}$major' fi shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='${libname}${shared_ext}' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=".dll" need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \${file}`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' soname_spec='${libname}${release}${major}$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' if test "X$HPUX_IA64_MODE" = X32; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" fi sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test "$lt_cv_prog_gnu_ld" = yes; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Append ld.so.conf contents to the search path if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd*) version_type=sunos sys_lib_dlsearch_path_spec="/usr/lib" need_lib_prefix=no # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. case $host_os in openbsd3.3 | openbsd3.3.*) need_version=yes ;; *) need_version=no ;; esac library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then case $host_os in openbsd2.[89] | openbsd2.[89].*) shlibpath_overrides_runpath=no ;; *) shlibpath_overrides_runpath=yes ;; esac else shlibpath_overrides_runpath=yes fi ;; os2*) libname_spec='$name' shrext_cmds=".dll" need_lib_prefix=no library_names_spec='$libname${shared_ext} $libname.a' dynamic_linker='OS/2 ld.exe' shlibpath_var=LIBPATH ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='${libname}${release}${shared_ext}$major' library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test "$with_gnu_ld" = yes; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec ;then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' soname_spec='$libname${shared_ext}.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=freebsd-elf need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test "$with_gnu_ld" = yes; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 $as_echo "$dynamic_linker" >&6; } test "$dynamic_linker" = no && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test "$GCC" = yes; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" fi if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 $as_echo_n "checking how to hardcode library paths into programs... " >&6; } hardcode_action_CXX= if test -n "$hardcode_libdir_flag_spec_CXX" || test -n "$runpath_var_CXX" || test "X$hardcode_automatic_CXX" = "Xyes" ; then # We can hardcode non-existent directories. if test "$hardcode_direct_CXX" != no && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && test "$hardcode_minus_L_CXX" != no; then # Linking always hardcodes the temporary library directory. hardcode_action_CXX=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action_CXX=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action_CXX=unsupported fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 $as_echo "$hardcode_action_CXX" >&6; } if test "$hardcode_action_CXX" = relink || test "$inherit_rpath_CXX" = yes; then # Fast installation is not supported enable_fast_install=no elif test "$shlibpath_overrides_runpath" = yes || test "$enable_shared" = no; then # Fast installation is not necessary enable_fast_install=needless fi fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test "$_lt_caught_CXX_error" != yes ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_config_commands="$ac_config_commands libtool" # Only expand once: # Check whether --enable-readline was given. if test "${enable_readline+set}" = set; then : enableval=$enable_readline; else enable_readline=yes fi if test "$enable_readline" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a readline compatible library" >&5 $as_echo_n "checking for a readline compatible library... " >&6; } if ${vl_cv_lib_readline+:} false; then : $as_echo_n "(cached) " >&6 else ORIG_LIBS="$LIBS" for readline_lib in readline edit editline; do for termcap_lib in "" termcap curses ncurses; do if test -z "$termcap_lib"; then TRY_LIB="-l$readline_lib" else TRY_LIB="-l$readline_lib -l$termcap_lib" fi LIBS="$ORIG_LIBS $TRY_LIB" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char readline (); int main () { return readline (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : vl_cv_lib_readline="$TRY_LIB" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test -n "$vl_cv_lib_readline"; then break fi done if test -n "$vl_cv_lib_readline"; then break fi done if test -z "$vl_cv_lib_readline"; then vl_cv_lib_readline="no" LIBS="$ORIG_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vl_cv_lib_readline" >&5 $as_echo "$vl_cv_lib_readline" >&6; } if test "$vl_cv_lib_readline" != "no"; then $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h for ac_header in readline.h readline/readline.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readline supports history" >&5 $as_echo_n "checking whether readline supports history... " >&6; } if ${vl_cv_lib_readline_history+:} false; then : $as_echo_n "(cached) " >&6 else vl_cv_lib_readline_history="no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char add_history (); int main () { return add_history (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : vl_cv_lib_readline_history="yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vl_cv_lib_readline_history" >&5 $as_echo "$vl_cv_lib_readline_history" >&6; } if test "$vl_cv_lib_readline_history" = "yes"; then $as_echo "#define HAVE_READLINE_HISTORY 1" >>confdefs.h for ac_header in history.h readline/history.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_cxx_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to include dimension checking" >&5 $as_echo_n "checking whether to include dimension checking... " >&6; } # Check whether --enable-unitchecks was given. if test "${enable_unitchecks+set}" = set; then : enableval=$enable_unitchecks; else enable_unitchecks=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_unitchecks" >&5 $as_echo "$enable_unitchecks" >&6; } if test "x$enable_unitchecks" = "xyes"; then $as_echo "#define ThePEG_HAS_UNITS_CHECKING 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsl location" >&5 $as_echo_n "checking for gsl location... " >&6; } GSLINCLUDE="" GSLLIBS="" # Check whether --with-gsl was given. if test "${with_gsl+set}" = set; then : withval=$with_gsl; else with_gsl=system fi if test "x$with_gsl" = "xno"; then as_fn_error $? "libgsl is required. Please install the GNU scientific library and header files." "$LINENO" 5 fi if test "x$with_gsl" = "xsystem"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: in system libraries" >&5 $as_echo "in system libraries" >&6; } oldlibs="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5 $as_echo_n "checking for sqrt in -lm... " >&6; } if ${ac_cv_lib_m_sqrt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sqrt (); int main () { return sqrt (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_m_sqrt=yes else ac_cv_lib_m_sqrt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5 $as_echo "$ac_cv_lib_m_sqrt" >&6; } if test "x$ac_cv_lib_m_sqrt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cblas_srot in -lgslcblas" >&5 $as_echo_n "checking for cblas_srot in -lgslcblas... " >&6; } if ${ac_cv_lib_gslcblas_cblas_srot+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgslcblas $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cblas_srot (); int main () { return cblas_srot (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_gslcblas_cblas_srot=yes else ac_cv_lib_gslcblas_cblas_srot=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gslcblas_cblas_srot" >&5 $as_echo "$ac_cv_lib_gslcblas_cblas_srot" >&6; } if test "x$ac_cv_lib_gslcblas_cblas_srot" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGSLCBLAS 1 _ACEOF LIBS="-lgslcblas $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gsl_ran_poisson in -lgsl" >&5 $as_echo_n "checking for gsl_ran_poisson in -lgsl... " >&6; } if ${ac_cv_lib_gsl_gsl_ran_poisson+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gsl_ran_poisson (); int main () { return gsl_ran_poisson (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_gsl_gsl_ran_poisson=yes else ac_cv_lib_gsl_gsl_ran_poisson=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gsl_gsl_ran_poisson" >&5 $as_echo "$ac_cv_lib_gsl_gsl_ran_poisson" >&6; } if test "x$ac_cv_lib_gsl_gsl_ran_poisson" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBGSL 1 _ACEOF LIBS="-lgsl $LIBS" else as_fn_error $? "Cannot find libgsl. Please install the GNU scientific library." "$LINENO" 5 fi GSLLIBS="$LIBS" LIBS=$oldlibs else if test "`uname -m`" = "x86_64" -a -e "$with_gsl/lib64/libgsl.a" -a -d "$with_gsl/include/gsl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $with_gsl" >&5 $as_echo "found in $with_gsl" >&6; } GSLLIBS="-L$with_gsl/lib64 -R$with_gsl/lib64 -lgsl -lgslcblas" GSLINCLUDE="-I$with_gsl/include" elif test -e "$with_gsl/lib/libgsl.a" -a -d "$with_gsl/include/gsl"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $with_gsl" >&5 $as_echo "found in $with_gsl" >&6; } GSLLIBS="-L$with_gsl/lib -R$with_gsl/lib -lgsl -lgslcblas" GSLINCLUDE="-I$with_gsl/include" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } as_fn_error $? "Can't find $with_gsl/lib/libgsl.a or the headers in $with_gsl/include" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if LHAPDF is present and works" >&5 $as_echo_n "checking if LHAPDF is present and works... " >&6; } HAS_LHAPDF="yes" LHAPDF_LIBDIR="" LOAD_LHAPDF="" # Check whether --with-LHAPDF was given. if test "${with_LHAPDF+set}" = set; then : withval=$with_LHAPDF; if test -n "$with_LHAPDF" -a "x$with_LHAPDF" != "xyes" -a "x$with_LHAPDF" != "xno"; then LHAPDF_LIBDIR="$with_LHAPDF"; elif test "x$with_LHAPDF" == "xno"; then HAS_LHAPDF="no"; fi fi LHAPDF_LDFLAGS="" if test -n "$LHAPDF_LIBDIR"; then if test -e $LHAPDF_LIBDIR/libLHAPDF.so -o -e $LHAPDF_LIBDIR/libLHAPDF.dylib then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR" elif test "${host_cpu}" == "x86_64" -a -e $LHAPDF_LIBDIR/lib64/libLHAPDF.so then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR/lib64" elif test -e $LHAPDF_LIBDIR/lib/libLHAPDF.so -o -e $LHAPDF_LIBDIR/lib/libLHAPDF.dylib then LHAPDF_LDFLAGS="-L$LHAPDF_LIBDIR/lib" else HAS_LHAPDF="no" fi fi LHAPDF_LIBS="-lLHAPDF" oldLIB="$LIBS" oldLDFLAGS="$LDFLAGS" if test "$HAS_LHAPDF" == "yes"; then LIBS="$LIBS $LHAPDF_LIBS" LDFLAGS="$LDFLAGS $LHAPDF_LDFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern "C" { void initpdf_(int&); } int main () { int i = 1; initpdf_(i); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : else HAS_LHAPDF="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi LIBS="$oldLIB" LDFLAGS="$oldLDFLAGS" if test "$HAS_LHAPDF" == "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } LHAPDF_PKGDATADIR="$LHAPDF_LIBDIR/../share/lhapdf" LOAD_LHAPDF="library ThePEGLHAPDF.so" elif test "x$with_LHAPDF" == "xno" -o "x$with_LHAPDF" == "x"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else as_fn_error $? "LHAPDF was requested but the library was not found." "$LINENO" 5 fi if test "x$HAS_LHAPDF" == "xyes"; then USELHAPDF_TRUE= USELHAPDF_FALSE='#' else USELHAPDF_TRUE='#' USELHAPDF_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for HepMC location" >&5 $as_echo_n "checking for HepMC location... " >&6; } HEPMCINCLUDE="" HEPMCLIBS="-lHepMC" # Check whether --with-hepmc was given. if test "${with_hepmc+set}" = set; then : withval=$with_hepmc; else with_hepmc=system fi if test "x$with_hepmc" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: HepMC support disabled." >&5 $as_echo "HepMC support disabled." >&6; } elif test "x$with_hepmc" = "xsystem"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: in system libraries" >&5 $as_echo "in system libraries" >&6; } oldlibs="$LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lHepMC" >&5 $as_echo_n "checking for main in -lHepMC... " >&6; } if ${ac_cv_lib_HepMC_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lHepMC $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_HepMC_main=yes else ac_cv_lib_HepMC_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_HepMC_main" >&5 $as_echo "$ac_cv_lib_HepMC_main" >&6; } if test "x$ac_cv_lib_HepMC_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBHEPMC 1 _ACEOF LIBS="-lHepMC $LIBS" else with_hepmc=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: HepMC not found in system libraries" >&5 $as_echo "$as_me: WARNING: HepMC not found in system libraries" >&2;} fi HEPMCLIBS="$LIBS" LIBS=$oldlibs else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_hepmc" >&5 $as_echo "$with_hepmc" >&6; } HEPMCINCLUDE=-I$with_hepmc/include HEPMCLIBS="-L$with_hepmc/lib -R$with_hepmc/lib -lHepMC" if test "${host_cpu}" == "x86_64" -a -e $with_hepmc/lib64/libHepMC.so ; then HEPMCLIBS="-L$with_hepmc/lib64 -R$with_hepmc/lib64 -lHepMC" fi fi if test "x$with_hepmc" != "xno"; then # Now lets see if the libraries work properly oldLIBS="$LIBS" oldLDFLAGS="$LDFLAGS" oldCPPFLAGS="$CPPFLAGS" LIBS="$LIBS `echo $HEPMCLIBS | sed -e 's!-R.* ! !'`" LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $HEPMCINCLUDE" for ac_header in HepMC/HepMCDefs.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "HepMC/HepMCDefs.h" "ac_cv_header_HepMC_HepMCDefs_h" "$ac_includes_default" if test "x$ac_cv_header_HepMC_HepMCDefs_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HEPMC_HEPMCDEFS_H 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ********************************************************************* * HepMC versions before 2.05 may still work, but are not supported. * ********************************************************************* " >&5 $as_echo "$as_me: WARNING: ********************************************************************* * HepMC versions before 2.05 may still work, but are not supported. * ********************************************************************* " >&2;} fi done # check HepMC { $as_echo "$as_me:${as_lineno-$LINENO}: checking that HepMC works" >&5 $as_echo_n "checking that HepMC works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { HepMC::GenEvent(); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } as_fn_error $? "Use '--with-hepmc=' to set a path or use '--without-hepmc'." "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for ac_header in HepMC/PdfInfo.h do : ac_fn_cxx_check_header_compile "$LINENO" "HepMC/PdfInfo.h" "ac_cv_header_HepMC_PdfInfo_h" " #include #include #include " if test "x$ac_cv_header_HepMC_PdfInfo_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HEPMC_PDFINFO_H 1 _ACEOF else as_fn_error $? "Need HepMC with PdfInfo support." "$LINENO" 5 fi done for ac_header in HepMC/IO_GenEvent.h do : ac_fn_cxx_check_header_mongrel "$LINENO" "HepMC/IO_GenEvent.h" "ac_cv_header_HepMC_IO_GenEvent_h" "$ac_includes_default" if test "x$ac_cv_header_HepMC_IO_GenEvent_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_HEPMC_IO_GENEVENT_H 1 _ACEOF else as_fn_error $? "Need HepMC with GenEvent support." "$LINENO" 5 fi done LIBS="$oldLIBS" LDFLAGS="$oldLDFLAGS" CPPFLAGS="$oldCPPFLAGS" fi if test "x$with_hepmc" != "xno"; then HAVE_HEPMC_TRUE= HAVE_HEPMC_FALSE='#' else HAVE_HEPMC_TRUE='#' HAVE_HEPMC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Rivet location" >&5 $as_echo_n "checking for Rivet location... " >&6; } RIVETINCLUDE="" LOAD_RIVET="" RIVETLIBS="-lRivet" # Check whether --with-rivet was given. if test "${with_rivet+set}" = set; then : withval=$with_rivet; else with_rivet=system fi if test "x$with_hepmc" = "xno"; then with_rivet=no fi if test "x$with_rivet" = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: Rivet support disabled." >&5 $as_echo "Rivet support disabled." >&6; } elif test "x$with_rivet" = "xsystem"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: in system libraries" >&5 $as_echo "in system libraries" >&6; } oldlibs="$LIBS" LIBS="$LIBS $HEPMCLIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lRivet" >&5 $as_echo_n "checking for main in -lRivet... " >&6; } if ${ac_cv_lib_Rivet_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lRivet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { return main (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_Rivet_main=yes else ac_cv_lib_Rivet_main=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Rivet_main" >&5 $as_echo "$ac_cv_lib_Rivet_main" >&6; } if test "x$ac_cv_lib_Rivet_main" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRIVET 1 _ACEOF LIBS="-lRivet $LIBS" else with_rivet=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Rivet >= 1.3 not found in system libraries" >&5 $as_echo "$as_me: WARNING: Rivet >= 1.3 not found in system libraries" >&2;} fi RIVETLIBS="$LIBS" LIBS=$oldlibs else { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_rivet" >&5 $as_echo "$with_rivet" >&6; } RIVETINCLUDE="$( $with_rivet/bin/rivet-config --cppflags )" RIVETLIBS="-L$with_rivet/lib -R$with_rivet/lib -lRivet" if test "${host_cpu}" == "x86_64" -a -e $with_rivet/lib64/libRivet.so ; then RIVETLIBS="-L$with_rivet/lib64 -R$with_rivet/lib64 -lRivet" fi fi if test "x$with_rivet" != "xno"; then LOAD_RIVET="library RivetAnalysis.so" # Now lets see if the libraries work properly oldLIBS="$LIBS" oldLDFLAGS="$LDFLAGS" oldCPPFLAGS="$CPPFLAGS" LIBS="$LIBS `echo $HEPMCLIBS | sed -e 's!-R.* ! !'` `echo $RIVETLIBS | sed -e 's!-R.* ! !'` $GSLLIBS" LDFLAGS="$LDFLAGS" CPPFLAGS="$CPPFLAGS $HEPMCINCLUDE $RIVETINCLUDE $GSLINCLUDE" # check Rivet { $as_echo "$as_me:${as_lineno-$LINENO}: checking that Rivet works" >&5 $as_echo_n "checking that Rivet works... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { Rivet::AnalysisHandler foo; foo.writeData("foo"); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: No. Use '--with-rivet=' to set a path to Rivet >= 1.3'." >&5 $as_echo "No. Use '--with-rivet=' to set a path to Rivet >= 1.3'." >&6; } with_rivet="no" LOAD_RIVET="" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$oldLIBS" LDFLAGS="$oldLDFLAGS" CPPFLAGS="$oldCPPFLAGS" fi if test "x$with_rivet" != "xno"; then HAVE_RIVET_TRUE= HAVE_RIVET_FALSE='#' else HAVE_RIVET_TRUE='#' HAVE_RIVET_FALSE= fi # # Handle user hints # { $as_echo "$as_me:${as_lineno-$LINENO}: checking if zlib is wanted" >&5 $as_echo_n "checking if zlib is wanted... " >&6; } # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then : withval=$with_zlib; if test "$withval" != no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } if test -d "$withval" then ZLIB_HOME="$withval" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Sorry, $withval does not exist, checking usual places" >&5 $as_echo "$as_me: WARNING: Sorry, $withval does not exist, checking usual places" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi ZLIB_HOME=/usr/local if test ! -f "${ZLIB_HOME}/include/zlib.h" then ZLIB_HOME=/usr fi # # Locate zlib, if wanted # if test -n "${ZLIB_HOME}" then ZLIB_OLD_LDFLAGS=$LDFLAGS ZLIB_OLD_CPPFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateEnd in -lz" >&5 $as_echo_n "checking for inflateEnd in -lz... " >&6; } if ${ac_cv_lib_z_inflateEnd+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflateEnd (); int main () { return inflateEnd (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_inflateEnd=yes else ac_cv_lib_z_inflateEnd=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateEnd" >&5 $as_echo "$ac_cv_lib_z_inflateEnd" >&6; } if test "x$ac_cv_lib_z_inflateEnd" = xyes; then : zlib_cv_libz=yes else zlib_cv_libz=no fi ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : zlib_cv_zlib_h=yes else zlib_cv_zlib_h=no fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test "$zlib_cv_libz" = "yes" -a "$zlib_cv_zlib_h" = "yes" then # # If both library and header were found, use them # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflateEnd in -lz" >&5 $as_echo_n "checking for inflateEnd in -lz... " >&6; } if ${ac_cv_lib_z_inflateEnd+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char inflateEnd (); int main () { return inflateEnd (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_z_inflateEnd=yes else ac_cv_lib_z_inflateEnd=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflateEnd" >&5 $as_echo "$ac_cv_lib_z_inflateEnd" >&6; } if test "x$ac_cv_lib_z_inflateEnd" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBZ 1 _ACEOF LIBS="-lz $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking zlib in ${ZLIB_HOME}" >&5 $as_echo_n "checking zlib in ${ZLIB_HOME}... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 $as_echo "ok" >&6; } else # # If either header or library was not found, revert and bomb # { $as_echo "$as_me:${as_lineno-$LINENO}: checking zlib in ${ZLIB_HOME}" >&5 $as_echo_n "checking zlib in ${ZLIB_HOME}... " >&6; } LDFLAGS="$ZLIB_OLD_LDFLAGS" CPPFLAGS="$ZLIB_OLD_CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } as_fn_error $? "either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GZREAD_FILE is set" >&5 $as_echo_n "checking if GZREAD_FILE is set... " >&6; } if test -z "$GZREAD_FILE"; then GZREAD_FILE="gunzip -c" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (using $GZREAD_FILE)" >&5 $as_echo "no (using $GZREAD_FILE)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($GZREAD_FILE)" >&5 $as_echo "yes ($GZREAD_FILE)" >&6; } fi cat >>confdefs.h <<_ACEOF #define ThePEG_GZREAD_FILE "$GZREAD_FILE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking if GZWRITE_FILE is set" >&5 $as_echo_n "checking if GZWRITE_FILE is set... " >&6; } if test -z "$GZWRITE_FILE"; then GZWRITE_FILE="gzip -c > " { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (using $GZWRITE_FILE)" >&5 $as_echo "no (using $GZWRITE_FILE)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($GZWRITE_FILE)" >&5 $as_echo "yes ($GZWRITE_FILE)" >&6; } fi cat >>confdefs.h <<_ACEOF #define ThePEG_GZWRITE_FILE "$GZWRITE_FILE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking if BZ2READ_FILE is set" >&5 $as_echo_n "checking if BZ2READ_FILE is set... " >&6; } if test -z "$BZ2READ_FILE"; then BZ2READ_FILE="bunzip2 -c" { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (using $BZ2READ_FILE)" >&5 $as_echo "no (using $BZ2READ_FILE)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($BZ2READ_FILE)" >&5 $as_echo "yes ($BZ2READ_FILE)" >&6; } fi cat >>confdefs.h <<_ACEOF #define ThePEG_BZ2READ_FILE "$BZ2READ_FILE" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking if BZ2WRITE_FILE is set" >&5 $as_echo_n "checking if BZ2WRITE_FILE is set... " >&6; } if test -z "$BZ2WRITE_FILE"; then BZ2WRITE_FILE="bzip2 -c > " { $as_echo "$as_me:${as_lineno-$LINENO}: result: no (using $BZ2WRITE_FILE)" >&5 $as_echo "no (using $BZ2WRITE_FILE)" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes ($BZ2WRITE_FILE)" >&5 $as_echo "yes ($BZ2WRITE_FILE)" >&6; } fi cat >>confdefs.h <<_ACEOF #define ThePEG_BZ2WRITE_FILE "$BZ2WRITE_FILE" _ACEOF echo $ECHO_N "checking for expm1... $ECHO_C" 1>&6 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { expm1(1.0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define ThePEG_HAS_EXPM1 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking for log1p... $ECHO_C" 1>&6 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { log1p(1.0); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define ThePEG_HAS_LOG1P 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking for dlopen... $ECHO_C" 1>&6 # do this with libtool! cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { dlopen("", 1); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define ThePEG_HAS_DLOPEN 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking for ... $ECHO_C" 1>&6 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_IM|_FPU_MASK_DM|_FPU_MASK_ZM|_FPU_MASK_OM); _FPU_SETCW(cw); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define ThePEG_HAS_FPU_CONTROL 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking for ... $ECHO_C" 1>&6 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { feenableexcept(FE_DIVBYZERO|FE_OVERFLOW|FE_INVALID); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define ThePEG_HAS_FENV 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext echo $ECHO_N "checking for installed AIDA headers... $ECHO_C" 1>&6 LWHINCLUDE="-I\$(top_builddir)/include/ThePEG/Analysis/LWH" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "AIDA/IAnalysisFactory.h" int main () { AIDA::IAnalysisFactory * af; ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : $as_echo "#define LWH_USING_AIDA 1" >>confdefs.h echo "${ECHO_T}yes" 1>&6 else echo "${ECHO_T}no" 1>&6 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext AM_CPPFLAGS="-I\$(top_builddir)/include \$(GSLINCLUDE)" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler vendor" >&5 $as_echo_n "checking for C++ compiler vendor... " >&6; } if ${ax_cv_cxx_compiler_vendor+:} false; then : $as_echo_n "(cached) " >&6 else ax_cv_cxx_compiler_vendor=unknown # note: don't check for gcc first since some other compilers define __GNUC__ for ventest in intel:__ICC,__ECC,__INTEL_COMPILER ibm:__xlc__,__xlC__,__IBMC__,__IBMCPP__ pathscale:__PATHCC__,__PATHSCALE__ clang:__clang__ gnu:__GNUC__ sun:__SUNPRO_C,__SUNPRO_CC hp:__HP_cc,__HP_aCC dec:__DECC,__DECCXX,__DECC_VER,__DECCXX_VER borland:__BORLANDC__,__TURBOC__ comeau:__COMO__ cray:_CRAYC kai:__KCC lcc:__LCC__ metrowerks:__MWERKS__ sgi:__sgi,sgi microsoft:_MSC_VER watcom:__WATCOMC__ portland:__PGI; do vencpp="defined("`echo $ventest | cut -d: -f2 | sed 's/,/) || defined(/g'`")" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #if !($vencpp) thisisanerror; #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ax_cv_cxx_compiler_vendor=`echo $ventest | cut -d: -f1`; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compiler_vendor" >&5 $as_echo "$ax_cv_cxx_compiler_vendor" >&6; } case "${ax_cv_cxx_compiler_vendor}" in gnu) AM_CXXFLAGS="-ansi -pedantic -Wall -W" ;; clang) AM_CXXFLAGS="-ansi -pedantic -Wall -Wno-overloaded-virtual -Wno-unused-function" ;; intel) AM_CXXFLAGS="-strict-ansi -Wall -wd13000,1418,981,444,383,1599,1572,2259,980" ;; esac if test "$GCC" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcc abs bug" >&5 $as_echo_n "checking for gcc abs bug... " >&6; } if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (int i) { return -2 * __builtin_abs(i - 2); } int main () { if ( foo(1) != -2 || foo(3) != -2 ) return 1; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found. Compiler is ok." >&5 $as_echo "not found. Compiler is ok." >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: found. Builtin abs() is buggy." >&5 $as_echo "found. Builtin abs() is buggy." >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -fno-builtin-abs works" >&5 $as_echo_n "checking if -fno-builtin-abs works... " >&6; } oldcxxflags=$CXXFLAGS CXXFLAGS="$CXXFLAGS -fno-builtin-abs" if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int foo (int i) { return -2 * std::abs(i - 2); } int main () { if (foo(1) != -2 || foo(3) != -2) return 1; ; return 0; } _ACEOF if ac_fn_cxx_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes. Setting -fno-builtin-abs." >&5 $as_echo "yes. Setting -fno-builtin-abs." >&6; } AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin-abs" AM_CFLAGS="$AM_CFLAGS -fno-builtin-abs" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no. Setting -fno-builtin." >&5 $as_echo "no. Setting -fno-builtin." >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ***************************************************************************** For this version of gcc, -fno-builtin-abs alone did not work to avoid the gcc abs() bug. Instead, all gcc builtin functions are now disabled. Update gcc if possible. *****************************************************************************" >&5 $as_echo "$as_me: WARNING: ***************************************************************************** For this version of gcc, -fno-builtin-abs alone did not work to avoid the gcc abs() bug. Instead, all gcc builtin functions are now disabled. Update gcc if possible. *****************************************************************************" >&2;} AM_CXXFLAGS="$AM_CXXFLAGS -fno-builtin" AM_CFLAGS="$AM_CFLAGS -fno-builtin" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CXXFLAGS=$oldcxxflags fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi case "${host}" in *-darwin*) ;; *) AM_LDFLAGS="-Wl,--enable-new-dtags" ;; esac EMPTY="" # Extract the first word of "perl", so it can be a program name with args. set dummy perl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Check whether --with-javagui was given. if test "${with_javagui+set}" = set; then : withval=$with_javagui; fi if test "x$with_javagui" != "xno"; then hasjava=yes # Extract the first word of "javac", so it can be a program name with args. set dummy javac; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVAC+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVAC in [\\/]* | ?:[\\/]*) ac_cv_path_JAVAC="$JAVAC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVAC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi JAVAC=$ac_cv_path_JAVAC if test -n "$JAVAC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVAC" >&5 $as_echo "$JAVAC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "java", so it can be a program name with args. set dummy java; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAVA+:} false; then : $as_echo_n "(cached) " >&6 else case $JAVA in [\\/]* | ?:[\\/]*) ac_cv_path_JAVA="$JAVA" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAVA="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi JAVA=$ac_cv_path_JAVA if test -n "$JAVA"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAVA" >&5 $as_echo "$JAVA" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "jar", so it can be a program name with args. set dummy jar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_JAR+:} false; then : $as_echo_n "(cached) " >&6 else case $JAR in [\\/]* | ?:[\\/]*) ac_cv_path_JAR="$JAR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_JAR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi JAR=$ac_cv_path_JAR if test -n "$JAR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JAR" >&5 $as_echo "$JAR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test -z "$JAR" -o -z "$JAVA" -o -z "$JAVAC"; then hasjava=no; else { $as_echo "$as_me:${as_lineno-$LINENO}: checking if java works" >&5 $as_echo_n "checking if java works... " >&6; } echo 'public class conftest { public static void main(String[]arg){}}' > conftest.java $JAVAC -source 1.4 conftest.java 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi echo "Main-Class: conftest" > conftest.manifest $JAR cmf conftest.manifest conftest.jar conftest.class 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi $JAVA -jar conftest.jar 1>&5 2>&5 if test $? -ne 0; then hasjava=no; fi rm -f conftest.java conftest.err conftest.class conftest.manifest conftest.jar fi if test "x$hasjava" != "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } with_javagui=no; { $as_echo "$as_me:${as_lineno-$LINENO}: Java GUI disabled" >&5 $as_echo "$as_me: Java GUI disabled" >&6;} fi fi if test "x$with_javagui" != "xno"; then JAVAGUI_TRUE= JAVAGUI_FALSE='#' else JAVAGUI_TRUE='#' JAVAGUI_FALSE= fi ac_config_files="$ac_config_files Helicity/Makefile Helicity/WaveFunction/Makefile Helicity/Vertex/Makefile Helicity/Vertex/Scalar/Makefile Helicity/Vertex/Vector/Makefile Helicity/Vertex/Tensor/Makefile Utilities/Makefile include/Makefile Interface/Makefile LesHouches/Makefile Vectors/Makefile PDT/Makefile PDF/Makefile Persistency/Makefile Config/Makefile Handlers/Makefile MatrixElement/Makefile Pointer/Makefile lib/Makefile lib/Makefile.common.install src/Makefile ACDC/Makefile Repository/Makefile EventRecord/Makefile StandardModel/Makefile Cuts/Makefile Analysis/Makefile Doc/Makefile Doc/MakeDocs.in Doc/refman.h Doc/refman.conf java/Makefile Makefile" ac_config_files="$ac_config_files Doc/fixinterfaces.pl" CXXSTRING=`$CXX --version | head -1` cat << _THEPEG_EOF_ > config.thepeg ***************************************************** *** $PACKAGE_STRING configuration summary *** Please include this information in bug reports! ***-------------------------------------------------- *** Prefix: $prefix *** *** Dimension checks: $enable_unitchecks *** *** GSL: $with_gsl *** *** LHAPDF: $with_LHAPDF *** HepMC: $with_hepmc *** Rivet: $with_rivet *** *** Host: $host *** CXX: $CXXSTRING ***************************************************** _THEPEG_EOF_ ac_config_commands="$ac_config_commands summary" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USELHAPDF_TRUE}" && test -z "${USELHAPDF_FALSE}"; then as_fn_error $? "conditional \"USELHAPDF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_HEPMC_TRUE}" && test -z "${HAVE_HEPMC_FALSE}"; then as_fn_error $? "conditional \"HAVE_HEPMC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_RIVET_TRUE}" && test -z "${HAVE_RIVET_FALSE}"; then as_fn_error $? "conditional \"HAVE_RIVET\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${JAVAGUI_TRUE}" && test -z "${JAVAGUI_FALSE}"; then as_fn_error $? "conditional \"JAVAGUI\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by ThePEG $as_me 1.8.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ ThePEG config.status 1.8.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib \ compiler_lib_search_dirs \ predep_objects \ postdep_objects \ predeps \ postdeps \ compiler_lib_search_path \ LD_CXX \ reload_flag_CXX \ compiler_CXX \ lt_prog_compiler_no_builtin_flag_CXX \ lt_prog_compiler_pic_CXX \ lt_prog_compiler_wl_CXX \ lt_prog_compiler_static_CXX \ lt_cv_prog_compiler_c_o_CXX \ export_dynamic_flag_spec_CXX \ whole_archive_flag_spec_CXX \ compiler_needs_object_CXX \ with_gnu_ld_CXX \ allow_undefined_flag_CXX \ no_undefined_flag_CXX \ hardcode_libdir_flag_spec_CXX \ hardcode_libdir_separator_CXX \ exclude_expsyms_CXX \ include_expsyms_CXX \ file_list_spec_CXX \ compiler_lib_search_dirs_CXX \ predep_objects_CXX \ postdep_objects_CXX \ predeps_CXX \ postdeps_CXX \ compiler_lib_search_path_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec \ reload_cmds_CXX \ old_archive_cmds_CXX \ old_archive_from_new_cmds_CXX \ old_archive_from_expsyms_cmds_CXX \ archive_cmds_CXX \ archive_expsym_cmds_CXX \ module_cmds_CXX \ module_expsym_cmds_CXX \ export_symbols_cmds_CXX \ prelink_cmds_CXX \ postlink_cmds_CXX; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' xsi_shell='$xsi_shell' lt_shell_append='$lt_shell_append' # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' TIMESTAMP='$TIMESTAMP' RM='$RM' ofile='$ofile' _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Config/config.h") CONFIG_HEADERS="$CONFIG_HEADERS Config/config.h" ;; "Config/LWH.h") CONFIG_HEADERS="$CONFIG_HEADERS Config/LWH.h" ;; "Config/ThePEG_Qty.h") CONFIG_HEADERS="$CONFIG_HEADERS Config/ThePEG_Qty.h:Config/ThePEG_Qty.h.a:Config/ThePEG_Qty.h.in:Config/ThePEG_Qty.h.b" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "Helicity/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/Makefile" ;; "Helicity/WaveFunction/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/WaveFunction/Makefile" ;; "Helicity/Vertex/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/Vertex/Makefile" ;; "Helicity/Vertex/Scalar/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/Vertex/Scalar/Makefile" ;; "Helicity/Vertex/Vector/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/Vertex/Vector/Makefile" ;; "Helicity/Vertex/Tensor/Makefile") CONFIG_FILES="$CONFIG_FILES Helicity/Vertex/Tensor/Makefile" ;; "Utilities/Makefile") CONFIG_FILES="$CONFIG_FILES Utilities/Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "Interface/Makefile") CONFIG_FILES="$CONFIG_FILES Interface/Makefile" ;; "LesHouches/Makefile") CONFIG_FILES="$CONFIG_FILES LesHouches/Makefile" ;; "Vectors/Makefile") CONFIG_FILES="$CONFIG_FILES Vectors/Makefile" ;; "PDT/Makefile") CONFIG_FILES="$CONFIG_FILES PDT/Makefile" ;; "PDF/Makefile") CONFIG_FILES="$CONFIG_FILES PDF/Makefile" ;; "Persistency/Makefile") CONFIG_FILES="$CONFIG_FILES Persistency/Makefile" ;; "Config/Makefile") CONFIG_FILES="$CONFIG_FILES Config/Makefile" ;; "Handlers/Makefile") CONFIG_FILES="$CONFIG_FILES Handlers/Makefile" ;; "MatrixElement/Makefile") CONFIG_FILES="$CONFIG_FILES MatrixElement/Makefile" ;; "Pointer/Makefile") CONFIG_FILES="$CONFIG_FILES Pointer/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/Makefile.common.install") CONFIG_FILES="$CONFIG_FILES lib/Makefile.common.install" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "ACDC/Makefile") CONFIG_FILES="$CONFIG_FILES ACDC/Makefile" ;; "Repository/Makefile") CONFIG_FILES="$CONFIG_FILES Repository/Makefile" ;; "EventRecord/Makefile") CONFIG_FILES="$CONFIG_FILES EventRecord/Makefile" ;; "StandardModel/Makefile") CONFIG_FILES="$CONFIG_FILES StandardModel/Makefile" ;; "Cuts/Makefile") CONFIG_FILES="$CONFIG_FILES Cuts/Makefile" ;; "Analysis/Makefile") CONFIG_FILES="$CONFIG_FILES Analysis/Makefile" ;; "Doc/Makefile") CONFIG_FILES="$CONFIG_FILES Doc/Makefile" ;; "Doc/MakeDocs.in") CONFIG_FILES="$CONFIG_FILES Doc/MakeDocs.in" ;; "Doc/refman.h") CONFIG_FILES="$CONFIG_FILES Doc/refman.h" ;; "Doc/refman.conf") CONFIG_FILES="$CONFIG_FILES Doc/refman.conf" ;; "java/Makefile") CONFIG_FILES="$CONFIG_FILES java/Makefile" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "Doc/fixinterfaces.pl") CONFIG_FILES="$CONFIG_FILES Doc/fixinterfaces.pl" ;; "summary") CONFIG_COMMANDS="$CONFIG_COMMANDS summary" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "libtool":C) # See if we are running on zsh, and set the options which allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}" ; then setopt NO_GLOB_SUBST fi cfgfile="${ofile}T" trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. # Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is part of GNU Libtool. # # GNU Libtool is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with GNU Libtool; see the file COPYING. If not, a copy # can be downloaded from http://www.gnu.org/licenses/gpl.html, or # obtained by writing to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. # The names of the tagged configurations supported by this script. available_tags="CXX " # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects postdep_objects=$lt_postdep_objects predeps=$lt_predeps postdeps=$lt_postdeps # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path # ### END LIBTOOL CONFIG _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test "X${COLLECT_NAMES+set}" != Xset; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain="$ac_aux_dir/ltmain.sh" # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ func_stripname ()\ {\ \ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ \ # positional parameters, so assign one to ordinary parameter first.\ \ func_stripname_result=${3}\ \ func_stripname_result=${func_stripname_result#"${1}"}\ \ func_stripname_result=${func_stripname_result%"${2}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" cat <<_LT_EOF >> "$ofile" # ### BEGIN LIBTOOL TAG CONFIG: CXX # The linker used to build libraries. LD=$lt_LD_CXX # How to create reloadable object files. reload_flag=$lt_reload_flag_CXX reload_cmds=$lt_reload_cmds_CXX # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds_CXX # A language specific compiler. CC=$lt_compiler_CXX # Is the compiler the GNU compiler? with_gcc=$GCC_CXX # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic_CXX # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl_CXX # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static_CXX # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc_CXX # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object_CXX # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds_CXX archive_expsym_cmds=$lt_archive_expsym_cmds_CXX # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds_CXX module_expsym_cmds=$lt_module_expsym_cmds_CXX # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld_CXX # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag_CXX # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag_CXX # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct_CXX # Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \${shlibpath_var} if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute_CXX # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L_CXX # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic_CXX # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath_CXX # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs_CXX # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols_CXX # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds_CXX # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms_CXX # Symbols that must always be exported. include_expsyms=$lt_include_expsyms_CXX # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds_CXX # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds_CXX # Specify filename containing input files. file_list_spec=$lt_file_list_spec_CXX # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action_CXX # The directories searched by this compiler when creating a shared library. compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX # Dependencies to place before and after the objects being linked to # create a shared library. predep_objects=$lt_predep_objects_CXX postdep_objects=$lt_postdep_objects_CXX predeps=$lt_predeps_CXX postdeps=$lt_postdeps_CXX # The library search path used internally by the compiler when linking # a shared library. compiler_lib_search_path=$lt_compiler_lib_search_path_CXX # ### END LIBTOOL TAG CONFIG: CXX _LT_EOF ;; "Doc/fixinterfaces.pl":F) chmod +x Doc/fixinterfaces.pl ;; "summary":C) cat config.thepeg ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi thepeg-1.8.0.orig/AUTHORS0000644000175000017500000000030011747772425013210 0ustar sunsunLeif Lönnblad David Grellscheid Simon Plätzer Peter Richardson thepeg-1.8.0.orig/MatrixElement/0000755000175000017500000000000011756460366014723 5ustar sunsunthepeg-1.8.0.orig/MatrixElement/MENCDIS.cc0000644000175000017500000001117311747772425016321 0ustar sunsun// -*- C++ -*- // // MENCDIS.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MENCDIS class. // #include "MENCDIS.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; MENCDIS::MENCDIS() : mZ2(ZERO) {} MENCDIS::MENCDIS(const MENCDIS & x) : ME2to2QCD(x), mZ2(x.mZ2) {} MENCDIS::~MENCDIS() {} unsigned int MENCDIS::orderInAlphaS() const { return 0; } unsigned int MENCDIS::orderInAlphaEW() const { return 2; } void MENCDIS::getDiagrams() const { tcPDPtr gamma = getParticleData(ParticleID::gamma); tcPDPtr Z0 = getParticleData(ParticleID::Z0); tcPDPtr ep = getParticleData(ParticleID::eplus); tcPDPtr em = getParticleData(ParticleID::eminus); for ( int i = -maxFlavour(); i <= maxFlavour(); ++i ) { if ( !i ) continue; tcPDPtr q = getParticleData(i); add(new_ptr((Tree2toNDiagram(3), q, gamma, em, 1, q, 2, em, -1))); add(new_ptr((Tree2toNDiagram(3), q, Z0, em, 1, q, 2, em, -2))); add(new_ptr((Tree2toNDiagram(3), q, gamma, ep, 1, q, 2, ep, -1))); add(new_ptr((Tree2toNDiagram(3), q, Z0, ep, 1, q, 2, ep, -2))); } } Energy2 MENCDIS::scale() const { return -tHat(); } double MENCDIS::me2() const { double lastG = 0.0; double lastIntr = 0.0; double lastZ = 0.0; //pq is a vector in the same direction as the quark with zero mass. Lorentz5Momentum pq = meMomenta()[0]; pq.setMass(ZERO); pq.rescaleEnergy(); double y = 1.0 - pq.dot(meMomenta()[3]) / pq.dot(meMomenta()[1]); Energy4 F2Coeff = sqr(sHat()) * (1 + sqr(1-y)); Energy4 F3Coeff = sqr(sHat()) * (1 - sqr(1-y)); double C = 16 * SM().sin2ThetaW() * ( 1.0 - SM().sin2ThetaW() ); if(mePartonData()[0]->id() < 0){ F3Coeff = -F3Coeff; } if(mePartonData()[1]->id() < 0){ F3Coeff = -F3Coeff; } if( abs(mePartonData()[0]->id())%2 == 0 ){ lastG = F2Coeff * sqr(SM().eu()) / sqr(tHat()); lastIntr = -2*SM().eu()*(F2Coeff*SM().ve()*SM().vu() + 2*F3Coeff*SM().ae()*SM().au()) / (-tHat() * (-tHat() + mZ2) * C); lastZ = ( F2Coeff * (sqr(SM().ae())+sqr(SM().ve())) * (sqr(SM().au())+sqr(SM().vu())) + 4.0 * F3Coeff*SM().ve()* SM().ae()*SM().au()*SM().vu() ) / sqr((-tHat() + mZ2) * C); } else{ lastG = F2Coeff * sqr(SM().ed()) / sqr(tHat()); lastIntr = -2*SM().ed()*(F2Coeff*SM().ve()*SM().vd() + 2*F3Coeff*SM().ae()*SM().ad()) / (-tHat() * (-tHat() + mZ2) * C); lastZ = ( F2Coeff * (sqr(SM().ae())+sqr(SM().ve())) * (sqr(SM().ad())+sqr(SM().vd())) + 4.0 * F3Coeff*SM().ve()* SM().ae()*SM().ad()*SM().vd() ) / sqr((-tHat() + mZ2) * C); } DVector save; meInfo(save << lastG << lastZ); return (lastG + lastIntr + lastZ) * sqr(SM().alphaEM(scale())) * 32.0 * sqr(Constants::pi); } Selector MENCDIS::diagrams(const DiagramVector & diags) const { if ( lastXCombPtr() ) { lastG = meInfo()[0]; lastZ = meInfo()[1]; } Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) { if ( diags[i]->id() == -1 ) sel.insert(lastG, i); else if ( diags[i]->id() == -2 ) sel.insert(lastZ, i); } return sel; } Selector MENCDIS::colourGeometries(tcDiagPtr diag) const { static ColourLines c("1 4"); static ColourLines cb("-1 -4"); Selector sel; if ( diag->partons()[0]->id() > 0 ) sel.insert(1.0, &c); else sel.insert(1.0, &cb); return sel; } IBPtr MENCDIS::clone() const { return new_ptr(*this); } IBPtr MENCDIS::fullclone() const { return new_ptr(*this); } void MENCDIS::doinit() { ME2to2QCD::doinit(); tcPDPtr Z0 = getParticleData(ParticleID::Z0); mZ2 = sqr(Z0->mass()); } void MENCDIS::persistentOutput(PersistentOStream & os) const { os << ounit(mZ2, GeV2) << lastG << lastZ; } void MENCDIS::persistentInput(PersistentIStream & is, int) { is >> iunit(mZ2, GeV2) >> lastG >> lastZ; } ClassDescription MENCDIS::initMENCDIS; void MENCDIS::Init() { static ClassDocumentation documentation ("The ThePEG::MENCDIS class implements the full" "\\f$e^\\pm q \\rightarrow e^\\pm q\\f$ " "matrix element including the interference terms."); } thepeg-1.8.0.orig/MatrixElement/DiagramBase.xh0000644000175000017500000000145511747772425017432 0ustar sunsun// -*- C++ -*- // // DiagramBase.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DiagramBase_XH #define ThePEG_DiagramBase_XH// // This is the declarations of the exception classes used by the // DiagramBase class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by DiagramBase if an object was not correctly * set up. */ struct DiagramBaseSetupException: public Exception { /** Standard constructor. */ DiagramBaseSetupException(const DiagramBase &); }; /** @endcond */ } #endif /* ThePEG_DiagramBase_XH */ thepeg-1.8.0.orig/MatrixElement/MEGG2GG.cc0000644000175000017500000000574011747772425016261 0ustar sunsun// -*- C++ -*- // // MEGG2GG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEGG2GG class. // #include "MEGG2GG.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; IBPtr MEGG2GG::clone() const { return new_ptr(*this); } IBPtr MEGG2GG::fullclone() const { return new_ptr(*this); } void MEGG2GG::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); add(new_ptr((Tree2toNDiagram(3), g, g, g, 1, g, 2, g, -1))); add(new_ptr((Tree2toNDiagram(3), g, g, g, 2, g, 1, g, -2))); add(new_ptr((Tree2toNDiagram(2), g, g, 1, g, 3, g, 3, g, -3))); } double MEGG2GG::me2() const { return 9.0*comfac()*((colA1() + colA2() + colB1() + colB2())*KfacA() + (colC1() + colC2())*Kfac())/16.0; } Selector MEGG2GG::colourGeometries(tcDiagPtr diag) const { static ColourLines ctST("1 -2 -3, 3 5, -5 2 4, -4 -1"); static ColourLines ctTS("1 4, -4 -2 5, -5 -3, 3 2 -1"); static ColourLines ctUT("1 -2 5, -5 -3, 3 2 4, -4 -1"); static ColourLines ctTU("1 4, -4 -2 -3, 3 5, -5 2 -1"); static ColourLines cuSU("1 -2 -3, 3 4, -4 2 5, -5 -1"); static ColourLines cuUS("1 5, -5 -2 4, -4 -3, 3 2 -1"); static ColourLines cuTU("1 -2 4, -4 -3, 3 2 5, -5 -1"); static ColourLines cuUT("1 5, -5 -2 -3, 3 4, -4 2 -1"); static ColourLines csTS("1 3 4, -4 5, -5 -3 -2, 2 -1"); static ColourLines csST("1 -2, 2 3 5, -5 4, -4 -3 -1"); static ColourLines csUS("1 3 5, -5 4, -4 -3 -2, 2 -1"); static ColourLines csSU("1 -2, 2 3 4, -4 5, -5 -3 -1"); Selector sel; if ( diag->id() == -1 ) { sel.insert(colA1(), &ctST); sel.insert(colA1(), &ctTS); sel.insert(colC2(), &ctUT); sel.insert(colC2(), &ctTU); } else if ( diag->id() == -2 ) { sel.insert(colB2(), &cuSU); sel.insert(colB2(), &cuUS); sel.insert(colC1(), &cuTU); sel.insert(colC1(), &cuUT); } else { sel.insert(colA2(), &csST); sel.insert(colA2(), &csTS); sel.insert(colB1(), &csSU); sel.insert(colB1(), &csUS); } return sel; } Selector MEGG2GG::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(colA1() + colC2(), i); else if ( diags[i]->id() == -2 ) sel.insert(colC1() + colB2(), i); else sel.insert(colB1() + colA2(), i); return sel; } NoPIOClassDescription MEGG2GG::initMEGG2GG; // Definition of the static class description member. void MEGG2GG::Init() { static ClassDocumentation documentation ("The ThePEG::MEGG2GG class describes the standard QCD " "\\f$gg \\rightarrow gg\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/ReweightBase.cc0000644000175000017500000000231011747772425017601 0ustar sunsun// -*- C++ -*- // // ReweightBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ReweightBase class. // #include "ReweightBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; ReweightBase::~ReweightBase() {} void ReweightBase::persistentOutput(PersistentOStream & os) const { os << theLastXComb; } void ReweightBase::persistentInput(PersistentIStream & is, int) { is >> theLastXComb; } void ReweightBase::setXComb(tXCombPtr xc) { theLastXComb = xc; } AbstractClassDescription ReweightBase::initReweightBase; // Definition of the static class description member. void ReweightBase::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::ReweightBase class"); } thepeg-1.8.0.orig/MatrixElement/ME2to2Base.cc0000644000175000017500000001514011747772425017040 0ustar sunsun// -*- C++ -*- // // ME2to2Base.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ME2to2Base class. // #include "ME2to2Base.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Cuts/Cuts.h" using namespace ThePEG; ME2to2Base::~ME2to2Base() {} Energy2 ME2to2Base::scale() const { switch ( scaleChoice() ) { case 1: return -tHat()*uHat()/(tHat() + uHat()); default: return tHat()*uHat()/sHat(); } } void ME2to2Base::setKinematics() { MEBase::setKinematics(); theLastTHat = (meMomenta()[0] - meMomenta()[2]).m2(); theLastUHat = (meMomenta()[1] - meMomenta()[2]).m2(); theLastPhi = meMomenta()[2].phi(); } bool ME2to2Base::generateKinematics(const double * r) { // generate the masses of the particles for ( int i = 2, N = meMomenta().size(); i < N; ++i ) { meMomenta()[i] = Lorentz5Momentum(mePartonData()[i]->generateMass()); } double ctmin = -1.0; double ctmax = 1.0; Energy q = ZERO; try { q = SimplePhaseSpace:: getMagnitude(sHat(), meMomenta()[2].mass(), meMomenta()[3].mass()); } catch ( ImpossibleKinematics ) { return false; } Energy e = sqrt(sHat())/2.0; Energy2 m22 = meMomenta()[2].mass2(); Energy2 m32 = meMomenta()[3].mass2(); Energy2 e0e2 = 2.0*e*sqrt(sqr(q) + m22); Energy2 e1e2 = 2.0*e*sqrt(sqr(q) + m22); Energy2 e0e3 = 2.0*e*sqrt(sqr(q) + m32); Energy2 e1e3 = 2.0*e*sqrt(sqr(q) + m32); Energy2 pq = 2.0*e*q; Energy2 thmin = lastCuts().minTij(mePartonData()[0], mePartonData()[2]); if ( thmin > ZERO ) ctmax = min(ctmax, (e0e2 - m22 - thmin)/pq); thmin = lastCuts().minTij(mePartonData()[1], mePartonData()[2]); if ( thmin > ZERO ) ctmin = max(ctmin, (thmin + m22 - e1e2)/pq); thmin = lastCuts().minTij(mePartonData()[1], mePartonData()[3]); if ( thmin > ZERO ) ctmax = min(ctmax, (e1e3 - m32 - thmin)/pq); thmin = lastCuts().minTij(mePartonData()[0], mePartonData()[3]); if ( thmin > ZERO ) ctmin = max(ctmin, (thmin + m32 - e0e3)/pq); Energy ptmin = max(lastCuts().minKT(mePartonData()[2]), lastCuts().minKT(mePartonData()[3])); if ( ptmin > ZERO ) { double ctm = 1.0 - sqr(ptmin/q); if ( ctm <= 0.0 ) return false; ctmin = max(ctmin, -sqrt(ctm)); ctmax = min(ctmax, sqrt(ctm)); } double ymin2 = lastCuts().minYStar(mePartonData()[2]); double ymax2 = lastCuts().maxYStar(mePartonData()[2]); double ymin3 = lastCuts().minYStar(mePartonData()[3]); double ymax3 = lastCuts().maxYStar(mePartonData()[3]); double ytot = lastCuts().Y() + lastCuts().currentYHat(); if ( ymin2 + ytot > -0.9*Constants::MaxRapidity ) ctmin = max(ctmin, sqrt(sqr(q) + m22)*tanh(ymin2)/q); if ( ymax2 + ytot < 0.9*Constants::MaxRapidity ) ctmax = min(ctmax, sqrt(sqr(q) + m22)*tanh(ymax2)/q); if ( ymin3 + ytot > -0.9*Constants::MaxRapidity ) ctmax = min(ctmax, sqrt(sqr(q) + m32)*tanh(-ymin3)/q); if ( ymax3 + ytot < 0.9*Constants::MaxRapidity ) ctmin = max(ctmin, sqrt(sqr(q) + m32)*tanh(-ymax3)/q); if ( ctmin >= ctmax ) return false; double cth = getCosTheta(ctmin, ctmax, r); Energy pt = q*sqrt(1.0-sqr(cth)); theLastPhi = rnd(2.0*Constants::pi); meMomenta()[2].setVect(Momentum3( pt*sin(phi()), pt*cos(phi()), q*cth)); meMomenta()[3].setVect(Momentum3(-pt*sin(phi()), -pt*cos(phi()), -q*cth)); meMomenta()[2].rescaleEnergy(); meMomenta()[3].rescaleEnergy(); vector out(2); out[0] = meMomenta()[2]; out[1] = meMomenta()[3]; tcPDVector tout(2); tout[0] = mePartonData()[2]; tout[1] = mePartonData()[3]; if ( !lastCuts().passCuts(tout, out, mePartonData()[0], mePartonData()[1]) ) return false; theLastTHat = pq*cth + m22 - e0e2; theLastUHat = m22 + m32 - sHat() - theLastTHat; jacobian((pq/sHat())*Constants::pi*jacobian()); return true; } double ME2to2Base::getCosTheta(double ctmin, double ctmax, const double * r) { double cth = 0.0; static const double eps = 1.0e-6; if ( 1.0 + ctmin <= eps && 1.0 - ctmax <= eps ) { jacobian(ctmax - ctmin); cth = ctmin + (*r)*jacobian(); } else if ( 1.0 + ctmin <= eps ) { cth = 1.0 - (1.0 - ctmax)*pow((1.0 - ctmin)/(1.0 - ctmax), *r); jacobian(log((1.0 - ctmin)/(1.0 - ctmax))*(1.0 - cth)); } else if ( 1.0 - ctmax <= eps ) { cth = -1.0 + (1.0 + ctmin)*pow((1.0 + ctmax)/(1.0 + ctmin), *r); jacobian(log((1.0 + ctmax)/(1.0 + ctmin))*(1.0 + cth)); } else { double zmin = 0.5*(1.0 - ctmax); double zmax = 0.5*(1.0 - ctmin); double A1 = -ctmin/(zmax*(1.0-zmax)); double A0 = -ctmax/(zmin*(1.0-zmin)); double A = *r*(A1 - A0) + A0; double z = A < 2.0? 2.0/(sqrt(sqr(A) + 4.0) + 2 - A): 0.5*(A - 2.0 + sqrt(sqr(A) + 4.0))/A; cth = 1.0 - 2.0*z; jacobian(2.0*(A1 - A0)*sqr(z)*sqr(1.0 - z)/(sqr(z) + sqr(1.0 - z))); } return cth; } CrossSection ME2to2Base::dSigHatDR() const { return me2()*jacobian()/(16.0*sqr(Constants::pi)*sHat())*sqr(hbarc); } void ME2to2Base::persistentOutput(PersistentOStream & os) const { os << theScaleChoice << ounit(theLastTHat, GeV2) << ounit(theLastUHat, GeV2) << theLastPhi; } void ME2to2Base::persistentInput(PersistentIStream & is, int) { is >> theScaleChoice >> iunit(theLastTHat, GeV2) >> iunit(theLastUHat, GeV2) >> theLastPhi; } AbstractClassDescription ME2to2Base::initME2to2Base; // Definition of the static class description member. Switch & ME2to2Base::interfaceScaleChoice() { static Switch dummy ("ScaleChoice", "Different options for calculating the scale of the generated " "hard sub-process.", &ME2to2Base::theScaleChoice, 0, false, false); return dummy; } void ME2to2Base::Init() { static ClassDocumentation documentation ("The ThePEG::ME2to2Base class may be used as a base class " "for all \\f$2\\rightarrow 2\\f$ matrix elements."); static SwitchOption interfaceScaleChoice0 (interfaceScaleChoice(), "that.uhat/shat", "\\f$\\hat{t}\\hat{u}/\\hat{s}\\f$", 0); static SwitchOption interfaceScaleChoice1 (interfaceScaleChoice(), "that.uhat/(that+uhat)", "\\f$-\\hat{t}\\hat{u}/(\\hat{t}+\\hat{u})\\f$", 1); } thepeg-1.8.0.orig/MatrixElement/MEQQ2GG.cc0000644000175000017500000000372511747772425016306 0ustar sunsun// -*- C++ -*- // // MEQQ2GG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEQQ2GG class. // #include "MEQQ2GG.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; IBPtr MEQQ2GG::clone() const { return new_ptr(*this); } IBPtr MEQQ2GG::fullclone() const { return new_ptr(*this); } void MEQQ2GG::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(3), q, q, qb, 1, g, 2, g, -1))); add(new_ptr((Tree2toNDiagram(3), q, q, qb, 2, g, 1, g, -2))); } } double MEQQ2GG::me2() const { return comfac()*(colA() + colB())*KfacA()*16.0/27.0; } Selector MEQQ2GG::colourGeometries(tcDiagPtr diag) const { static ColourLines ctST("1 4, -4 2 5, -5 -3"); static ColourLines ctSU("1 5, -5 2 4, -4 -3"); Selector sel; if ( diag->id() == -1 ) sel.insert(1.0, &ctST); else sel.insert(1.0, &ctSU); return sel; } Selector MEQQ2GG::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(colA(), i); else if ( diags[i]->id() == -2 ) sel.insert(colB(), i); return sel; } NoPIOClassDescription MEQQ2GG::initMEQQ2GG; // Definition of the static class description member. void MEQQ2GG::Init() { static ClassDocumentation documentation ("The ThePEG::MEQQ2GG class describes the standard QCD " "\\f$q\\bar{q} \\rightarrow gg\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/MEqq2qq1.cc0000644000175000017500000000375411747772425016615 0ustar sunsun// -*- C++ -*- // // MEqq2qq1.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEqq2qq class. // #include "MEqq2qq1.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; IBPtr MEqq2qq::clone() const { return new_ptr(*this); } IBPtr MEqq2qq::fullclone() const { return new_ptr(*this); } void MEqq2qq::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(3), q, g, qb, 1, q, 2, qb, -1))); add(new_ptr((Tree2toNDiagram(2), q, qb, 1, g, 3, q, 3, qb, -2))); } } double MEqq2qq::me2() const { return comfac()*(colA()*Kfac() + colB()*KfacA())*2.0/9.0; } Selector MEqq2qq::colourGeometries(tcDiagPtr diag) const { static ColourLines ctST("1 -2 -3, -5 2 4"); static ColourLines csST("1 3 4, -5 -3 -2"); Selector sel; if ( diag->id() == -1 ) sel.insert(1.0, &ctST); else sel.insert(1.0, &csST); return sel; } Selector MEqq2qq::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(colB(), i); else if ( diags[i]->id() == -2 ) sel.insert(colA(), i); return sel; } NoPIOClassDescription MEqq2qq::initMEqq2qq; // Definition of the static class description member. void MEqq2qq::Init() { static ClassDocumentation documentation ("The ThePEG::MEqq2qq class describes the standard QCD " "\\f$q\\bar{q} \\rightarrow q\\bar{q}\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/MEQQ2GG.h0000644000175000017500000001011011747772425016132 0ustar sunsun// -*- C++ -*- // // MEQQ2GG.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEQQ2GG_H #define ThePEG_MEQQ2GG_H // This is the declaration of the MEQQ2GG class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEQQ2GG inherits from ME2to2QCD and implements the standard * \f$q\bar{q}\rightarrow gg\f$ matrix element. * * @see \ref MEQQ2GGInterfaces "The interfaces" * defined for MEQQ2GG. * @see ME2to2QCD */ class MEQQ2GG: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return uHat()/tHat() - 2.0*sqr(uHat()/sHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB() const { return tHat()/uHat() - 2.0*sqr(tHat()/sHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEQQ2GG; /** * Private and non-existent assignment operator. */ MEQQ2GG & operator=(const MEQQ2GG &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEQQ2GG. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEQQ2GG. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEQQ2GG class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEQQ2GG"; } /** Return the name of the shared library be loaded to get * access to the MEQQ2GG class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEQQ2GG_H */ thepeg-1.8.0.orig/MatrixElement/MEGG2GG.h0000644000175000017500000001143511747772425016121 0ustar sunsun// -*- C++ -*- // // MEGG2GG.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEGG2GG_H #define ThePEG_MEGG2GG_H // This is the declaration of the MEGG2GG class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEGG2GG inherits from ME2to2QCD and implements the standard * \f$gg\rightarrow gg\f$ matrix element. * * @see \ref MEGG2GGInterfaces "The interfaces" * defined for MEGG2GG. * @see ME2to2QCD */ class MEGG2GG: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA1() const { return sqr(1.0 + sHat()/tHat()) + 0.5; } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB1() const { return sqr(1.0 + uHat()/sHat()) + 0.5; } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colC1() const { return sqr(1.0 + tHat()/uHat()) + 0.5; } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA2() const { return 0.5 + sqr(1.0 + tHat()/sHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB2() const { return 0.5 + sqr(1.0 + sHat()/uHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colC2() const { return 0.5 + sqr(1.0 + uHat()/tHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEGG2GG; /** * Private and non-existent assignment operator. */ MEGG2GG & operator=(const MEGG2GG &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEGG2GG. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEGG2GG. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEGG2GG class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEGG2GG"; } /** Return the name of the shared library be loaded to get * access to the MEGG2GG class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEGG2GG_H */ thepeg-1.8.0.orig/MatrixElement/DiagramBase.fh0000644000175000017500000000046411747772425017407 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_DiagramBase_FH #define ThePEG_DiagramBase_FH // // This is the forward declaration of the DiagramBase class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class DiagramBase; ThePEG_DECLARE_CLASS_POINTERS(DiagramBase,DiagPtr); } #endif /* ThePEG_DiagramBase_FH */ thepeg-1.8.0.orig/MatrixElement/Tree2toNDiagram.h0000644000175000017500000002235411747772425020033 0ustar sunsun// -*- C++ -*- // // Tree2toNDiagram.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Tree2toNDiagram_H #define ThePEG_Tree2toNDiagram_H // This is the declaration of the Tree2toNDiagram class. #include "ThePEG/MatrixElement/DiagramBase.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/Handlers/StandardXComb.fh" #include "Tree2toNDiagram.xh" namespace ThePEG { /** * The Tree2toNDiagram class inherits from DiagramBase and represents * a Feynman tree diagram. It is represented by a chain of \f$n\f$ * space-like propagators, where one incoming particle has index 1 and * other incoming one index \f$n\f$. For adiagram with in total * \f$m\f$ propagators the timelike propagators are then numbered * \f$n+1\f$ through \f$m\f$. The vector of type of the propagators * are accessible from the partons() method, and the parents of * propagator \f$i\f$ form the parents(int) method. The parent of a * space-like propagator is simply the previous space-like one. The * parent of a time-like propagator is either a previous time-like * propagator or the first of the connecting space-like ones. * * A Tree2toNDiagram is created by first constructing it with an * integer corresponding to the number of space-like propagators. Then * the comma operator is used to add first the particle data objects * corresponding to the space-like propagators, then the time-like * ones preceeded with the index of their parents. To complete a * Tree2toNDiagram, a negative integer is added with the comma * operator. This number is then used as an identifier. Note that the * parent must have been added before a child is. As an example, the * s-channel diagram \f$e \nu_e \rightarrow u \bar{d}\f$ is created * thus:
* Tree2toNDiagram(2),eplus,nue,1,Wplus,3,u,3,dbar.
* Similarly the t-channel diagram \f$e d \rightarrow \nu_e u\f$ is * created thus:
* Tree2toNDiagram(3),eplus,Wplus,d,1,nu,2,u. Note that * only two chidren are allowed per propagator. This means that * four-propagator vertices are not allowed, but must be represented * by two three-propagator ones. * * Please note that for technical reasons, when specifying the * diagrams with the comma operator the numbering of the particles is * \f$1\ldots m\f$, while the internal representation (in the * parent(int) and children(int) function) is using \f$0\ldots m-1\f$ * * @see DiagramBase * @see ColourLines * */ class Tree2toNDiagram: public DiagramBase { public: /** The integer type reresenting vector sizes. */ typedef cPDVector::size_type size_type; /** A multi-set of particle data objects. */ typedef multiset PDMSet; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ Tree2toNDiagram() : theNSpace(0), theNOutgoing(0), nextOrig(0) {} /** * Destructor. */ ~Tree2toNDiagram(); /** * The standard constructor giving the number of \a space-like * propagators. */ explicit Tree2toNDiagram(int space) : theNSpace(space), theNOutgoing(0), nextOrig(-1) {} //@} public: /** * If less than zero indicate that this tree is competed. Otherwise * signal the parent of the next added parton. */ Tree2toNDiagram & operator,(int o) { nextOrig = o - 1; if ( o < 0 ) check(); return *this; } /** * Add a space- or time-like parton. */ Tree2toNDiagram & operator,(PDPtr pd) { return add(pd); } /** * Add a space- or time-like parton. */ Tree2toNDiagram & operator,(cPDPtr pd) { return add(pd); } /** * Add a space- or time-like parton. */ Tree2toNDiagram & operator,(tPDPtr pd) { return add(pd); } /** * Add a space- or time-like parton. */ Tree2toNDiagram & operator,(tcPDPtr pd) { return add(pd); } /** * Construct a sub process corresponding to this diagram. The * incoming partons, and the momenta of the outgoing ones, are given * by the XComb object. All parent/children pointers should be set * correspondingly and the partons should be colour connected as * specified by the ColourLines object. */ virtual tPVector construct(SubProPtr sb, const StandardXComb &, const ColourLines &) const; /** * Return the types of the incoming partons. */ tcPDPair incoming() const; /** * Return the complete vector of partons in this tree diagram. */ const cPDVector & allPartons() const { return thePartons; } /** * Return the outgoing parton types of this tree diagram. */ tcPDVector outgoing() const; /** * Return the incoming followed by the outgoing parton types of this * tree diagram. */ tcPDVector external() const; /** * Return the index of the parent of the given parton. */ int parent(int i) const { return theParents[i]; } /** * Return the indices of the children of the given parton. */ pair children(int) const; /** * Return the number of space-like partons */ int nSpace() const { return theNSpace; } /** * Return the number of outgoing partons. */ int nOutgoing() const { return theNOutgoing; } private: /** * Check the consistency of this tree diagram. */ void check(); /** * Add a space-like parton to this diagram. */ void addSpacelike(tcPDPtr pd) { if ( thePartons.size() >= theNSpace ) throw Tree2toNDiagramError(); theParents.push_back(thePartons.size() - 1); thePartons.push_back(pd); } /** * Add a time-like parton to this diagram. */ void addTimelike(tcPDPtr); /** * Add a time-like parton to this diagram indicating its \a origin. */ void addTimelike(tcPDPtr, size_type origin); /** * Add a parton to this diagram. */ Tree2toNDiagram & add(tcPDPtr); public: /** * Compare this diagram's topology to another one. */ virtual bool isSame(tcDiagPtr) const; /** * Compare this diagram's topology to another one modulo * permutations of external legs; provide a map of this diagram's * external legs to the other diagram's external legs. */ virtual bool isSame(tcDiagPtr, map&) const; /** * Check for equality. */ bool equals(Ptr::tcptr, int start=0, int startCmp=0) const; /** * Check for equality modulo permutations of external legs. */ bool equals(Ptr::tcptr, map&, int start=0, int startCmp=0) const; /** * Merge the two external partons referred to by indices as in the * partons() vector returned by DiagramBase. If both are timelike, * the parent will become the new outgoing parton, if one is space- * and the other timelike, the spacelike child will become the new * incoming parton. Return the position of the merged parton in the * resulting diagram or -1 if the merging is not possible. In * addition, return a mapping of a certain (non-merged) external leg * id to the id in the merged diagram. */ int mergeEmission(int emitter, int id, map& remap); /** * Translate a parton's id in the diagram to a parton's id in a * vector of incoming followed by outgoing partons. */ int externalId(int id) const; /** * Translate a parton's id in a vector of incoming followed by * outgoing partons to a parton's id in the diagram. */ int diagramId(int id) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} private: /** * The number of space-like partons */ size_type theNSpace; /** * The number of outgoing partons. */ int theNOutgoing; /** * The parent of the next added parton. */ int nextOrig; /** * The complete vector of partons in this tree diagram. */ cPDVector thePartons; /** * The index of the parents. */ vector theParents; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initTree2toNDiagram; /** * Private and non-existent assignment operator. */ Tree2toNDiagram & operator=(const Tree2toNDiagram &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of Tree2toNDiagram. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of Tree2toNDiagram. */ typedef DiagramBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * Tree2toNDiagram class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::Tree2toNDiagram"; } }; /** @endcond */ } #endif /* ThePEG_Tree2toNDiagram_H */ thepeg-1.8.0.orig/MatrixElement/ME2to2Base.h0000644000175000017500000001336711747772425016713 0ustar sunsun// -*- C++ -*- // // ME2to2Base.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ME2to2Base_H #define ThePEG_ME2to2Base_H // This is the declaration of the ME2to2Base class. #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/MatrixElement/Tree2toNDiagram.h" #include "ThePEG/Interface/Switch.fh" namespace ThePEG { /** * ME2to2Base can be used as a base class for any matrix element class * implementing 2\f$\rightarrow\f$ 2 processes. It extends the MEBase * base class by implementing the virtual scale() method to return the * assumed scale of a given process according to several options. It * also caches some useful characteristics of the chosen phase space * point, such as tHat(), uHat() and the masses of the external * partons. * * @see \ref ME2to2BaseInterfaces "The interfaces" * defined for ME2to2Base. * @see MEBase */ class ME2to2Base: public MEBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ME2to2Base() : theScaleChoice(0), theLastTHat(ZERO), theLastUHat(ZERO), theLastPhi(0.0) {} /** * Destructor. */ virtual ~ME2to2Base(); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The number of internal degreed of freedom used in the matrix * element. */ virtual int nDim() const { return 1; } /** * Generate internal degrees of freedom given 'nDim()' uniform * random numbers in the interval ]0,1[. To help the phase space * generator, the 'dSigHatDR()' should be a smooth function of these * numbers, although this is not strictly necessary. Return * false if the chosen points failed the kinematical cuts. */ virtual bool generateKinematics(const double * r); /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(). Uses * me(). */ virtual CrossSection dSigHatDR() const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. */ virtual void setKinematics(); //@} /** * Used internally by generateKinematics, after calculating the * limits on cos(theta). */ virtual double getCosTheta(double cthmin, double cthmax, const double * r); /** * Give the option corresponding to the way the scale of an * interaction is calculated. */ int scaleChoice() const { return theScaleChoice; } public: /** @name Access cached values in of the last set phase space point. */ //@{ /** * Return the \f$\hat{t}\f$ of the last set phase space point. */ Energy2 tHat() const { return theLastTHat; } /** * Return the \f$\hat{u}\f$ of the last set phase space point. */ Energy2 uHat() const { return theLastUHat; } /** * Return the azimuth angle of the last set phase space point. */ double phi() const { return theLastPhi; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Set the cached values in of the last set phase space point. */ //@{ /** * Set the \f$\hat{t}\f$ of the last set phase space point. */ void tHat(Energy2 e2) { theLastTHat = e2; } /** * Set the \f$\hat{u}\f$ of the last set phase space point. */ void uHat(Energy2 e2) { theLastUHat = e2; } /** * Set the azimuth angle of the last set phase space point. */ void phi(double phi) { theLastPhi = phi; } //@} protected: /** * Access to the acutal Switch object used to determine the choice * of scale. */ static Switch & interfaceScaleChoice(); private: /** * The option indicating how to calculate the scale of an interaction. */ int theScaleChoice; /** * The \f$\hat{t}\f$ of the last set phase space point. */ Energy2 theLastTHat; /** * The \f$\hat{u}\f$ of the last set phase space point. */ Energy2 theLastUHat; /** * The azimuth angle of the last set phase space point. */ double theLastPhi; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initME2to2Base; /** * Private and non-existent assignment operator. */ ME2to2Base & operator=(const ME2to2Base &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of ME2to2Base. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of ME2to2Base. */ typedef MEBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * ME2to2Base class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::ME2to2Base"; } }; /** @endcond */ } #endif /* ThePEG_ME2to2Base_H */ thepeg-1.8.0.orig/MatrixElement/MEQQ2qq2.cc0000644000175000017500000000340211747772425016504 0ustar sunsun// -*- C++ -*- // // MEQQ2qq2.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEQQ2qq class. // #include "MEQQ2qq2.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; void MEQQ2qq::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); for ( int j = 1; j <= maxFlavour(); ++j ) { if ( i == j ) continue; tcPDPtr qp = getParticleData(j); tcPDPtr qbp = qp->CC(); add(new_ptr((Tree2toNDiagram(2), q, qb, 1, g, 3, qp, 3, qbp, -1))); } } } double MEQQ2qq::me2() const { return comfac()*colA()*KfacA()*2.0/9.0; } Selector MEQQ2qq::colourGeometries(tcDiagPtr) const { Selector sel; static ColourLines csST("1 3 4, -5 -3 -2"); sel.insert(1.0, &csST); return sel; } Selector MEQQ2qq::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(1.0, i); return sel; } NoPIOClassDescription MEQQ2qq::initMEQQ2qq; // Definition of the static class description member. void MEQQ2qq::Init() { static ClassDocumentation documentation ("The ThePEG::MEQQ2qq class describes the standard QCD " "\\f$q\\bar{q} \\rightarrow q' + \\bar{q}'\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/MEGroup.fh0000644000175000017500000000053611747772425016566 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the MEGroup class. // #ifndef ThePEG_MEGroup_FH #define ThePEG_MEGroup_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class MEGroup; ThePEG_DECLARE_POINTERS(MEGroup,MEGroupPtr); /** A vector of pointers to MEGroup objects. */ typedef vector MEGroupVector; } #endif thepeg-1.8.0.orig/MatrixElement/MEQq2Qq4.h0000644000175000017500000000766011747772425016362 0ustar sunsun// -*- C++ -*- // // MEQq2Qq4.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEQq2Qq_H #define ThePEG_MEQq2Qq_H // This is the declaration of the MEQq2Qq class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEQq2Qq inherits from ME2to2QCD and implements the standard * \f$q_iq_j\rightarrow q_iq_j\f$ mmatrix element. * * @see \ref MEQq2QqInterfaces "The interfaces" * defined for MEQq2Qq. * @see ME2to2QCD */ class MEQq2Qq: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return (sqr(uHat()) + sqr(sHat()))/sqr(tHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const { return new_ptr(*this); } /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const { return new_ptr(*this); } //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEQq2Qq; /** * Private and non-existent assignment operator. */ MEQq2Qq & operator=(const MEQq2Qq &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEQq2Qq. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEQq2Qq. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEQq2Qq class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEQq2Qq"; } /** Return the name of the shared library be loaded to get * access to the MEQq2Qq class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEQq2Qq_H */ thepeg-1.8.0.orig/MatrixElement/MEQq2Qq4.cc0000644000175000017500000000455111747772425016514 0ustar sunsun// -*- C++ -*- // // MEQq2Qq4.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEQq2Qq class. // #include "MEQq2Qq4.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; void MEQq2Qq::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); for ( int j = 1; j <= maxFlavour(); ++j ) { if ( i == j ) continue; tcPDPtr qp = getParticleData(j); tcPDPtr qbp = qp->CC(); add(new_ptr((Tree2toNDiagram(3), q, g, qp, 1, q, 2, qp, -1))); add(new_ptr((Tree2toNDiagram(3), qb, g, qp, 1, qb, 2, qp, -2))); add(new_ptr((Tree2toNDiagram(3), q, g, qbp, 1, q, 2, qbp, -3))); add(new_ptr((Tree2toNDiagram(3), qb, g, qbp, 1, qb, 2, qbp, -4))); } } } double MEQq2Qq::me2() const { return comfac()*colA()*KfacA()*2.0/9.0; } Selector MEQq2Qq::colourGeometries(tcDiagPtr diag) const { static ColourLines ctUT("1 -2 5, 3 2 4"); static ColourLines ctST("3 2 -1, -4 -2 5"); static ColourLines ctTS("1 -2 -3, -5 2 4"); static ColourLines ctTU("-4 -2 -3, -5 2 -1"); Selector sel; if ( diag->id() == -1 ) sel.insert(1.0, &ctUT); else if ( diag->id() == -2 ) sel.insert(1.0, &ctST); else if ( diag->id() == -3 ) sel.insert(1.0, &ctTS); else if ( diag->id() == -4 ) sel.insert(1.0, &ctTU); return sel; } Selector MEQq2Qq::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 || diags[i]->id() == -2 || diags[i]->id() == -3 || diags[i]->id() == -4 ) sel.insert(1.0, i); return sel; } NoPIOClassDescription MEQq2Qq::initMEQq2Qq; // Definition of the static class description member. void MEQq2Qq::Init() { static ClassDocumentation documentation ("The ThePEG::MEQq2Qq class describes the standard QCD " "\\f$qq' \\rightarrow qq'\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/MEQG2QG.cc0000644000175000017500000000547611747772425016313 0ustar sunsun// -*- C++ -*- // // MEQG2QG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEQG2QG class. // #include "MEQG2QG.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Utilities/Exception.h" using namespace ThePEG; IBPtr MEQG2QG::clone() const { return new_ptr(*this); } IBPtr MEQG2QG::fullclone() const { return new_ptr(*this); } void MEQG2QG::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = -maxFlavour(); i <= maxFlavour(); ++i ) { if ( i == 0 ) continue; tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(3), q, g, g, 1, q, 2, g, -1))); add(new_ptr((Tree2toNDiagram(3), q, q, g, 2, q, 1, g, -2))); add(new_ptr((Tree2toNDiagram(2), q, g, 1, q, 3, q, 3, g, -3))); } } double MEQG2QG::me2() const { return 2.0*comfac()*((colA1() + colA2())*KfacA() + (colB1() + colB2())*Kfac())/9.0; } Selector MEQG2QG::colourGeometries(tcDiagPtr diag) const { static ColourLines ctST("1 -2 -3, 3 5, -5 2 4"); static ColourLines ctTS("-4 -2 5, -5 -3, 3 2 -1"); static ColourLines ctUT("1 -2 5, -5 -3, 3 4"); static ColourLines ctTU("-4 -3, 3 5, -5 2 -1"); static ColourLines cuTU("1 5, -5 2 -3, 3 4"); static ColourLines cuUT("-4 -3, 3 -2 5, -1 -5"); static ColourLines csST("1 -2, 2 3 5, -5 4"); static ColourLines csTS("-4 5, -5 -3 -2, 2 -1"); Selector sel; int q = diag->partons()[0]->id(); if ( diag->id() == -1 ) { if ( q > 0 ) { sel.insert(colA1(), &ctST); sel.insert(colB1(), &ctUT); } else { sel.insert(colA1(), &ctTS); sel.insert(colB1(), &ctTU); } } else if ( diag->id() == -2 ) { if ( q > 0 ) sel.insert(1.0, &cuTU); else sel.insert(1.0, &cuUT); } else { if ( q > 0 ) sel.insert(1.0, &csST); else sel.insert(1.0, &csTS); } return sel; } Selector MEQG2QG::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(colA1() + colB1(), i); else if ( diags[i]->id() == -2 ) sel.insert(colB2(), i); else sel.insert(colA2(), i); return sel; } NoPIOClassDescription MEQG2QG::initMEQG2QG; // Definition of the static class description member. void MEQG2QG::Init() { static ClassDocumentation documentation ("The ThePEG::MEQG2QG class describes the standard QCD " "\\f$qg\\rightarrow qg\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/DiagramBase.cc0000644000175000017500000000431211747772425017373 0ustar sunsun// -*- C++ -*- // // DiagramBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DiagramBase class. // #include "DiagramBase.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/DescriptionList.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; DiagramBase::~DiagramBase() {} struct ParticleOrdering { bool operator()(tcPDPtr p1, tcPDPtr p2) { return abs(p1->id()) > abs(p2->id()) || ( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) || ( p1->id() == p2->id() && p1->fullName() > p2->fullName() ); } }; string DiagramBase::getTag() const { string tag; if ( !done() ) throw DiagramBaseSetupException(*this); for ( int i = 0; i < nIncoming(); ++i ) { if ( i ) tag += ","; tag += partons()[i]->PDGName(); } tag += "->"; multiset out; for ( int i = nIncoming(), N = partons().size(); i < N; ++i ) out.insert(partons()[i]); for ( multiset::iterator i = out.begin(); i != out.end(); ++i ) { if ( i != out.begin() ) tag += ","; tag += (**i).PDGName(); } return tag; } void DiagramBase::persistentOutput(PersistentOStream & os) const { os << theNIncoming << thePartons << theId; } void DiagramBase::persistentInput(PersistentIStream & is, int) { is >> theNIncoming >> thePartons >> theId; } AbstractClassDescription DiagramBase::initDiagramBase; // Definition of the static class description member. void DiagramBase::Init() {} DiagramBaseSetupException::DiagramBaseSetupException(const DiagramBase & db) { const ClassDescriptionBase * cd = DescriptionList::find(typeid(db)); if ( !cd ) theMessage << "Tried to use an unknown sub class of DiagramBase."; else theMessage << "The '" << cd->name() << "' sub class did not setup the DiagramBase class correctly."; severity(abortnow); } thepeg-1.8.0.orig/MatrixElement/MEQG2QG.h0000644000175000017500000001067111747772425016146 0ustar sunsun// -*- C++ -*- // // MEQG2QG.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEQG2QG_H #define ThePEG_MEQG2QG_H // This is the declaration of the MEQG2QG class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEQG2QG inherits from ME2to2QCD and implements the * standard \f$qg\rightarrow qg\f$ matrix element. * * @see \ref MEQG2QGInterfaces "The interfaces" * defined for MEQG2QG. * @see ME2to2QCD */ class MEQG2QG: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA1() const { return ( interference()? 2.25: 2.0 )*sqr(uHat()/tHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB1() const { return ( interference()? 2.25: 2.0 )*sqr(sHat()/tHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA2() const { return -uHat()/sHat(); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB2() const { return -sHat()/uHat(); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEQG2QG; /** * Private and non-existent assignment operator. */ MEQG2QG & operator=(const MEQG2QG &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEQG2QG. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEQG2QG. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEQG2QG class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEQG2QG"; } /** Return the name of the shared library be loaded to get * access to the MEQG2QG class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEQG2QG_H */ thepeg-1.8.0.orig/MatrixElement/MEQQ2QQ3.cc0000644000175000017500000000456011747772425016413 0ustar sunsun// -*- C++ -*- // // MEQQ2QQ3.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEQQ2QQ class. // #include "MEQQ2QQ3.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; IBPtr MEQQ2QQ::clone() const { return new_ptr(*this); } IBPtr MEQQ2QQ::fullclone() const { return new_ptr(*this); } void MEQQ2QQ::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(3), q, g, q, 1, q, 2, q, -1))); add(new_ptr((Tree2toNDiagram(3), q, g, q, 2, q, 1, q, -2))); add(new_ptr((Tree2toNDiagram(3), qb, g, qb, 1, qb, 2, qb, -3))); add(new_ptr((Tree2toNDiagram(3), qb, g, qb, 2, qb, 1, qb, -4))); } } double MEQQ2QQ::me2() const { return comfac()*(colA() + colB())*KfacA()/9.0; } Selector MEQQ2QQ::colourGeometries(tcDiagPtr diag) const { static ColourLines ctTU("1 -2 5, 2 3 4"); static ColourLines ctUT("-4 -3 -2, -5 2 -1"); static ColourLines cuTU("1 -2 4, 2 3 5"); static ColourLines cuUT("-5 -3 -2, -4 2 -1"); Selector sel; if ( diag->id() == -1 ) sel.insert(1.0, &ctTU); else if ( diag->id() == -2) sel.insert(1.0, &cuTU); else if ( diag->id() == -3 ) sel.insert(1.0, &ctUT); else if ( diag->id() == -4) sel.insert(1.0, &cuUT); return sel; } Selector MEQQ2QQ::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 || diags[i]->id() == -3 ) sel.insert(colA(), i); else if ( diags[i]->id() == -2 || diags[i]->id() == -4 ) sel.insert(colB(), i); return sel; } NoPIOClassDescription MEQQ2QQ::initMEQQ2QQ; // Definition of the static class description member. void MEQQ2QQ::Init() { static ClassDocumentation documentation ("The ThePEG::MEQQ2QQ class describes the standard QCD " "\\f$qq \\rightarrow qq\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/ME2to2QCD.cc0000644000175000017500000000623611747772425016603 0ustar sunsun// -*- C++ -*- // // ME2to2QCD.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ME2to2QCD class. // #include "ME2to2QCD.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; ME2to2QCD::~ME2to2QCD() {} unsigned int ME2to2QCD::orderInAlphaS() const { return 2; } unsigned int ME2to2QCD::orderInAlphaEW() const { return 0; } double ME2to2QCD::comfac() const { return 32.0*sqr(Constants::pi*SM().alphaS(scale())); } void ME2to2QCD::persistentOutput(PersistentOStream & os) const { os << theMaxFlavour << theKfac << theKfacA << useInterference; } void ME2to2QCD::persistentInput(PersistentIStream & is, int) { is >> theMaxFlavour >> theKfac >> theKfacA >> useInterference; } AbstractClassDescription ME2to2QCD::initME2to2QCD; // Definition of the static class description member. void ME2to2QCD::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::ME2to2QCD class"); static Parameter interfaceMaxFlavour ( "MaxFlavour", "The heaviest quark flavour this matrix element is allowed to handle " "(if applicable). This applies fo both incoming an outgoing partons.", &ME2to2QCD::theMaxFlavour, 5, 0, 8, false, false, true); static Parameter interfaceKfac ("K-factor", "A K-factor for artificially boosting this cross-section.", &ME2to2QCD::theKfac, 1.0, 0.0, Constants::MaxFloat, true, false, true); static Parameter interfaceKfacA ("K-factor-A", "A K-factor for artificially boosting the colour annihilation terms " "in this cross-section. If less than one, the " "K-factor will " "be used instead.", &ME2to2QCD::theKfacA, 1.0, -1.0, Constants::MaxFloat, true, false, true); static Switch interfaceUseInterfecence ("Interference", "Use of interference terms in the matrix elements. If included the terms " "are divided between the differenct possible colour configurations " "according to the pole structure of the (string-inspired) matrix " "elements for the different colour configurations.", &ME2to2QCD::useInterference, true, false, false); static SwitchOption interfaceInterferenceOff (interfaceUseInterfecence, "Excluded", "Only the parts of the matrix elements with a well-defined colour " "structure is used.", false); static SwitchOption interfaceInterferenceOn (interfaceUseInterfecence, "Included", "Use the full matrix element.", true); interfaceMaxFlavour.rank(10); } thepeg-1.8.0.orig/MatrixElement/ColourLines.xh0000644000175000017500000000154011747772425017524 0ustar sunsun// -*- C++ -*- // // ColourLines.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ColourLines_XH #define ThePEG_ColourLines_XH// // This is the declarations of the exception classes used by the // ColourLines class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by ColourLines in case of inconsistent colour * flows. */ struct ColourGeometryException: public Exception { /** Standard constructor. */ ColourGeometryException(const tPVector &, const vector > & ); }; /** @endcond */ } #endif /* ThePEG_ColourLines_XH */ thepeg-1.8.0.orig/MatrixElement/Amplitude.h0000644000175000017500000001034411747772425017024 0ustar sunsun// -*- C++ -*- // // Amplitude.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Amplitude_H #define ThePEG_Amplitude_H // This is the declaration of the Amplitude class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/EventRecord/Particle.h" namespace ThePEG { /** * The Amplitude class is the abstract base class for all the classes * representing complex amplitudes associated with either a hard * 2\f$\rightarrow\f$ N subprocess or a decay 1\f$\rightarrow\f$ N * process. The returned value should be dimensionless suitable * scaled by the total invariant mass squared (shat), which is always * computable from the specified momenta of the particles in the * vertex. Notice that the amplitude for splitting * 1\f$\rightarrow\f$ N processes is instead represented in other * classes (derived from the SplitFun class). * * @see \ref AmplitudeInterfaces "The interfaces" * defined for Amplitude. */ class Amplitude: public HandlerBase { /** @name Main virtual functions to be overridden by sub-classes. */ //@{ /** * Return the amplitude. Given the ParticleData objects in \a * particles, their \a momenta and \a helicities of all the * particles in the vertex, return the complex amplitude. The * convention is the order of the vectors is that first there is the * incoming particle(s) and then the outgoing ones. For the * helicities, the convention is to number them starting from 0 (no * negative values, because they are used as vector indeces), for * example, for a massive particle of spin S, 0 <= helicity <= 2*S. * The returned value should be dimensionless suitable scaled by the * total invariant mass squared (\f$\hat{s}\f$), which is always * computable from the specified \a momenta of the particles in the * vertex. */ virtual Complex value(const tcPDVector & particles, const vector & momenta, const vector & helicities) = 0; /** * Return an overestimated amplitude. Same as value(const tcPDVector * &, const vector &, const vector &), but it * provides an overestimate of the complex amplitude, that is: * abs( overestimaValue() ) >= abs(value()) The * default definition just returns value(), but it can be overriden * by derived classes. */ virtual Complex overestimateValue(const tcPDVector & particles, const vector & momenta, const vector & helicities); //@} /** @name Alternative interface to main virtual functions. */ //@{ /** * Return the amplitude. Calls value(const tcPDVector &, const * vector &, const vector &) and should not * be overridden. */ Complex value(const PVector & particles, const vector & helicities); /** * Return an overestimated amplitude. Calls overestimateValue(const * tcPDVector &, const vector &, const vector * &) */ Complex overestimateValue(const PVector & particles, const vector & helicities); //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initAmplitude; /** * Private and non-existent assignment operator. */ Amplitude & operator=(const Amplitude &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of Amplitude. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of Amplitude. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * Amplitude class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::Amplitude"; } }; /** @endcond */ } #endif /* ThePEG_Amplitude_H */ thepeg-1.8.0.orig/MatrixElement/MEee2gZ2qq.cc0000644000175000017500000001242211747772425017057 0ustar sunsun// -*- C++ -*- // // MEee2gZ2qq.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEee2gZ2qq class. // #include "MEee2gZ2qq.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; MEee2gZ2qq::MEee2gZ2qq() : coefs(20), mZ2(ZERO), GZ2(ZERO), lastCont(0.0), lastBW(0.0) {} unsigned int MEee2gZ2qq::orderInAlphaS() const { return 0; } unsigned int MEee2gZ2qq::orderInAlphaEW() const { return 2; } void MEee2gZ2qq::getDiagrams() const { tcPDPtr gamma = getParticleData(ParticleID::gamma); tcPDPtr Z0 = getParticleData(ParticleID::Z0); tcPDPtr ep = getParticleData(ParticleID::eplus); tcPDPtr em = getParticleData(ParticleID::eminus); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(2), em, ep, 1, gamma, 3, q, 3, qb, -1))); add(new_ptr((Tree2toNDiagram(2), em, ep, 1, Z0, 3, q, 3, qb, -2))); } } Energy2 MEee2gZ2qq::scale() const { return sHat(); } double MEee2gZ2qq::me2() const { Energy2 m2 = meMomenta()[2].mass2(); // Energy2 p1p3 = 0.5*(m2 - tHat()); // Energy2 p1p2 = 0.5*sHat(); Energy2 p1p3 = meMomenta()[0].dot(meMomenta()[2]); Energy2 p1p2 = meMomenta()[0].dot(meMomenta()[1]); Energy4 pt2 = sqr(p1p3); Energy4 pts = p1p3*p1p2; Energy4 ps2 = sqr(p1p2); Energy4 psm = p1p2*m2; int up = abs(mePartonData()[2]->id() + 1)%2; lastCont = (coefs[0 + up]*(pt2 - pts) + coefs[2 + up]*(ps2 + psm))/sqr(sHat()); double intr = 0.25*(coefs[4 + up]*pt2 + coefs[6 + up]*pts + coefs[8 + up]*ps2 + coefs[10 + up]*psm)* (sHat() - mZ2)/(sHat()*(sqr(sHat() - mZ2) + mZ2*GZ2)); lastBW = 0.25*(coefs[12 + up]*pt2 + coefs[14 + up]*pts + coefs[16 + up]*ps2 + coefs[18 + up]*psm)/ (sqr(sHat() - mZ2) + mZ2*GZ2); double alphaS = SM().alphaS(scale()); int Nf = SM().Nf(scale()); DVector save; meInfo(save << lastCont << lastBW); return (lastCont + intr + lastBW)*sqr(SM().alphaEM(scale()))* (1.0 + alphaS/Constants::pi + (1.986-0.115*Nf)*sqr(alphaS/Constants::pi)); } Selector MEee2gZ2qq::diagrams(const DiagramVector & diags) const { if ( lastXCombPtr() ) { lastCont = meInfo()[0]; lastBW = meInfo()[1]; } Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) { if ( diags[i]->id() == -1 ) sel.insert(lastCont, i); else if ( diags[i]->id() == -2 ) sel.insert(lastBW, i); } return sel; } Selector MEee2gZ2qq::colourGeometries(tcDiagPtr) const { static ColourLines c("-5 4"); Selector sel; sel.insert(1.0, &c); return sel; } IBPtr MEee2gZ2qq::clone() const { return new_ptr(*this); } IBPtr MEee2gZ2qq::fullclone() const { return new_ptr(*this); } void MEee2gZ2qq::doinit() { double C = sqr(4.0*Constants::pi)/3.0; double SW2 = SM().sin2ThetaW(); double SW4 = sqr(SW2); double SW6 = SW2*SW4; double SW8 = SW2*SW6; double CW2 = 1.0 - SW2; coefs[0] = 16.0*C; coefs[1] = 64.0*C; coefs[2] = 8.0*C; coefs[3] = 32.0*C; C /= (CW2*SW2); coefs[4] = 4.0*(32.0*SW4 - 32.0*SW2 + 6.0)*C; coefs[5] = 8.0*(64.0*SW4 - 40.0*SW2 + 6.0)*C; coefs[6] = -4.0*(32.0*SW4 - 32.0*SW2 + 12.0)*C; coefs[7] = -8.0*(64.0*SW4 - 40.0*SW2 + 12.0)*C; coefs[8] = 4.0*(16.0*SW4 - 16.0*SW2 + 6.0)*C; coefs[9] = 8.0*(32.0*SW4 - 20.0*SW2 + 6.0)*C; coefs[10] = 4.0*(16.0*SW4 - 16.0*SW2 + 3.0)*C; coefs[11] = 8.0*(32.0*SW4 - 20.0*SW2 + 3.0)*C; C /= (CW2*SW2); coefs[12] = ( 64.0*SW8 - 128.0*SW6 + 128.0*SW4 - 48.0*SW2 + 9.0)*C; coefs[13] = (256.0*SW8 - 320.0*SW6 + 200.0*SW4 - 60.0*SW2 + 9.0)*C; coefs[14] = -( 64.0*SW8 - 128.0*SW6 + 176.0*SW4 - 96.0*SW2 + 18.0)*C; coefs[15] = -(256.0*SW8 - 320.0*SW6 + 296.0*SW4 - 120.0*SW2 + 18.0)*C; coefs[16] = ( 32.0*SW8 - 64.0*SW6 + 88.0*SW4 - 48.0*SW2 + 9.0)*C; coefs[17] = (128.0*SW8 - 160.0*SW6 + 148.0*SW4 - 60.0*SW2 + 9.0)*C; coefs[18] = ( 32.0*SW8 - 64.0*SW6 + 28.0*SW4 - 6.0*SW2)*C; coefs[19] = (128.0*SW8 - 160.0*SW6 + 64.0*SW4 - 12.0*SW2)*C; tcPDPtr Z0 = getParticleData(ParticleID::Z0); mZ2 = sqr(Z0->mass()); GZ2 = sqr(Z0->width()); ME2to2QCD::doinit(); } void MEee2gZ2qq::persistentOutput(PersistentOStream & os) const { os << coefs << ounit(mZ2, GeV2) << ounit(GZ2, GeV2) << lastCont << lastBW; } void MEee2gZ2qq::persistentInput(PersistentIStream & is, int) { is >> coefs >> iunit(mZ2, GeV2) >> iunit(GZ2, GeV2) >> lastCont >> lastBW; } ClassDescription MEee2gZ2qq::initMEee2gZ2qq; void MEee2gZ2qq::Init() { static ClassDocumentation documentation ("The ThePEG::MEee2gZ2qq class implements the full" "\\f$e^+e^- \\rightarrow \\gamma/Z^0 \\rightarrow q\\bar{q}\\f$ " "matrix element including the interference terms."); } thepeg-1.8.0.orig/MatrixElement/ColourLines.cc0000644000175000017500000001067111747772425017477 0ustar sunsun// -*- C++ -*- // // ColourLines.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ColourLines class. // #include "ColourLines.h" #include "ColourLines.xh" #include "ThePEG/EventRecord/ColourLine.h" #include "ThePEG/EventRecord/MultiColour.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/StringUtils.h" using namespace ThePEG; ColourLines::ColourLines(string s) { reset(s); } void ColourLines::reset(string s) { theLines.clear(); while ( true ) { string line = StringUtils::car(s, ","); line = StringUtils::stripws(line); Line l; while (line!="") { string loc = StringUtils::car(line); string first = StringUtils::car(loc,":"); string second = StringUtils::cdr(loc,":"); if(second!="") { int i; istringstream is(first); is >> i; int j; istringstream is2(second); is2 >> j; l.push_back(make_pair(i,j)); } else { int i; istringstream is(first); is >> i; l.push_back(make_pair(i,0)); } line = StringUtils::cdr(line); }; if ( l.empty() ) return; theLines.push_back(l); s = StringUtils::cdr(s, ","); } } void ColourLines::connect(const tPVector & partons) const { VertexVector sinks; VertexVector sources; long np = partons.size(); // Create each line and connect the specified partons to them. Save // all lines coming from a source or ending in a sink. for ( LineVector::size_type il = 0; il < theLines.size(); ++il ) { const Line & line = theLines[il]; ColinePtr cline = new_ptr(ColourLine()); for ( Line::size_type i = 0; i < line.size(); ++i ) { if ( line[i].first > np ) { // this is a colour source. int is = line[i].first - np; sources.resize(is); sources[is - 1].push_back(cline); } else if ( -line[i].first > np ) { // this is a colour sink. int is = -line[i].first - np; sources.resize(is); sources[is - 1].push_back(cline); } else if ( line[i].first > 0 ) { // This is a coloured particle. if ( !partons[line[i].first - 1]->hasColour() ) throw ColourGeometryException(partons, line); if(line[i].second==0) { cline->addColoured(partons[line[i].first - 1]); } else { Ptr::pointer colour = dynamic_ptr_cast::pointer>(partons[line[i].first - 1]->colourInfo()); assert(colour); colour->colourLine(cline,line[i].second); } } else { if ( !partons[-line[i].first - 1]->hasAntiColour() ) throw ColourGeometryException(partons, line); if(line[i].second==0) { cline->addAntiColoured(partons[-line[i].first - 1]); } else { Ptr::pointer colour = dynamic_ptr_cast::pointer>(partons[-line[i].first - 1]->colourInfo()); assert(colour); colour->antiColourLine(cline,line[i].second); } } } } // Now connect up all lines steming from sources. for ( VertexVector::size_type i = 0; i < sources.size(); ++i ) { if ( sources[i].empty() ) continue; if ( sources[i].size() != 3 ) throw ColourGeometryException(partons, vector >() ); sources[i][0]->setSourceNeighbours(sources[i][1], sources[i][2]); } // Now connect up all lines ending in sinks. for ( VertexVector::size_type i = 0; i < sinks.size(); ++i ) { if ( sinks[i].empty() ) continue; if ( sinks[i].size() != 3 ) throw ColourGeometryException(partons, vector >()); sinks[i][0]->setSinkNeighbours(sinks[i][1], sinks[i][2]); } } ColourGeometryException:: ColourGeometryException(const tPVector & p, const vector > & c) { if ( c.empty() ) theMessage << "The number of colour lines steming from one colour source " << "or ending in one colour sink was not equal to three.\n"; else { theMessage << "Cannot connect the following partons:\n"; for ( unsigned i = 0; i < p.size(); ++i ) theMessage << " " << p[i]->PDGName(); theMessage << "\n to the following colour line:\n"; for ( unsigned i = 0; i < c.size(); ++i ) theMessage << " (" << c[i].first << "," << c[i].second << ") "; theMessage << endl; } severity(maybeabort); } thepeg-1.8.0.orig/MatrixElement/MEGG2QQ.cc0000644000175000017500000000372111747772425016302 0ustar sunsun// -*- C++ -*- // // MEGG2QQ.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEGG2QQ class. // #include "MEGG2QQ.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; IBPtr MEGG2QQ::clone() const { return new_ptr(*this); } IBPtr MEGG2QQ::fullclone() const { return new_ptr(*this); } void MEGG2QQ::getDiagrams() const { tcPDPtr g = getParticleData(ParticleID::g); for ( int i = 1; i <= maxFlavour(); ++i ) { tcPDPtr q = getParticleData(i); tcPDPtr qb = q->CC(); add(new_ptr((Tree2toNDiagram(3), g, q, g, 1, q, 2, qb, -1))); add(new_ptr((Tree2toNDiagram(3), g, qb, g, 2, q, 1, qb, -2))); } } double MEGG2QQ::me2() const { return comfac()*(colA() + colB())*KfacA()/12.0; } Selector MEGG2QQ::colourGeometries(tcDiagPtr diag) const { static ColourLines ctST("1 4, -5 -3, 3 2 -1"); static ColourLines cuSU("1 -2 -3, 3 4, -5 -1"); Selector sel; if ( diag->id() == -1 ) sel.insert(1.0, &ctST); else sel.insert(1.0, &cuSU); return sel; } Selector MEGG2QQ::diagrams(const DiagramVector & diags) const { Selector sel; for ( DiagramIndex i = 0; i < diags.size(); ++i ) if ( diags[i]->id() == -1 ) sel.insert(colA(), i); else if ( diags[i]->id() == -2 ) sel.insert(colB(), i); return sel; } NoPIOClassDescription MEGG2QQ::initMEGG2QQ; // Definition of the static class description member. void MEGG2QQ::Init() { static ClassDocumentation documentation ("The ThePEG::MEGG2QQ class describes the standard QCD " "\\f$gg\\rightarrow q\\bar{q}\\f$ matrix element."); } thepeg-1.8.0.orig/MatrixElement/MEee2gZ2qq.h0000644000175000017500000001310411747772425016717 0ustar sunsun// -*- C++ -*- // // MEee2gZ2qq.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEee2gZ2qq_H #define ThePEG_MEee2gZ2qq_H // This is the declaration of the MEee2gZ2qq class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * The MEee2gZ2qq class implements the * \f$e^+e^-\rightarrow\gamma/Z^0\rightarrow q\bar{q}\f$ matrix * element. Both the continuum and \f$Z^0\f$ pole term as well as the * interference term is included. Although not a strict QCD matrix * element the class inherits from ME2to2QCD, mainly to inherit the * parameter for the number of active quark flavours. * * @see \ref MEee2gZ2qqInterfaces "The interfaces" * defined for MEee2gZ2qq. * @see ME2to2QCD */ class MEee2gZ2qq: public ME2to2QCD { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MEee2gZ2qq(); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix element * is given. Returns . */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EM}\f$ in which this matrix * element is given. Returns 2. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} protected: /** * Constants for the different terms set from the StandardModel in * the init() function. */ vector coefs; /** * The squared mass of the Z0. */ Energy2 mZ2; /** * The squared width of the Z0. */ Energy2 GZ2; /** * The last continuum term to be used to select primary diagram. */ mutable double lastCont; /** * The last Breit-Wigner term to be used to select primary diagram. */ mutable double lastBW; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initMEee2gZ2qq; /** * Private and non-existent assignment operator. */ MEee2gZ2qq & operator=(const MEee2gZ2qq &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEee2gZ2qq. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEee2gZ2qq. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of the * MEee2gZ2qq class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEee2gZ2qq"; } /** Return the name of the shared library be loaded to get * access to the MEee2gZ2qq class and every other class it uses * (except the base class). */ static string library() { return "MEee2gZ2qq.so"; } }; /** @endcond */ } #endif /* ThePEG_MEee2gZ2qq_H */ thepeg-1.8.0.orig/MatrixElement/MEGroup.cc0000644000175000017500000001503411747772425016555 0ustar sunsun// -*- C++ -*- // // MEGroup.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEGroup class. // #include "MEGroup.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/PDF/PartonBin.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/StdDependentXComb.h" #include "ThePEG/Handlers/StdXCombGroup.h" using namespace ThePEG; MEGroup::MEGroup() : theDependent(), theNDimMap(), theNDim(0) {} MEGroup::~MEGroup() {} void MEGroup::doinit() { MEBase::doinit(); head()->init(); use(head()); theNDim = head()->nDim(); if (!uniformAdditional()) { int off = theNDim; for ( MEVector::iterator me = theDependent.begin(); me != theDependent.end(); ++me ) if ( (**me).nDim() > head()->nDim() ) { theNDimMap[*me] = off; off += ((**me).nDim() - head()->nDim()); theNDim += ((**me).nDim() - head()->nDim()); } } else { int maxadd = 0; for ( MEVector::iterator me = theDependent.begin(); me != theDependent.end(); ++me ) if ( (**me).nDim() - head()->nDim() > maxadd ) { maxadd = ((**me).nDim() - head()->nDim()); } theNDim += maxadd; } if ( mcSumDependent() ) theNDim += 1; } void MEGroup::rebind(const TranslationMap & trans) { map rebound; for (map::iterator it = theNDimMap.begin(); it != theNDimMap.end(); ++it) { rebound.insert(make_pair(trans.translate(it->first),it->second)); } theNDimMap = rebound; MEBase::rebind(trans); } IVector MEGroup::getReferences() { IVector ret = MEBase::getReferences(); for (map::iterator it = theNDimMap.begin(); it != theNDimMap.end(); ++it) ret.push_back(it->first); return ret; } int MEGroup::dependentOffset(tMEPtr dep) const { if ( uniformAdditional() ) return head()->nDim(); map::const_iterator it = theNDimMap.find(dep); if (it == theNDimMap.end()) return 0; return it->second; } StdDependentXCombPtr MEGroup::makeDependentXComb (tStdXCombPtr xcHead, const cPDVector& proc, tMEPtr depME, const PartonPairVec& pbs) const { MEBase::DiagramVector depDiags = dependentDiagrams(proc,depME); if ( depDiags.empty() ) return StdDependentXCombPtr(); PartonPairVec::const_iterator ppit = pbs.begin(); for ( ; ppit != pbs.end(); ++ppit ) { if ( ppit->first->parton() == depDiags.front()->partons()[0] && ppit->second->parton() == depDiags.front()->partons()[1] ) break; } if ( ppit == pbs.end() ) { generator()->logWarning( Exception() << "Could not create a dependent XComb object" << " for the MEGroup '" << name() << "' since the dependent matrix element '" << depME->name() << "' did not match any of the incoming partons." << Exception::warning); return StdDependentXCombPtr(); } StdDependentXCombPtr ret = new_ptr(StdDependentXComb(xcHead,*ppit,depME,depDiags)); return ret; } bool MEGroup::generateKinematics(const double * r) { if (!head()->generateKinematics(r)) return false; MEVector::const_iterator me = dependent().begin(); tStdXCombGroupPtr xcgroup = dynamic_ptr_cast(lastXCombPtr()); StdDepXCVector::const_iterator depxc = xcgroup->dependent().begin(); assert(xcgroup); if ( !mcSumDependent() ) { for ( ; depxc != xcgroup->dependent().end(); ++depxc, ++me ) { if ( !(*depxc) ) continue; if ( !(**depxc).matrixElement()->apply() ) continue; (**depxc).remakeIncoming(); (**me).generateKinematics(r + dependentOffset(*me)); } } else { size_t i = size_t(r[nDim()-1]*dependent().size()); if ( !xcgroup->dependent()[i] ) return false; if ( !xcgroup->dependent()[i]->matrixElement()->apply() ) return false; xcgroup->dependent()[i]->remakeIncoming(); lastDependentXComb(xcgroup->dependent()[i]); dependent()[i]->generateKinematics(r + dependentOffset(dependent()[i])); } return true; } void MEGroup::flushCaches() { head()->flushCaches(); for ( MEVector::const_iterator dep = dependent().begin(); dep != dependent().end(); ++dep ) (**dep).flushCaches(); } void MEGroup::setXComb(tStdXCombPtr xc) { MEBase::setXComb(xc); head()->setXComb(xc); tStdXCombGroupPtr xcgroup = dynamic_ptr_cast(xc); if ( !xcgroup ) return; MEVector::const_iterator depme = dependent().begin(); StdDepXCVector::const_iterator depxc = xcgroup->dependent().begin(); for ( ; depxc != xcgroup->dependent().end(); ++depxc, ++depme ) { if ( !(*depxc) ) continue; (**depme).setXComb(*depxc); } } void MEGroup::setKinematics() { MEBase::setKinematics(); head()->setKinematics(); for ( MEVector::iterator me = theDependent.begin(); me != theDependent.end(); ++me ) { if ( (**me).apply() && (**me).lastXCombPtr() ) (**me).setKinematics(); } } void MEGroup::clearKinematics() { MEBase::clearKinematics(); head()->clearKinematics(); for ( MEVector::iterator me = theDependent.begin(); me != theDependent.end(); ++me ) (**me).clearKinematics(); } void MEGroup::persistentOutput(PersistentOStream & os) const { os << theHead << theDependent << theNDimMap << theNDim; } void MEGroup::persistentInput(PersistentIStream & is, int) { is >> theHead >> theDependent >> theNDimMap >> theNDim; } AbstractClassDescription MEGroup::initMEGroup; // Definition of the static class description member. void MEGroup::Init() { static ClassDocumentation documentation ("The ThePEG::MEGroup class is the base class for all matrix elements " "to be used for generating sub process groups in ThePEG"); static Reference interfaceHead ("Head", "The head matrix element for this matrix element group.", &MEGroup::theHead, false, false, true, false, false); static RefVector interfaceDependent ("Dependent", "The vector of dependent matrix elements in this matrix element group.", &MEGroup::theDependent, -1, false, false, true, false, false); } thepeg-1.8.0.orig/MatrixElement/MEQQ2qq2.h0000644000175000017500000000766511747772425016365 0ustar sunsun// -*- C++ -*- // // MEQQ2qq2.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEQQ2qq_H #define ThePEG_MEQQ2qq_H // This is the declaration of the MEQQ2qq class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEQQ2qq inherits from ME2to2QCD and implements the standard * \f$q\bar{q}\rightarrow q'\bar{q'}\f$ matrix element. * * @see \ref MEQQ2qqInterfaces "The interfaces" * defined for MEQQ2qq. * @see ME2to2QCD */ class MEQQ2qq: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return (sqr(uHat()) + sqr(tHat()))/sqr(sHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const { return new_ptr(*this); } /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const { return new_ptr(*this); } //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEQQ2qq; /** * Private and non-existent assignment operator. */ MEQQ2qq & operator=(const MEQQ2qq &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEQQ2qq. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEQQ2qq. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEQQ2qq class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEQQ2qq"; } /** Return the name of the shared library be loaded to get * access to the MEQQ2qq class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEQQ2qq_H */ thepeg-1.8.0.orig/MatrixElement/MEBase.fh0000644000175000017500000000051111747772425016335 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the MEBase class. // #ifndef ThePEG_MEBase_FH #define ThePEG_MEBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class MEBase; ThePEG_DECLARE_POINTERS(MEBase,MEPtr); /** A vector of pointers to MEBase objects. */ typedef vector MEVector; } #endif thepeg-1.8.0.orig/MatrixElement/ColourLines.h0000644000175000017500000000477111747772425017345 0ustar sunsun// -*- C++ -*- // // ColourLines.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ColourLines_H #define ThePEG_ColourLines_H // This is the declaration of the ColourLines class. #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * The ColourLines class defines the colour flow in a SubProcess. It * defines a number of colour lines and specifies which particles are * connected to them. * */ class ColourLines: public Base { public: /** A single colour line */ typedef vector > Line; /** A vector of colour lines. */ typedef vector LineVector; /** A vector of ColourLine. */ typedef vector Vertex; /** A vector of vertices. */ typedef vector VertexVector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ColourLines() {} /** * The standard constructor. The string \a s should contain a * comma-separated sequence of integers. Each sequence of numbers * indicates a colour line and the integer represents a parton * connected to it. If the integer is negative, it means that the * line is the corresponding partons anti-colour. Note that the * partons are numbered from 1: The first spacelike particle is 1, the second * is 2 and the internal time-like and outgoing are numbered after all * the spacelike particles. */ ColourLines(string s); //@} /** * Reset this ColourLines object. The string \a s should contain a * comma-separated sequence of integers. Each sequence of numbers * indicates a colour line and the integer represents a parton * connected to it. If the integer is negative, it means that the * line is the corresponding partons anti-colour. Note that the * partons are numbered from 1: The first incoming is 1, the second * is 2 and the internal and outgoing are numbered 3 and upwards. */ void reset(string s); public: /** * Create the corresponding ColourLines and connect the * given \a partons. The partons are assumed to be in the same order * as the numbers specified in the constructor. */ void connect(const tPVector & partons) const; private: /** * The vector of colour lines. */ LineVector theLines; }; } #endif /* ThePEG_ColourLines_H */ thepeg-1.8.0.orig/MatrixElement/Amplitude.cc0000644000175000017500000000366111747772425017166 0ustar sunsun// -*- C++ -*- // // Amplitude.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Amplitude class. // #include "Amplitude.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; AbstractNoPIOClassDescription Amplitude::initAmplitude; // Definition of the static class description member. void Amplitude::Init() { static ClassDocumentation documentation ("This the abstract class from which any amplitude class, associated with ", "a vertex inherits from."); } Complex Amplitude::overestimateValue( const tcPDVector & particles, const vector & momenta, const vector & helicities ) { return value(particles,momenta,helicities); } Complex Amplitude::value( const PVector & particles, const vector & helicities ) { tcPDVector dataParticles; vector momenta; for ( PVector::const_iterator cit = particles.begin(); cit != particles.end(); ++cit ) { dataParticles.push_back( (*cit)->dataPtr() ); momenta.push_back( (*cit)->momentum() ); } return value(dataParticles,momenta,helicities); } Complex Amplitude::overestimateValue( const PVector & particles, const vector & helicities ) { tcPDVector dataParticles; vector momenta; for ( PVector::const_iterator cit = particles.begin(); cit != particles.end(); ++cit ) { dataParticles.push_back( (*cit)->dataPtr() ); momenta.push_back( (*cit)->momentum() ); } return overestimateValue(dataParticles,momenta,helicities); } thepeg-1.8.0.orig/MatrixElement/MENCDIS.h0000644000175000017500000001266111747772425016166 0ustar sunsun// -*- C++ -*- // // MENCDIS.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MENCDIS_H #define ThePEG_MENCDIS_H // This is the declaration of the MENCDIS class. #include "ThePEG/MatrixElement/ME2to2QCD.h" // #include "MENCDIS.fh" // #include "MENCDIS.xh" namespace ThePEG { /** * The MENCDIS class implements the \f$e^\pm q\rightarrow e^\pm q\f$ * matrix element. Both the gamma and \f$Z^0\f$ terms as well * as the interference term is included. Although not a strict QCD * matrix element the class inherits from ME2to2QCD, mainly to inherit * the parameter for the number of active quark flavours. * * @see \ref MENCDISInterfaces "The interfaces" * defined for MENCDIS. * @see ME2to2QCD */ class MENCDIS: public ME2to2QCD { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MENCDIS(); /** * Copy-constructor. */ MENCDIS(const MENCDIS &); /** * Destructor. */ virtual ~MENCDIS(); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix element * is given. Returns . */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EM}\f$ in which this matrix * element is given. Returns 2. */ virtual unsigned int orderInAlphaEW() const; /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; /** * Return the scale associated with the last set phase space point. */ virtual Energy2 scale() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} protected: /** * The squared mass of the Z0. */ Energy2 mZ2; /** * The last gamma term to be used to select primary diagram. */ mutable double lastG; /** * The last Z0 term to be used to select primary diagram. */ mutable double lastZ; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initMENCDIS; /** * Private and non-existent assignment operator. */ MENCDIS & operator=(const MENCDIS &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MENCDIS. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MENCDIS. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of the * MENCDIS class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MENCDIS"; } /** Return the name of the shared library be loaded to get * access to the MENCDIS class and every other class it uses * (except the base class). */ static string library() { return "MENCDIS.so"; } }; /** @endcond */ } #endif /* ThePEG_MENCDIS_H */ thepeg-1.8.0.orig/MatrixElement/Tree2toNDiagram.xh0000644000175000017500000000143011747772425020213 0ustar sunsun// -*- C++ -*- // // Tree2toNDiagram.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Tree2toNDiagram_XH #define ThePEG_Tree2toNDiagram_XH // // This is the declarations of the exception classes used by the // Tree2toNDiagram class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by Tree2toNDiagram to signal inconsistencies. */ struct Tree2toNDiagramError: public Exception { /** Default constructor. */ Tree2toNDiagramError(); }; /** @endcond */ } #endif /* ThePEG_Tree2toNDiagram_XH */ thepeg-1.8.0.orig/MatrixElement/ReweightMinPT.cc0000644000175000017500000000430211747772425017721 0ustar sunsun// -*- C++ -*- // // ReweightMinPT.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ReweightMinPT class. // #include "ReweightMinPT.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr ReweightMinPT::clone() const { return new_ptr(*this); } IBPtr ReweightMinPT::fullclone() const { return new_ptr(*this); } double ReweightMinPT::weight() const { Energy minPt = Constants::MaxEnergy; for ( int i = 0, N = subProcess()->outgoing().size(); i < N; ++i ) minPt = min(minPt, subProcess()->outgoing()[i]->momentum().perp()); return pow(minPt/scale, power); } void ReweightMinPT::persistentOutput(PersistentOStream & os) const { os << power << ounit(scale,GeV); } void ReweightMinPT::persistentInput(PersistentIStream & is, int) { is >> power >> iunit(scale,GeV); } ClassDescription ReweightMinPT::initReweightMinPT; // Definition of the static class description member. void ReweightMinPT::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::ReweightMinPT class"); static Parameter interfacePower ("Power", "The power to which the minimum tranverse momentum (divided by a " "Scale) is raised to give the weight.", &ReweightMinPT::power, 4.0, -10.0, 10.0, false, false, true); static Parameter interfaceScale ("Scale", "The scale with which the minimum transverse momentum is divided " "befor it is raised to a Power to give the " "weight..", &ReweightMinPT::scale, GeV, 50.0*GeV, ZERO, ZERO, false, false, Interface::lowerlim); interfacePower.rank(10); interfaceScale.rank(9); } thepeg-1.8.0.orig/MatrixElement/ReweightMinPT.h0000644000175000017500000000652211747772425017571 0ustar sunsun// -*- C++ -*- // // ReweightMinPT.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ReweightMinPT_H #define ThePEG_ReweightMinPT_H // This is the declaration of the ReweightMinPT class. #include "ThePEG/MatrixElement/ReweightBase.h" namespace ThePEG { /** * The ReweightMinPT class reweights matrix elements with the minimum * of the transverse momenta of the outgoing partons to some power. * * @see ReweightBase * */ class ReweightMinPT: public ReweightBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ReweightMinPT() : power(4.0), scale(50.0*GeV) {} //@} public: /** * Return the wieght for the kinematical configuation provided by * the assigned XComb object (in the LastXCombInfo base class). */ virtual double weight() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The weight is the minimum pt/scale to a \a power. */ double power; /** * The weight is the minimum pt/\a scale to a power. */ Energy scale; private: /** * Describe a concrete base class with persistent data. */ static ClassDescription initReweightMinPT; /** * Private and non-existent assignment operator. */ ReweightMinPT & operator=(const ReweightMinPT &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of ReweightMinPT. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ReweightMinPT. */ typedef ReweightBase NthBase; }; /** This template specialization informs ThePEG about the name of * the ReweightMinPT class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ReweightMinPT"; } /** Return the name of the shared library be loaded to get * access to the ReweightMinPT class and every other class it uses * (except the base class). */ static string library() { return "ReweightMinPT.so"; } }; /** @endcond */ } #endif /* ThePEG_ReweightMinPT_H */ thepeg-1.8.0.orig/MatrixElement/MEQQ2QQ3.h0000644000175000017500000001017511747772425016254 0ustar sunsun// -*- C++ -*- // // MEQQ2QQ3.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEQQ2QQ_H #define ThePEG_MEQQ2QQ_H // This is the declaration of the MEQQ2QQ class. #include "ThePEG/MatrixElement/ME2to2QCD.h" // #include "MEQQ2QQ.fh" // #include "MEQQ2QQ.xh" namespace ThePEG { /** * MEQQ2QQ inherits from ME2to2QCD and implements the standard * \f$q_iq_i\rightarrow q_iq_i\f$ matrix element. * * @see \ref MEQQ2QQInterfaces "The interfaces" * defined for MEQQ2QQ. * @see ME2to2QCD */ class MEQQ2QQ: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return (sqr(uHat()) + sqr(sHat()))/sqr(tHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB() const { return (sqr(tHat()) + sqr(sHat()))/sqr(uHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEQQ2QQ; /** * Private and non-existent assignment operator. */ MEQQ2QQ & operator=(const MEQQ2QQ &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEQQ2QQ. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEQQ2QQ. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEQQ2QQ class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEQQ2QQ"; } /** Return the name of the shared library be loaded to get * access to the MEQQ2QQ class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEQQ2QQ_H */ thepeg-1.8.0.orig/MatrixElement/MEqq2qq1.h0000644000175000017500000001035311754440767016447 0ustar sunsun// -*- C++ -*- // // MEqq2qq1.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEqq2qq_H #define ThePEG_MEqq2qq_H // This is the declaration of the MEqq2qq class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEqq2qq inherits from the ME2to2QCD and implements the standard * \f$q_i\bar{q}_i\rightarrow q_i\bar{q}_i\f$ matrix element. * * @see \ref MEqq2qqInterfaces "The interfaces" * defined for MEqq2qq. * @see ME2to2QCD */ class MEqq2qq: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return (sqr(tHat()) + sqr(uHat()))/sqr(sHat()) + (interference()? -double(sqr(uHat())/(3.0*sHat()*tHat())): 0.0); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB() const { return (sqr(uHat()) + sqr(sHat()))/sqr(tHat()) + (interference()? -double(sqr(uHat())/(3.0*sHat()*tHat())): 0.0); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEqq2qq; /** * Private and non-existent assignment operator. */ MEqq2qq & operator=(const MEqq2qq &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEqq2qq. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEqq2qq. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEqq2qq class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEqq2qq"; } /** Return the name of the shared library be loaded to get * access to the MEqq2qq class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEqq2qq_H */ thepeg-1.8.0.orig/MatrixElement/Tree2toNDiagram.cc0000644000175000017500000002736711747772425020202 0ustar sunsun// -*- C++ -*- // // Tree2toNDiagram.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Tree2toNDiagram class. // #include "Tree2toNDiagram.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; Tree2toNDiagram::~Tree2toNDiagram() {} Tree2toNDiagram & Tree2toNDiagram::add(tcPDPtr pd) { if ( thePartons.size() < theNSpace ) addSpacelike(pd); else addTimelike(pd, nextOrig); return *this; } void Tree2toNDiagram::addTimelike(tcPDPtr pd, size_type orig) { if ( allPartons().size() < theNSpace || orig >= allPartons().size()) throw Tree2toNDiagramError(); thePartons.push_back(pd); theParents.push_back(orig); } tPVector Tree2toNDiagram:: construct(SubProPtr sp, const StandardXComb & xc, const ColourLines & cl) const { tPVector out; vector pout(xc.meMomenta().begin() + 2, xc.meMomenta().end()); // Utilities::transform(pout.begin(), pout.end(), // Utilities::getBoostFromCM(xc.lastPartons())); tPPair in = xc.lastPartons(); if ( xc.mirror() ) swap(in.first, in.second); tPVector ret; if ( in.first->dataPtr() != allPartons()[0] || in.second->dataPtr() != allPartons()[nSpace() - 1] ) throw Tree2toNDiagramError(); PVector slike; slike.push_back(in.first); for ( int i = 1; i < nSpace() - 1; ++i ) slike.push_back(allPartons()[i]->produceParticle()); slike.push_back(in.second); ret = tPVector(slike.begin(), slike.end()); for ( size_type i = 1; i < slike.size() - 1; ++i ) { slike[i-1]->addChild(slike[i]); sp->addIntermediate(slike[xc.mirror()? i: slike.size() - 1 - i], false); } int io = pout.size(); PVector tlike(allPartons().size() - nSpace()); ParticleSet done; for ( int i = allPartons().size() - 1; i >= nSpace(); --i ) { int it = i - nSpace(); pair ch = children(i); bool iso = ch.first < 0; if ( iso ) { tlike[it] = allPartons()[i]->produceParticle(pout[--io]); done.insert(tlike[it]); } else { Lorentz5Momentum p = tlike[ch.first - nSpace()]->momentum() + tlike[ch.second - nSpace()]->momentum(); tlike[it] = allPartons()[i]->produceParticle(p); } if ( parent(i) < nSpace() ) { slike[parent(i)]->addChild(tlike[it]); if ( parent(i) == nSpace() - 2 ) slike[parent(i) + 1]->addChild(tlike[it]); } if ( !iso ) { tlike[it]->addChild(tlike[ch.first - nSpace()]); tlike[it]->addChild(tlike[ch.second - nSpace()]); } if ( iso ) out.push_back(tlike[it]); else sp->addIntermediate(tlike[it], false); } ret.insert(ret.end(), tlike.begin(), tlike.end()); for ( int i = 0, N = out.size(); i < N; ++i ) sp->addOutgoing(out[xc.mirror()? i: out.size() - i - 1], false); for ( PVector::size_type i = 0; i < slike.size() - 2; ++i ) { pair ch = children(i); slike[ch.first]->set5Momentum(slike[i]->momentum() - tlike[ch.second - nSpace()]->momentum()); } cl.connect(ret); return out; } tcPDVector Tree2toNDiagram::outgoing() const { tcPDVector pdv; for ( size_type i = nSpace(); i < allPartons().size(); ++i ) if ( children(i).first < 0 ) pdv.push_back(allPartons()[i]); return pdv; } tcPDVector Tree2toNDiagram::external() const { tcPDVector pdv; pdv.push_back(allPartons()[0]); pdv.push_back(allPartons()[nSpace() - 1]); for ( size_type i = nSpace(); i < allPartons().size(); ++i ) if ( children(i).first < 0 ) pdv.push_back(allPartons()[i]); return pdv; } tcPDPair Tree2toNDiagram::incoming() const { return tcPDPair(allPartons()[0], allPartons()[nSpace() - 1]); } pair Tree2toNDiagram::children(int ii) const { pair ret = make_pair(-1, -1); for ( size_type i = 0; i < theParents.size(); ++i ) { if ( parent(i) == ii ) { if ( ret.first < 0 ) ret.first = i; else if ( ret.second < 0 ) ret.second = i; else throw Tree2toNDiagramError(); } } return ret; } void Tree2toNDiagram::check() { vector< pair > children(allPartons().size(), make_pair(-1, -1)); theNOutgoing = 0; for ( size_type i = nSpace(); i < allPartons().size(); ++i ) { if ( children[parent(i)].first < 0 ) children[parent(i)].first = i; else if ( children[parent(i)].second < 0 ) children[parent(i)].second = i; else throw Tree2toNDiagramError(); } for ( size_type i = nSpace(); i < allPartons().size(); ++i ) { if ( children[i].first < 0 && children[i].second < 0 ) ++theNOutgoing; else if ( children[i].first < 0 || children[i].second < 0 ) throw Tree2toNDiagramError(); } cPDVector parts(2); parts[0] = incoming().first; parts[1] = incoming().second; tcPDVector out(outgoing()); parts.insert(parts.end(), out.begin(), out.end()); partons(2, parts, nextOrig + 1); } bool Tree2toNDiagram::isSame (tcDiagPtr diag) const { Ptr::tcptr cmp = dynamic_ptr_cast::tcptr>( diag ); if ( !cmp ) return false; return equals(cmp) && external() == cmp->external(); } bool Tree2toNDiagram::isSame (tcDiagPtr diag, map& remap) const { Ptr::tcptr cmp = dynamic_ptr_cast::tcptr>( diag ); if ( !cmp ) return false; remap.clear(); remap[0] = 0; return equals(cmp,remap); } bool Tree2toNDiagram::equals(Ptr::tcptr diag, int start, int startCmp) const { if ( start < 0 && startCmp < 0 ) return true; if ( allPartons()[start] != diag->allPartons()[startCmp] ) return false; pair ch = children(start); pair chCmp = diag->children(startCmp); return equals(diag,ch.first,chCmp.first) && equals(diag,ch.second,chCmp.second); } bool Tree2toNDiagram::equals(Ptr::tcptr diag, map& remap, int start, int startCmp) const { if ( start < 0 && startCmp < 0 ) return true; if ( allPartons()[start] != diag->allPartons()[startCmp] ) return false; pair ch = children(start); pair chCmp = diag->children(startCmp); if ( ch.first < 0 && chCmp.first < 0 ) { remap[externalId(start)] = diag->externalId(startCmp); } return equals(diag,remap,ch.first,chCmp.first) && equals(diag,remap,ch.second,chCmp.second); } int Tree2toNDiagram::externalId(int id) const { if ( id < 0 ) return -1; if ( id == 0 ) return 0; if ( id == nSpace() - 1 ) return 1; int k = 1; for ( size_type i = nSpace(); i < allPartons().size(); ++i ) { if ( children(i).first < 0 ) ++k; if ( i == size_type(id) ) break; } return k; } int Tree2toNDiagram::diagramId(int id) const { if ( id < 0 ) return -1; if ( id == 0 ) return 0; if ( id == 1 ) return nSpace() - 1; int k = 1; size_type i = nSpace(); for ( ; i < allPartons().size(); ++i ) { if ( children(i).first < 0 ) ++k; if ( k == id ) break; } return i; } int Tree2toNDiagram::mergeEmission(int emitter, int id, map& remap) { if ( id < 2 ) return -1; if ( remap.find(emitter) != remap.end() ) { remap.erase(emitter); } if ( remap.find(id) != remap.end() ) { remap.erase(id); } for ( map::iterator rm = remap.begin(); rm != remap.end(); ++rm ) { if ( rm->first == 0 || rm->first == 1 ) { rm->second = rm->first; } else { rm->second = diagramId(rm->first); } } // translate to diagram id int did = diagramId(id); int demitter = diagramId(emitter); if ( children(did) != make_pair(-1,-1) ) return -1; // now get the parent int p = parent(did); int npos = -1; if ( p == 0 || p == nSpace() - 2 ) { npos = ( p == 0 ? 0 : 1 ); } else if ( p >= nSpace() ) { if ( id > emitter ) npos = emitter; else npos = emitter - 1; } pair remove; size_type theNSpaceBackup = theNSpace; int theNOutgoingBackup = theNOutgoing; int nextOrigBackup = nextOrig; cPDVector thePartonsBackup = thePartons; vector theParentsBackup = theParents; int deltaFlow = 0; if ( npos == 1 ) { if ( thePartons[did]->CC() ) deltaFlow -= ( thePartons[did]->id() < 0 ? -1 : 1 ); if ( thePartons[nSpace()-1]->CC() ) deltaFlow += ( thePartons[nSpace()-1]->id() < 0 ? -1 : 1 ); } // emitted from spacelike if ( p == 0 || p == nSpace() - 2 ) { if ( p == 0 && p != demitter ) return -1; if ( p == nSpace() - 2 && demitter != nSpace()-1 ) return -1; if ( p == 0 ) remove = make_pair(p,did); else remove = make_pair(nSpace()-1,did); --theNSpace; --theNOutgoing; } else if ( p >= nSpace() ) { remove = children(p); if ( remove.first != demitter ) swap(remove.first,remove.second); if ( remove != make_pair(demitter,did) ) return -1; --theNOutgoing; } else { return -1; } if ( remove.first > remove.second ) swap(remove.first,remove.second); for ( map::iterator rm = remap.begin(); rm != remap.end(); ++rm ) { if ( rm->first > 1 ) { if ( rm->second > remove.first && rm->second < remove.second ) rm->second -= 1; else if ( rm->second > remove.second ) rm->second -= 2; } } for ( unsigned int k = remove.first + 1; k < theParents.size(); ++k ) { if ( theParents[k] >= remove.first && theParents[k] < remove.second && theParents[k] >= 0 ) theParents[k] -= 1; else if ( theParents[k] > remove.second && theParents[k] > 0 ) theParents[k] -= 2; } thePartons.erase(thePartons.begin() + remove.second); theParents.erase(theParents.begin() + remove.second); thePartons.erase(thePartons.begin() + remove.first); theParents.erase(theParents.begin() + remove.first); if ( npos > 1 ) if ( npos != externalId(p) ) { pair swapDiagIds(p,diagramId(npos)); swap(thePartons[swapDiagIds.first],thePartons[swapDiagIds.second]); swap(theParents[swapDiagIds.first],theParents[swapDiagIds.second]); for ( map::iterator rm = remap.begin(); rm != remap.end(); ++rm ) { if ( rm->first > 1 ) { if ( rm->second == swapDiagIds.first ) { rm->second = swapDiagIds.second; } else if ( rm->second == swapDiagIds.second ) { rm->second = swapDiagIds.first; } } } } for ( map::iterator rm = remap.begin(); rm != remap.end(); ++rm ) { if ( rm->first > 1 ) { rm->second = externalId(rm->second); } } if ( npos == 1 ) { if ( thePartons[nSpace()-1]->CC() ) deltaFlow -= ( thePartons[nSpace()-1]->id() < 0 ? -1 : 1 ); if ( deltaFlow != 0 ) thePartons[nSpace()-1] = thePartons[nSpace()-1]->CC(); } try { check(); } catch (Tree2toNDiagramError&) { theNSpace = theNSpaceBackup; theNOutgoing = theNOutgoingBackup; nextOrig = nextOrigBackup; thePartons = thePartonsBackup; theParents = theParentsBackup; return -1; } return npos; } ClassDescription Tree2toNDiagram::initTree2toNDiagram; void Tree2toNDiagram::persistentInput(PersistentIStream & is, int) { is >> theNSpace >> theNOutgoing >> thePartons >> theParents >> nextOrig; } void Tree2toNDiagram::persistentOutput(PersistentOStream & os) const { os << theNSpace << theNOutgoing << thePartons << theParents << nextOrig; } Tree2toNDiagramError::Tree2toNDiagramError() { theMessage << "An error occurred while setting up a diagram of class " << "'Tree2toNDiagram'."; severity(abortnow); } thepeg-1.8.0.orig/MatrixElement/ReweightConstant.h0000644000175000017500000000720511747772425020372 0ustar sunsun// -*- C++ -*- // // ReweightConstant.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_ReweightConstant_H #define THEPEG_ReweightConstant_H // // This is the declaration of the ReweightConstant class. // #include "ThePEG/MatrixElement/ReweightBase.h" namespace ThePEG { /** * The ReweightConstant class is a simple ReweightBase sub-class which * simply reweight an event with a constant. * * @see \ref ReweightConstantInterfaces "The interfaces" * defined for ReweightConstant. */ class ReweightConstant: public ReweightBase { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ ReweightConstant() : C(1.0) {} //@} public: /** * Return the wieght for the kinematical configuation provided by * the assigned XComb object (in the LastXCombInfo base class). */ virtual double weight() const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The constant to reweight with. */ double C; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initReweightConstant; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ ReweightConstant & operator=(const ReweightConstant &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of ReweightConstant. */ template <> struct BaseClassTrait { /** Typedef of the first base class of ReweightConstant. */ typedef ReweightBase NthBase; }; /** This template specialization informs ThePEG about the name of * the ReweightConstant class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ReweightConstant"; } /** Return the name of the shared library be loaded to get * access to the ReweightConstant class and every other class it uses * (except the base class). */ static string library() { return "ReweightConstant.so"; } }; /** @endcond */ } #endif /* THEPEG_ReweightConstant_H */ thepeg-1.8.0.orig/MatrixElement/MEBase.cc0000644000175000017500000001713411747772425016336 0ustar sunsun// -*- C++ -*- // // MEBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MEBase class. // #include "MEBase.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/MatrixElement/ReweightBase.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/StandardXComb.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; MEBase::MEBase() : theLastSHat(-1.0*GeV2), lastPreweight(1.0), theMaxMultCKKW(0), theMinMultCKKW(0) {} MEBase::~MEBase() {} void MEBase::use(tcMEPtr other) { if (other == this) return; theDiagrams = other->theDiagrams; theLastSHat = other->theLastSHat; reweights = other->reweights; preweights = other->preweights; lastPreweight = other->lastPreweight; theAmplitude = other->theAmplitude; theMaxMultCKKW = other->theMaxMultCKKW; theMinMultCKKW = other->theMinMultCKKW; } void MEBase::useDiagrams(tcMEPtr other) const { if (other == this) return; theDiagrams = other->theDiagrams; } void MEBase::addReweighter(tReweightPtr rw) { if ( rw && find(reweights.begin(), reweights.end(), rw) == reweights.end() ) reweights.push_back(rw); } void MEBase::addPreweighter(tReweightPtr rw) { if ( rw && find(preweights.begin(), preweights.end(), rw) == preweights.end()) preweights.push_back(rw); } void MEBase::setKinematics(tPPair in, const PVector & out) { theLastSHat = -1.0*GeV2; theLastXComb = tStdXCombPtr(); for ( int i = 0, N = diagrams().size(); i < N; ++i ) { tPVector parts; const DiagramBase & diag = *(diagrams()[i]); if (diag.partons().size() != out.size() + 2 ) continue; if ( in.first->dataPtr() == diag.partons()[0] ) { parts.push_back(in.first); if ( in.second->dataPtr() != diag.partons()[1] ) continue; parts.push_back(in.second); } else if ( in.second->dataPtr() == diag.partons()[0] ) { parts.push_back(in.second); if ( in.first->dataPtr() != diag.partons()[1] ) continue; parts.push_back(in.first); } else continue; multimap omap; for ( int j = 0, M = out.size(); j < M; ++j ) omap.insert(make_pair(out[j]->dataPtr(), out[j])); for ( int j = 2, M = diag.partons().size(); j < M; ++j ) { multimap::iterator it = omap.find(diag.partons()[j]); if ( it == omap.end() ) break; parts.push_back(it->second); omap.erase(it); } if ( !omap.empty() ) continue; theLastXComb = new_ptr(StandardXComb(this, parts, i)); setKinematics(); return; } throw Exception() << "In 'MEBase::setKinematics(...)' for the object '" << name() << "': Could not set the kinematics according to the specified partons " << "since no matching diagram was found." << Exception::abortnow; } void MEBase::constructVertex(tSubProPtr) {} void MEBase::setKinematics() { theLastSHat = lastSHat(); } void MEBase::clearKinematics() { theLastSHat = -1.0*GeV2; theLastXComb = tStdXCombPtr(); } MEBase::DiagramIndex MEBase::diagram(const DiagramVector & dv) const { Selector sel = diagrams(dv); return sel.empty()? DiagramIndex(rnd(dv.size())): sel.select(rnd()); } const ColourLines & MEBase:: selectColourGeometry(tcDiagPtr diag) const { Selector sel = colourGeometries(diag); return *sel.select(rnd()); } int MEBase::nDim() const { return 0; } void MEBase::setXComb(tStdXCombPtr xc) { theLastXComb = xc; theLastSHat = lastSHat(); } vector & MEBase::meMomenta() { return lastXCombPtr()->meMomenta(); } void MEBase::lastME2(double v) const { lastXCombPtr()->lastME2(v); } void MEBase::lastMECrossSection(CrossSection v) const { lastXCombPtr()->lastMECrossSection(v); } void MEBase::lastMEPDFWeight(double v) const { lastXCombPtr()->lastMEPDFWeight(v); } void MEBase::jacobian(double j) { lastXCombPtr()->jacobian(j); } double MEBase::reWeight() const { double w = 1.0; for ( int i = 0, N = reweights.size(); i < N; ++i ) { reweights[i]->setXComb(lastXCombPtr()); w *= reweights[i]->weight(); } return w; } double MEBase::preWeight() const { lastPreweight = 1.0; for ( int i = 0, N = preweights.size(); i < N; ++i ) { preweights[i]->setXComb(lastXCombPtr()); lastPreweight *= preweights[i]->weight(); } return lastPreweight; } void MEBase::generateSubCollision(SubProcess &) {} const DVector & MEBase::meInfo() const { return lastXCombPtr()->meInfo(); } void MEBase::meInfo(const DVector & info) const { lastXCombPtr()->meInfo(info); } double MEBase::alphaS() const { return SM().alphaS(scale()); } double MEBase::alphaEM() const { return SM().alphaEM(scale()); } void MEBase::persistentOutput(PersistentOStream & os) const { os << theDiagrams << ounit(theLastSHat, GeV2) << reweights << preweights << lastPreweight << theAmplitude << theLastXComb << theMaxMultCKKW << theMinMultCKKW; } void MEBase::persistentInput(PersistentIStream & is, int) { is >> theDiagrams >> iunit(theLastSHat, GeV2) >> reweights >> preweights >> lastPreweight >> theAmplitude >> theLastXComb >> theMaxMultCKKW >> theMinMultCKKW; } AbstractClassDescription MEBase::initMEBase; // Definition of the static class description member. void MEBase::Init() { static ClassDocumentation documentation ("The ThePEG::MEBase class is the base class for all matrix elements " "to be used for generating sub processes in ThePEG"); static RefVector interfaceReweights ("Reweights", "A list of ThePEG::ReweightBase objects to modify this matrix elements.", &MEBase::reweights, 0, false, false, true, false); static RefVector interfacePreweights ("Preweights", "A list of ThePEG::ReweightBase objects to bias the phase space for this " "matrix elements without influencing the actual cross section.", &MEBase::preweights, 0, false, false, true, false); static Reference interfaceAmplitude ("Amplitude", "The eventual amplitude associated to this matrix element.", &MEBase::theAmplitude, false, false, true, true); static Parameter interfaceMaxMultCKKW ("MaxMultCKKW", "If this matrix element is to be used together with others for CKKW-" "reweighting and veto, this should give the multiplicity of outgoing " "particles in the highest multiplicity matrix element in the group. " "If set to zero, no CKKW procedure should be applied.", &MEBase::theMaxMultCKKW, 0, 0, 0, true, false, Interface::lowerlim); static Parameter interfaceMinMultCKKW ("MinMultCKKW", "If this matrix element is to be used together with others for CKKW-" "reweighting and veto, this should give the multiplicity of outgoing " "particles in the lowest multiplicity matrix element in the group. If " "larger or equal to MaxMultCKKW, no CKKW " "procedure should be applied.", &MEBase::theMinMultCKKW, 0, 0, 0, true, false, Interface::lowerlim); interfaceMaxMultCKKW.rank(2.0); interfaceMinMultCKKW.rank(1.0); } thepeg-1.8.0.orig/MatrixElement/Makefile.in0000644000175000017500000006577511756366734017020 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = MatrixElement ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) MENCDIS_la_LIBADD = am_MENCDIS_la_OBJECTS = MENCDIS.lo MENCDIS_la_OBJECTS = $(am_MENCDIS_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent MENCDIS_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(MENCDIS_la_LDFLAGS) $(LDFLAGS) -o $@ MEQCD_la_LIBADD = am_MEQCD_la_OBJECTS = MEGG2GG.lo MEQG2QG.lo MEQQ2QQ3.lo MEQq2Qq4.lo \ MEGG2QQ.lo MEQQ2GG.lo MEQQ2qq2.lo MEqq2qq1.lo MEQCD_la_OBJECTS = $(am_MEQCD_la_OBJECTS) MEQCD_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(MEQCD_la_LDFLAGS) $(LDFLAGS) -o $@ MEee2gZ2qq_la_LIBADD = am_MEee2gZ2qq_la_OBJECTS = MEee2gZ2qq.lo MEee2gZ2qq_la_OBJECTS = $(am_MEee2gZ2qq_la_OBJECTS) MEee2gZ2qq_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(MEee2gZ2qq_la_LDFLAGS) $(LDFLAGS) \ -o $@ ReweightConstant_la_LIBADD = am_ReweightConstant_la_OBJECTS = ReweightConstant.lo ReweightConstant_la_OBJECTS = $(am_ReweightConstant_la_OBJECTS) ReweightConstant_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ReweightConstant_la_LDFLAGS) \ $(LDFLAGS) -o $@ ReweightMinPT_la_LIBADD = am_ReweightMinPT_la_OBJECTS = ReweightMinPT.lo ReweightMinPT_la_OBJECTS = $(am_ReweightMinPT_la_OBJECTS) ReweightMinPT_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ReweightMinPT_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGME_la_LIBADD = am__objects_1 = Amplitude.lo ColourLines.lo DiagramBase.lo \ Tree2toNDiagram.lo MEBase.lo MEGroup.lo ReweightBase.lo \ ME2to2Base.lo ME2to2QCD.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGME_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGME_la_OBJECTS = $(am_libThePEGME_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(MENCDIS_la_SOURCES) $(MEQCD_la_SOURCES) \ $(MEee2gZ2qq_la_SOURCES) $(ReweightConstant_la_SOURCES) \ $(ReweightMinPT_la_SOURCES) $(libThePEGME_la_SOURCES) DIST_SOURCES = $(MENCDIS_la_SOURCES) $(MEQCD_la_SOURCES) \ $(MEee2gZ2qq_la_SOURCES) $(ReweightConstant_la_SOURCES) \ $(ReweightMinPT_la_SOURCES) $(libThePEGME_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = Amplitude.cc ColourLines.cc DiagramBase.cc Tree2toNDiagram.cc \ MEBase.cc MEGroup.cc ReweightBase.cc ME2to2Base.cc ME2to2QCD.cc myQCDSOURCES = DOCFILES = Amplitude.h ColourLines.h DiagramBase.h Tree2toNDiagram.h MEBase.h \ MEGroup.h ReweightBase.h ME2to2Base.h ME2to2QCD.h INCLUDEFILES = $(DOCFILES) ColourLines.xh \ DiagramBase.xh DiagramBase.fh \ Tree2toNDiagram.xh MEBase.fh MEGroup.fh noinst_LTLIBRARIES = libThePEGME.la pkglib_LTLIBRARIES = MEQCD.la MEee2gZ2qq.la MENCDIS.la \ ReweightConstant.la ReweightMinPT.la libThePEGME_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed MEQCD_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEQCD_la_SOURCES = MEGG2GG.cc MEQG2QG.cc MEQQ2QQ3.cc MEQq2Qq4.cc MEGG2QQ.cc \ MEQQ2GG.cc MEQQ2qq2.cc MEqq2qq1.cc MEGG2GG.h MEQG2QG.h \ MEQQ2QQ3.h MEQq2Qq4.h MEGG2QQ.h MEQQ2GG.h MEQQ2qq2.h \ MEqq2qq1.h # Version info should be updated if any interface or persistent I/O # function is changed MEee2gZ2qq_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEee2gZ2qq_la_SOURCES = MEee2gZ2qq.cc MEee2gZ2qq.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightConstant_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightConstant_la_SOURCES = ReweightConstant.cc ReweightConstant.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightMinPT_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightMinPT_la_SOURCES = ReweightMinPT.cc ReweightMinPT.h # Version info should be updated if any interface or persistent I/O # function is changed MENCDIS_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MENCDIS_la_SOURCES = MENCDIS.cc MENCDIS.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu MatrixElement/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu MatrixElement/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } MENCDIS.la: $(MENCDIS_la_OBJECTS) $(MENCDIS_la_DEPENDENCIES) $(EXTRA_MENCDIS_la_DEPENDENCIES) $(AM_V_CXXLD)$(MENCDIS_la_LINK) -rpath $(pkglibdir) $(MENCDIS_la_OBJECTS) $(MENCDIS_la_LIBADD) $(LIBS) MEQCD.la: $(MEQCD_la_OBJECTS) $(MEQCD_la_DEPENDENCIES) $(EXTRA_MEQCD_la_DEPENDENCIES) $(AM_V_CXXLD)$(MEQCD_la_LINK) -rpath $(pkglibdir) $(MEQCD_la_OBJECTS) $(MEQCD_la_LIBADD) $(LIBS) MEee2gZ2qq.la: $(MEee2gZ2qq_la_OBJECTS) $(MEee2gZ2qq_la_DEPENDENCIES) $(EXTRA_MEee2gZ2qq_la_DEPENDENCIES) $(AM_V_CXXLD)$(MEee2gZ2qq_la_LINK) -rpath $(pkglibdir) $(MEee2gZ2qq_la_OBJECTS) $(MEee2gZ2qq_la_LIBADD) $(LIBS) ReweightConstant.la: $(ReweightConstant_la_OBJECTS) $(ReweightConstant_la_DEPENDENCIES) $(EXTRA_ReweightConstant_la_DEPENDENCIES) $(AM_V_CXXLD)$(ReweightConstant_la_LINK) -rpath $(pkglibdir) $(ReweightConstant_la_OBJECTS) $(ReweightConstant_la_LIBADD) $(LIBS) ReweightMinPT.la: $(ReweightMinPT_la_OBJECTS) $(ReweightMinPT_la_DEPENDENCIES) $(EXTRA_ReweightMinPT_la_DEPENDENCIES) $(AM_V_CXXLD)$(ReweightMinPT_la_LINK) -rpath $(pkglibdir) $(ReweightMinPT_la_OBJECTS) $(ReweightMinPT_la_LIBADD) $(LIBS) libThePEGME.la: $(libThePEGME_la_OBJECTS) $(libThePEGME_la_DEPENDENCIES) $(EXTRA_libThePEGME_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGME_la_OBJECTS) $(libThePEGME_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Amplitude.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColourLines.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DiagramBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ME2to2Base.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ME2to2QCD.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEGG2GG.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEGG2QQ.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEGroup.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MENCDIS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEQG2QG.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEQQ2GG.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEQQ2QQ3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEQQ2qq2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEQq2Qq4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEee2gZ2qq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MEqq2qq1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReweightBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReweightConstant.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReweightMinPT.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Tree2toNDiagram.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/MatrixElement/MEGG2QQ.h0000644000175000017500000001010611747772425016137 0ustar sunsun// -*- C++ -*- // // MEGG2QQ.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEGG2QQ_H #define ThePEG_MEGG2QQ_H // This is the declaration of the MEGG2QQ class. #include "ThePEG/MatrixElement/ME2to2QCD.h" namespace ThePEG { /** * MEGG2QQ inherits from ME2to2QCD and implements the standard * \f$gg\rightarrow gq\bar{q}\f$ matrix element. * * @see \ref MEGG2QQInterfaces "The interfaces" * defined for MEGG2QQ. * @see ME2to2QCD */ class MEGG2QQ: public ME2to2QCD { public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * The matrix element for the kinematical configuration * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. * @return the matrix element scaled with sHat() to give a * dimensionless number. */ virtual double me2() const; /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const; /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. * @param diag the diagram chosen. * @return the possible colour geometries weighted by their * relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const; /** * Get diagram selector. With the information previously supplied with the * setKinematics method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. * @param dv the diagrams to be weighted. * @return a Selector relating the given diagrams to their weights. */ virtual Selector diagrams(const DiagramVector & dv) const; //@} protected: /** @name Internal functions returning the matrix element squared * for different colour configurations. */ //@{ /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colA() const { return uHat()/tHat() - 2.0*sqr(uHat()/sHat()); } /** * Return the matrix element squared (without common pre-factors) * for the specific colour configuration. */ double colB() const { return tHat()/uHat() - 2.0*sqr(tHat()/sHat()); } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initMEGG2QQ; /** * Private and non-existent assignment operator. */ MEGG2QQ & operator=(const MEGG2QQ &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MEGG2QQ. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MEGG2QQ. */ typedef ME2to2QCD NthBase; }; /** This template specialization informs ThePEG about the name of * the MEGG2QQ class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MEGG2QQ"; } /** Return the name of the shared library be loaded to get * access to the MEGG2QQ class and every other class it uses * (except the base class). */ static string library() { return "MEQCD.so"; } }; /** @endcond */ } #endif /* ThePEG_MEGG2QQ_H */ thepeg-1.8.0.orig/MatrixElement/MEGroup.h0000644000175000017500000003144711747772425016425 0ustar sunsun// -*- C++ -*- // // MEGroup.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2009-2010 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEGroup_H #define ThePEG_MEGroup_H // This is the declaration of the MEGroup class. #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/Handlers/StdDependentXComb.fh" #include "ThePEG/Cuts/Cuts.fh" #include "MEGroup.fh" namespace ThePEG { /** * The MEGroup class represents a 'head' matrix element * in association with a group of dependent matrix elements. * It basically acts as a wrapper around its head matrix element * however supplying additional information to the corresponding * StdXCombGroup object. * * @see StdXCombGroup * @see StdDependentXComb * */ class MEGroup: public MEBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MEGroup(); /** * Destructor. */ virtual ~MEGroup(); //@} public: /** @name Virtual functions from MEBase. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix element * is given. */ virtual unsigned int orderInAlphaS() const { return head()->orderInAlphaS(); } /** * Return the order in \f$\alpha_{EM}\f$ in which this matrix * element is given. Returns 0. */ virtual unsigned int orderInAlphaEW() const { return head()->orderInAlphaEW(); } /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. */ virtual double me2() const { return head()->me2(); } /** * Return the scale associated with the phase space point provided * by the last call to setKinematics(). */ virtual Energy2 scale() const { return head()->scale(); } /** * Return the value of \f$\alpha_S\f$ associated with the phase * space point provided by the last call to setKinematics(). This * versions returns SM().alphaS(scale()). */ virtual double alphaS() const { return head()->alphaS(); } /** * Return the value of \f$\alpha_EM\f$ associated with the phase * space point provided by the last call to setKinematics(). This * versions returns SM().alphaEM(scale()). */ virtual double alphaEM() const { return head()->alphaEM(); } /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * construct the spin information for the interaction */ virtual void constructVertex(tSubProPtr sub) { head()->constructVertex(sub); } /** * The number of internal degreed of freedom used in the matrix * element. This default version returns 0; */ virtual int nDim() const { return theNDim; } /** * Generate internal degrees of freedom given nDim() uniform random * numbers in the interval ]0,1[. To help the phase space generator, * the 'dSigHatDR' should be a smooth function of these numbers, * although this is not strictly necessary. The return value should * be true of the generation succeeded. If so the generated momenta * should be stored in the meMomenta() vector. */ virtual bool generateKinematics(const double * r); /** * Return true, if this matrix element expects * the incoming partons in their center-of-mass system */ virtual bool wantCMS () const { return head()->wantCMS(); } /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const { return head()->dSigHatDR(); } /** * Return true, if this matrix element will generate momenta for the * incoming partons itself. The matrix element is required to store * the incoming parton momenta in meMomenta()[0,1]. No mapping in * tau and y is performed by the PartonExtractor object, if a * derived class returns true here. The phase space jacobian is to * include a factor 1/(x1 x2). */ virtual bool haveX1X2() const { return head()->haveX1X2(); } /** * Return true, if this matrix element provides the PDF * weight for the first incoming parton itself. */ virtual bool havePDFWeight1 () const { return head()->havePDFWeight1(); } /** * Return true, if this matrix element provides the PDF * weight for the second incoming parton itself. */ virtual bool havePDFWeight2 () const { return head()->havePDFWeight2(); } /** * Return true, if the XComb steering this matrix element * should keep track of the random numbers used to generate * the last phase space point */ virtual bool keepRandomNumbers() const { return head()->keepRandomNumbers(); } /** * Comlete a SubProcess object using the internal degrees of freedom * generated in the last generateKinematics() (and possible other * degrees of freedom which was intergated over in dSigHatDR(). This * default version does nothing. Will be made purely virtual in the * future. */ virtual void generateSubCollision(SubProcess & sub) { head()->generateSubCollision(sub); } /** * Clear the information previously provided by a call to * setKinematics(...). */ virtual void clearKinematics(); /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const { head()->diagrams(); useDiagrams(head()); } /** * Return true, if this matrix element does not want to * make use of mirroring processes; in this case all * possible partonic subprocesses with a fixed assignment * of incoming particles need to be provided through the diagrams * added with the add(...) method. */ virtual bool noMirror () const { return head()->noMirror(); } /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const { return head()->colourGeometries(diag); } /** * Select a ColpurLines geometry. The default version returns a * colour geometry selected among the ones returned from * colourGeometries(tcDiagPtr). */ virtual const ColourLines & selectColourGeometry(tcDiagPtr diag) const { return head()->selectColourGeometry(diag); } /** * With the information previously supplied with the * setKinematics(...) method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. */ virtual Selector diagrams(const DiagramVector & dv) const { return head()->diagrams(dv); } /** * Select a diagram. Default version uses diagrams(const * DiagramVector &) to select a diagram according to the * weights. This is the only method used that should be outside of * MEBase. */ virtual DiagramIndex diagram(const DiagramVector & dv) const { DiagramIndex res = head()->diagram(dv); return res; } /** * Set the XComb object to be used in the next call to * generateKinematics() and dSigHatDR(). */ virtual void setXComb(tStdXCombPtr); /** * Inform this matrix element that a new phase space * point is about to be generated, so all caches should * be flushed. */ virtual void flushCaches(); /** * Collect information on the last evaluated phasespace * point for verification or debugging purposes. This * only called, if the StdXCombGroup did accumulate * a non-zero cross section from this ME group. */ virtual void lastEventStatistics() {} //@} public: /** * Return the head matrix element. */ tMEPtr head() const { return theHead; } /** * Visit the dependent matrix elements */ const MEVector& dependent() const { return theDependent; } /** * Set the head matrix element. */ void head(tMEPtr me) { theHead = me; } /** * Access the dependent matrix elements */ MEVector& dependent() { return theDependent; } /** * Return the random number offset to access the random * numbers provided for the given matrix element to generate * dependent kinematics. */ int dependentOffset(tMEPtr dep) const; /** * Create an StdDependentXComb object to be used * for the given process steered bythe head object and * dependent matrix element. */ StdDependentXCombPtr makeDependentXComb (tStdXCombPtr xcHead, const cPDVector& proc, tMEPtr depME, const PartonPairVec& allPBins) const; /** * Return true, if SubProcessGroups should be * setup from this MEGroup. If not, a single SubProcess * is constructed from the data provided by the * head matrix element. */ virtual bool subProcessGroups() const { return true; } /** * Return true for MC summation of dependent * matrix elements, if feasible. */ virtual bool mcSumDependent() const { return false; } /** * Return a pointer to the dependent xcomb object selected * if mcSumDependent returned true. */ tStdDependentXCombPtr lastDependentXComb() const { return theLastDependentXComb; } protected: /** * Set a pointer to the dependent xcomb object selected * if mcSumDependent returned true. */ void lastDependentXComb(tStdDependentXCombPtr xc) { theLastDependentXComb = xc; } public: /** * Return true, if the same additional random numbers * should be presented to any of the dependent * matrix elements. */ virtual bool uniformAdditional() const = 0; /** * Given a process from the head matrix element, * return a list of diagrams which should be considered for * the given dependent matrix element. */ virtual MEBase::DiagramVector dependentDiagrams (const cPDVector& proc, tMEPtr depME) const = 0; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans); /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** * The head matrix element. */ MEPtr theHead; /** * The dependent matrix elements. */ MEVector theDependent; /** * Offsets to access additional random numbers * required by the dependent matrix elements. */ map theNDimMap; /** * The total number of random numbers required. */ int theNDim; /** * A pointer to the dependent xcomb object selected * if mcSumDependent returned true. */ tStdDependentXCombPtr theLastDependentXComb; private: /** * Describe a class with persistent data. */ static AbstractClassDescription initMEGroup; /** * Private and non-existent assignment operator. */ MEGroup & operator=(const MEGroup &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * MEGroup. */ template <> struct BaseClassTrait { /** Typedef of the base class of MEGroup. */ typedef MEBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * MEGroup class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::MEGroup"; } }; /** @endcond */ } #endif /* ThePEG_MEGroup_H */ thepeg-1.8.0.orig/MatrixElement/MEBase.h0000644000175000017500000004130411747772425016174 0ustar sunsun// -*- C++ -*- // // MEBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MEBase_H #define ThePEG_MEBase_H // This is the declaration of the MEBase class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/MatrixElement/DiagramBase.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/MatrixElement/Amplitude.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/Handlers/StandardXComb.fh" #include "ReweightBase.h" #include "MEBase.fh" namespace ThePEG { /** * The MEBase class is the base class of all objects * representing hard matrix elements in ThePEG. There are three * methods which must be overridden by a concrete subclass:
* * includedDiagrams(tcPDPair) should return a vector of DiagramBase * objects describing the diagrams used for this matrix element for * the given pair of incoming parton types. These DiagramBases are * used to identify the incoming and outgoing partons which can be * handled by the process generation scheme, and is also used to * cnstruct a corresponding SubProcess object. * * scale() should return the scale associated with the phase space * point set with the last call to setKinematics(...) or * generateKinematics(...). * * me() should return the the matrix element squared using the the * type and momentum of the incoming and outgoing partons, previously * set by the setKinematics(...) or generateKinematics(...) member * functions, accessible through the methods meMomenta() and * mePartonData() inherited from LastXCombInfo, and/or from * information stored by sub classes. The returned value should be * dimensionless suitable scaled by the total invariant mass squared * (accessible through the sHat() member function). Any user of this * method must make sure that the setKinematics(...) member function * has been appropriately called before. * * colourGeometries() should return a Selector with the possible * ColourLines objects weighted by their relative probabilities given * the information set by the last call to setKinematics(...) or * generateKinematics(...). * * There are other virtula functions which may be overridden as listed * below. * * @see \ref MEBaseInterfaces "The interfaces" * defined for MEBase. * @see DiagramBase * @see ColourLines * */ class MEBase: public HandlerBase, public LastXCombInfo { public: /** A vector of pointers to DiagramBase objects. */ typedef vector DiagramVector; /** The size_type used in the DiagramVector. */ typedef DiagramVector::size_type DiagramIndex; /** A vector of pointers to ReweightBase objects. */ typedef vector ReweightVector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MEBase(); /** * Destructor. */ virtual ~MEBase(); //@} public: /** @name Virtual functions to be overridden by sub-classes.. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix element * is given. */ virtual unsigned int orderInAlphaS() const = 0; /** * Return the order in \f$\alpha_{EM}\f$ in which this matrix * element is given. Returns 0. */ virtual unsigned int orderInAlphaEW() const = 0; /** * Return the matrix element for the kinematical configuation * previously provided by the last call to setKinematics(), suitably * scaled by sHat() to give a dimension-less number. */ virtual double me2() const = 0; /** * Return the scale associated with the phase space point provided * by the last call to setKinematics(). */ virtual Energy2 scale() const = 0; /** * Return the value of \f$\alpha_S\f$ associated with the phase * space point provided by the last call to setKinematics(). This * versions returns SM().alphaS(scale()). */ virtual double alphaS() const; /** * Return the value of \f$\alpha_EM\f$ associated with the phase * space point provided by the last call to setKinematics(). This * versions returns SM().alphaEM(scale()). */ virtual double alphaEM() const; /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries(). */ void setKinematics(tPPair in, const PVector & out); /** * Set the typed and momenta of the incoming and outgoing partons to * be used in subsequent calls to me() and colourGeometries() * according to the associated XComb object. If the function is * overridden in a sub class the new function must call the base * class one first. */ virtual void setKinematics(); /** * construct the spin information for the interaction */ virtual void constructVertex(tSubProPtr sub); /** * The number of internal degreed of freedom used in the matrix * element. This default version returns 0; */ virtual int nDim() const; /** * Generate internal degrees of freedom given nDim() uniform random * numbers in the interval ]0,1[. To help the phase space generator, * the 'dSigHatDR' should be a smooth function of these numbers, * although this is not strictly necessary. The return value should * be true of the generation succeeded. If so the generated momenta * should be stored in the meMomenta() vector. */ virtual bool generateKinematics(const double * r) = 0; /** * Return true, if this matrix element expects * the incoming partons in their center-of-mass system */ virtual bool wantCMS() const { return true; } /** * If this is a dependent matrix element in a ME group, return true, * if cuts should be inherited from the head matrix element, i.e. no * cut is being applied to the dependent matrix element if the head * configuration has passed the cuts. */ virtual bool headCuts() const { return false; } /** * If this is a dependent matrix element in a ME group, return true, * if cuts should be ignored. */ virtual bool ignoreCuts() const { return false; } /** * If this is a dependent matrix element in a ME group, return true, * if it applies to the process set in lastXComb() */ virtual bool apply() const { return true; } /** * Return the matrix element squared differential in the variables * given by the last call to generateKinematics(). */ virtual CrossSection dSigHatDR() const = 0; /** * Return true, if this matrix element will generate momenta for the * incoming partons itself. The matrix element is required to store * the incoming parton momenta in meMomenta()[0,1]. No mapping in * tau and y is performed by the PartonExtractor object, if a * derived class returns true here. The phase space jacobian is to * include a factor 1/(x1 x2). */ virtual bool haveX1X2() const { return false; } /** * Return true, if this matrix element provides the PDF * weight for the first incoming parton itself. */ virtual bool havePDFWeight1() const { return false; } /** * Return true, if this matrix element provides the PDF * weight for the second incoming parton itself. */ virtual bool havePDFWeight2() const { return false; } /** * Return true, if the XComb steering this matrix element * should keep track of the random numbers used to generate * the last phase space point */ virtual bool keepRandomNumbers() const { return false; } /** * Comlete a SubProcess object using the internal degrees of freedom * generated in the last generateKinematics() (and possible other * degrees of freedom which was intergated over in dSigHatDR(). This * default version does nothing. Will be made purely virtual in the * future. */ virtual void generateSubCollision(SubProcess &); /** * Clear the information previously provided by a call to * setKinematics(...). */ virtual void clearKinematics(); /** * Add all possible diagrams with the add() function. */ virtual void getDiagrams() const = 0; /** * Return true, if this matrix element does not want to * make use of mirroring processes; in this case all * possible partonic subprocesses with a fixed assignment * of incoming particles need to be provided through the diagrams * added with the add(...) method. */ virtual bool noMirror () const { return false; } /** * Return all possible diagrams. */ const DiagramVector & diagrams() const { if ( theDiagrams.empty() ) getDiagrams(); return theDiagrams; } /** * Return a Selector with possible colour geometries for the selected * diagram weighted by their relative probabilities. */ virtual Selector colourGeometries(tcDiagPtr diag) const = 0; /** * Select a ColpurLines geometry. The default version returns a * colour geometry selected among the ones returned from * colourGeometries(tcDiagPtr). */ virtual const ColourLines & selectColourGeometry(tcDiagPtr diag) const; /** * With the information previously supplied with the * setKinematics(...) method, a derived class may optionally * override this method to weight the given diagrams with their * (although certainly not physical) relative probabilities. */ virtual Selector diagrams(const DiagramVector &) const { return Selector(); } /** * Select a diagram. Default version uses diagrams(const * DiagramVector &) to select a diagram according to the * weights. This is the only method used that should be outside of * MEBase. */ virtual DiagramIndex diagram(const DiagramVector &) const; /** * Return true if this matrix element has associated (p)reWeight * objects assigned. */ inline bool reweighted() const { return reweights.size() > 0 || preweights.size() > 0; } /** * With the information previously supplied with the * setKinematics(...) methods, return the combined effects of the * reweighters. */ double reWeight() const; /** * With the information previously supplied with the * setKinematics(...) methods, return the comined effects of the * peweighters. */ double preWeight() const; /** * Add objects to the list of reweighters. */ void addReweighter(tReweightPtr rw); /** * Add objects to the list of preweighters. */ void addPreweighter(tReweightPtr rw); /** * Return the amplitude associated with this matrix element. This * function is allowed to return the null pointer if the amplitude * is not available. */ Ptr::pointer amplitude() const { return theAmplitude; } /** * Set the amplitude associated with this matrix element. */ void amplitude(Ptr::pointer amp) { theAmplitude = amp; } //@} public: /** @name Acces information about the last generated phase space point. */ //@{ /** * Return the last set invariant mass squared. */ Energy2 sHat() const { return theLastSHat; } /** * Return the factor with which this matrix element was last * pre-weighted. */ double preweight() const { return lastPreweight; } /** * Inform this matrix element that a new phase space * point is about to be generated, so all caches should * be flushed. */ virtual void flushCaches() {} /** * Set the XComb object to be used in the next call to * generateKinematics() and dSigHatDR(). */ virtual void setXComb(tStdXCombPtr); /** * Retrieve information obtained in the calculation of the cross * section to be used later when selecting diagrams and colour flow. */ const DVector & meInfo() const; /** * Save information obtained in the calculation of the cross * section to be used later when selecting diagrams and colour flow. */ void meInfo(const DVector & info) const; /** * If this matrix element is to be used together with others for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the highest multiplicity matrix element in * the group. */ int maxMultCKKW() const { return theMaxMultCKKW; } /** * If this matrix element is to be used together with others for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the lowest multiplicity matrix element in * the group. */ int minMultCKKW() const { return theMinMultCKKW; } /** * Set veto scales on the particles at the given * SubProcess which has been generated using this * matrix element. */ virtual void setVetoScales(tSubProPtr) const {} //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** * To be used by sub classes in the getDiagrams() method to add * included diagrams. */ void add(DiagPtr dp) const { theDiagrams.push_back(dp); } /** * Access the momenta set by the last call to generateKinematics(). */ vector & meMomenta(); using LastXCombInfo::meMomenta; /** * Set the matrix element squared as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ void lastME2(double v) const; using LastXCombInfo::lastME2; /** * Set the partonic cross section as calculated * for the last phase space point. This may optionally * be used by a matrix element for caching. */ void lastMECrossSection(CrossSection v) const; using LastXCombInfo::lastMECrossSection; /** * Set the PDF weight as calculated * for the last phase space point, if the matrix * element does supply PDF weights. This may optionally * be used by a matrix element for caching. */ void lastMEPDFWeight(double v) const; using LastXCombInfo::lastMEPDFWeight; /** * Set the last jacobian obtained when generating the kinematics for * the call to dSigHatDR. */ void jacobian(double j); using LastXCombInfo::jacobian; /** * Initialize all member variables from another * MEBase object. * * @TODO remove? */ void use(tcMEPtr other); /** * Initialize the diagrams from another MEBase object. */ void useDiagrams(tcMEPtr other) const; private: /** * The diagrams included for this matrix element. */ mutable DiagramVector theDiagrams; /** * The last set invariant mass squared. */ Energy2 theLastSHat; /** * The reweight objects modifying this matrix element. */ ReweightVector reweights; /** * The preweight objects modifying this matrix element. */ ReweightVector preweights; /** * The factor with which this matrix element was last pre-weighted. */ mutable double lastPreweight; /** * The amplitude associated with this matrix element. */ Ptr::pointer theAmplitude; /** * If this matrix element is to be used together with others for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the highest multiplicity matrix element in * the group. */ int theMaxMultCKKW; /** * If this matrix element is to be used together with others for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the lowest multiplicity matrix element in * the group. */ int theMinMultCKKW; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initMEBase; /** * Private and non-existent assignment operator. */ MEBase & operator=(const MEBase &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * MEBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of MEBase. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * MEBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::MEBase"; } }; /** @endcond */ } #include "ThePEG/Handlers/StandardXComb.h" #endif /* ThePEG_MEBase_H */ thepeg-1.8.0.orig/MatrixElement/ReweightBase.h0000644000175000017500000000651511747772425017456 0ustar sunsun// -*- C++ -*- // // ReweightBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ReweightBase_H #define ThePEG_ReweightBase_H // This is the declaration of the ReweightBase class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/Handlers/StandardXComb.fh" namespace ThePEG { /** * The ReweightBase class is the base class of all objects * representing external biases to matrix elements. These can be used * to enhance certain matrix elements or certain phase space * regions. They can be used in two ways, either to completely change * the matrix element (re-weight), in which case the total cross * section will be affected or, when using weighted events in an * EventHandler, to pre-weight certain events but leaving the cross * section unchanged * * There is only one virtual function which must be overridden in * derived classes: weight(). * * @see \ref ReweightBaseInterfaces "The interfaces" * defined for ReweightBase. * @see MEBase * @see EventHandler * @see SubProcessHandler */ class ReweightBase: public HandlerBase, public LastXCombInfo<> { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~ReweightBase(); //@} public: /** * Return the wieght for the kinematical configuation provided by * the assigned XComb object (in the LastXCombInfo base class). */ virtual double weight() const = 0; /** * Assigne an XComb object with information about the sub-process to * be used in the reweighting. */ void setXComb(tXCombPtr xc); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initReweightBase; /** * Private and non-existent assignment operator. */ ReweightBase & operator=(const ReweightBase &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * ReweightBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of ReweightBase. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * ReweightBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::ReweightBase"; } }; /** @endcond */ } #endif /* ThePEG_ReweightBase_H */ thepeg-1.8.0.orig/MatrixElement/ME2to2QCD.h0000644000175000017500000001047311747772425016443 0ustar sunsun// -*- C++ -*- // // ME2to2QCD.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ME2to2QCD_H #define ThePEG_ME2to2QCD_H // This is the declaration of the ME2to2QCD class. #include "ThePEG/MatrixElement/ME2to2Base.h" namespace ThePEG { /** * The ME2to2QCD class inherits from the ME2to2Base class and can be * used as a sub class for all QCD 2\f$\rightarrow\f$ 2 processes. It * implements some common functions such as common pre-factors, * maximum number of flavours, treatment of interference terms and * possibility to enhance certain terms. * * @see \ref ME2to2QCDInterfaces "The interfaces" * defined for ME2to2QCD. * @see ME2to2Base */ class ME2to2QCD: public ME2to2Base { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ME2to2QCD() : theMaxFlavour(5), theKfac(1.0), theKfacA(1.0), useInterference(true) {} /** * Destructor. */ virtual ~ME2to2QCD(); //@} public: /** @name Virtual functions required by the MEBase class. */ //@{ /** * Return the order in \f$\alpha_S\f$ in which this matrix element * is given. Returns 2. */ virtual unsigned int orderInAlphaS() const; /** * Return the order in \f$\alpha_{EM}\f$ in which this matrix * element is given. Returns 0. */ virtual unsigned int orderInAlphaEW() const; /** * The common prefactor for all 2\f$\rightarrow\f$ 2 QCD sub-processes * ie. \f$\alpha_S^2\f$. */ double comfac() const; /** * Return the heaviest flavour allowed for this matrix element. */ int maxFlavour() const { return theMaxFlavour; } /** * K-factor for artificially boosting the cross-section. */ double Kfac() const { return theKfac; } /** * K-factor for artificially boosting colour-annihilation diagrams. */ double KfacA() const { return theKfacA >= 0.0? theKfacA: theKfac; } /** * Return true if interference terms should be used. */ bool interference() const { return useInterference; } /** * Return true if argument is a quark. */ bool isQuark(const ParticleData & p) const { return ( p.id() && abs(p.id()) <= maxFlavour() ); } /** * Return the quark with flavour i (or gluon if i = 0); */ tcPDPtr quark(int i) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); private: /** * The heaviest flavour allowed for incoming and outgoing partons. */ int theMaxFlavour; /** * Overall K-factor used to boost this cross-section. */ double theKfac; /** * Overall K-factors used to boost the colour annihilation diagram * in the cross-section. */ double theKfacA; /** * Flag so tell whether interference should be used or not. */ bool useInterference; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initME2to2QCD; /** * Private and non-existent assignment operator. */ ME2to2QCD & operator=(const ME2to2QCD &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of ME2to2QCD. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of ME2to2QCD. */ typedef ME2to2Base NthBase; }; /** * This template specialization informs ThePEG about the name of the * ME2to2QCD class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::ME2to2QCD"; } }; /** @endcond */ } #endif /* ThePEG_ME2to2QCD_H */ thepeg-1.8.0.orig/MatrixElement/Makefile.am0000644000175000017500000000370711747772425016770 0ustar sunsunmySOURCES = Amplitude.cc ColourLines.cc DiagramBase.cc Tree2toNDiagram.cc \ MEBase.cc MEGroup.cc ReweightBase.cc ME2to2Base.cc ME2to2QCD.cc myQCDSOURCES = DOCFILES = Amplitude.h ColourLines.h DiagramBase.h Tree2toNDiagram.h MEBase.h \ MEGroup.h ReweightBase.h ME2to2Base.h ME2to2QCD.h INCLUDEFILES = $(DOCFILES) ColourLines.xh \ DiagramBase.xh DiagramBase.fh \ Tree2toNDiagram.xh MEBase.fh MEGroup.fh noinst_LTLIBRARIES = libThePEGME.la pkglib_LTLIBRARIES = MEQCD.la MEee2gZ2qq.la MENCDIS.la \ ReweightConstant.la ReweightMinPT.la libThePEGME_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed MEQCD_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEQCD_la_SOURCES = MEGG2GG.cc MEQG2QG.cc MEQQ2QQ3.cc MEQq2Qq4.cc MEGG2QQ.cc \ MEQQ2GG.cc MEQQ2qq2.cc MEqq2qq1.cc MEGG2GG.h MEQG2QG.h \ MEQQ2QQ3.h MEQq2Qq4.h MEGG2QQ.h MEQQ2GG.h MEQQ2qq2.h \ MEqq2qq1.h # Version info should be updated if any interface or persistent I/O # function is changed MEee2gZ2qq_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MEee2gZ2qq_la_SOURCES = MEee2gZ2qq.cc MEee2gZ2qq.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightConstant_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightConstant_la_SOURCES = ReweightConstant.cc ReweightConstant.h # Version info should be updated if any interface or persistent I/O # function is changed ReweightMinPT_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ReweightMinPT_la_SOURCES = ReweightMinPT.cc ReweightMinPT.h # Version info should be updated if any interface or persistent I/O # function is changed MENCDIS_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MENCDIS_la_SOURCES = MENCDIS.cc MENCDIS.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/MatrixElement/DiagramBase.h0000644000175000017500000001255611747772425017246 0ustar sunsun// -*- C++ -*- // // DiagramBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DiagramBase_H #define ThePEG_DiagramBase_H // This is the declaration of the DiagramBase class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/MatrixElement/ColourLines.h" #include "ThePEG/Handlers/StandardXComb.fh" #include "DiagramBase.fh" #include "DiagramBase.xh" namespace ThePEG { /** * DiagramBase is the base class of all classes which describes * Feynman diagrams which can be generated by a matrix element class * inheriting from MEBase, as reported by the * MEBase::includedDiagrams() method. * * To work properly, a sub-class must in its constructor report the * incoming and outgoing parton types with the partons(int, const * cPDVector &, int) method. Also an id number should be given to be * used internally by the matrix element class. In addition, the * construct() method must be implemented to construct the actual * partons and connect them together in a SubProcess object, also * performing the colour connections using a given ColourLines object. * * @see MEBase * @see SubProcess * @see ColourLines * */ class DiagramBase: public Base { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ DiagramBase() : theNIncoming(-1), theId(0) {} /** * Destructor. */ virtual ~DiagramBase(); //@} public: /** @name Main virtual function to be overridden in sub-classes. */ //@{ /** * Construct a sub process corresponding to this diagram. The * incoming partons, and the momenta of the outgoing ones, are given * by the XComb object. All parent/children pointers should be set * correspondingly and the partons should be colour connected as * specified by the ColourLines object. */ virtual tPVector construct(SubProPtr sb, const StandardXComb &, const ColourLines &) const = 0; //@} /** @name Access the underlying information. */ //@{ /** * Return the number of incoming partons for this diagram. I.e. the * incoming partons plus the number of space-like lines. */ int nIncoming() const { return theNIncoming; } /** * Return the incoming, followed by the outgoing partons for this * diagram. */ const cPDVector & partons() const { return thePartons; } /** * Return the id number of this diagram. */ int id() const { return theId; } /** * Generate a tag which is unique for diagrams with the same * type of incoming and outgoing partons. */ string getTag() const; /** * Compare this diagram to another one modulo * the ids of the diagrams. */ virtual bool isSame (tcDiagPtr other) const { return nIncoming() == other->nIncoming() && partons() == other->partons(); } //@} protected: /** * To be used by sub classes to report the incoming and outgoing * particle types, and an id number. * * @param ninc the number of incoming and other space-like lines in * the diagram. * * @param parts the types of partons for each external line in the * diagram. * * @param newId the id number of this diagram. */ void partons(int ninc, const cPDVector & parts, int newId) { theNIncoming = ninc; thePartons = parts; theId = newId; } /** * Returns true if the partons(int, const cPDVector &, int) function * has been called properly from the sub class. */ bool done() const { return nIncoming() >= 0; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function. */ static void Init(); private: /** * The number of incoming partons for this diagram. */ int theNIncoming; /** * The incoming, followed by the outgoing partons for this * diagram. */ cPDVector thePartons; /** * The id number of this diagram. */ int theId; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initDiagramBase; /** * Private and non-existent assignment operator. */ DiagramBase & operator=(const DiagramBase &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of DiagramBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of DiagramBase. */ typedef Base NthBase; }; /** * This template specialization informs ThePEG about the name of the * DiagramBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::DiagramBase"; } }; /** @endcond */ } #endif /* ThePEG_DiagramBase_H */ thepeg-1.8.0.orig/MatrixElement/ReweightConstant.cc0000644000175000017500000000310511747772425020523 0ustar sunsun// -*- C++ -*- // // ReweightConstant.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ReweightConstant class. // #include "ReweightConstant.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" using namespace ThePEG; IBPtr ReweightConstant::clone() const { return new_ptr(*this); } IBPtr ReweightConstant::fullclone() const { return new_ptr(*this); } double ReweightConstant::weight() const { return C; } void ReweightConstant::persistentOutput(PersistentOStream & os) const { os << C; } void ReweightConstant::persistentInput(PersistentIStream & is, int) { is >> C; } ClassDescription ReweightConstant::initReweightConstant; // Definition of the static class description member. void ReweightConstant::Init() { static ClassDocumentation documentation ("The ReweightConstant class is a simple ReweightBase sub-class which " "simply reweight an event with a constant"); static Parameter interfaceC ("C", "The constant with which to reweight an event.", &ReweightConstant::C, 1.0, 0, 0, true, false, Interface::nolimits); interfaceC.rank(10); } thepeg-1.8.0.orig/src/0000755000175000017500000000000011756460367012735 5ustar sunsunthepeg-1.8.0.orig/src/MultiLEP.in0000644000175000017500000000135011747772425014720 0ustar sunsuncd /Defaults/Generators create ThePEG::MultiEventGenerator MultiLEPGenerator MultiEventGenerator.so set MultiLEPGenerator:RandomNumberGenerator /Defaults/Random set MultiLEPGenerator:StandardModelParameters /Defaults/StandardModel set MultiLEPGenerator:EventHandler /Defaults/Handlers/SimpleLEPHandler set MultiLEPGenerator:EventHandler:Cuts EECuts set MultiLEPGenerator:NumberOfEvents 10000 set MultiLEPGenerator:DebugLevel 1 set MultiLEPGenerator:PrintEvent 10 set MultiLEPGenerator:EventHandler:LuminosityFunction:Energy 91.2 set MultiLEPGenerator:EventHandler:DecayHandler NULL set /Defaults/Particles/Z0:NominalMass 92 do MultiLEPGenerator:AddInterface /Defaults/Random:Seed 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 saverun MultiLEP MultiLEPGenerator thepeg-1.8.0.orig/src/ThePEGDefaults.in0000644000175000017500000001517711747772425016045 0ustar sunsunmkdir /Dummy mkdir /Dummy/Decayers mkdir /Defaults mkdir /Defaults/Matchers mkdir /Defaults/Particles mkdir /Defaults/Decayers cd /Defaults/Decayers create ThePEG::FlatDecayer Flat create ThePEG::OmegaPhi3PiDecayer OmegaPhi3Pi OmegaPhi3PiDecayer.so create ThePEG::V2PPDecayer V2PP V2PPDecayer.so create ThePEG::DalitzDecayer Dalitz DalitzDecayer.so create ThePEG::Tau2HadronsDecayer Tau2Hadrons Tau2HadronsDecayer.so create ThePEG::Onium3GDecayer Onium3G Onium3GDecayer.so create ThePEG::QuarksToHadronsDecayer QsToHadrons QuarksToHadronsDecayer.so cp QsToHadrons QsTo3PlusHadrons set QsTo3PlusHadrons:MinN 3 cp QsToHadrons OniumToHadrons create ThePEG::ColourPairDecayer ColourPairs ColourPairDecayer.so create ThePEG::WeakToHadronsDecayer WeakToHadrons WeakToHadronsDecayer.so cp WeakToHadrons WeakTo3PlusHadrons set WeakTo3PlusHadrons:MinN 3 create ThePEG::DummyDecayer Dummy DummyDecayer.so cp Dummy ThresholdDummy cp Dummy NoThresholdDummy cd / create ThePEG::Matcher /Defaults/Matchers/MatchLepton create ThePEG::Matcher /Defaults/Matchers/MatchLightQuark create ThePEG::Matcher /Defaults/Matchers/MatchLightAntiQuark read ThePEGParticles.in mkdir /Defaults/MatrixElements mkdir /Defaults/Partons mkdir /Defaults/Handlers mkdir /Defaults/Generators mkdir /Defaults/Handlers/Hadronization create ThePEG::StandardRandom /Defaults/Random create ThePEG::StandardModelBase /Defaults/StandardModel create ThePEG::O1AlphaS /Defaults/AlphaS O1AlphaS.so set /Defaults/StandardModel:QCD/RunningAlphaS /Defaults/AlphaS create ThePEG::SimpleAlphaEM /Defaults/AlphaEM SimpleAlphaEM.so set /Defaults/StandardModel:EW/RunningAlphaEM /Defaults/AlphaEM create ThePEG::StandardCKM /Defaults/CKM StandardCKM.so set /Defaults/StandardModel:EW/CKM /Defaults/CKM cd /Defaults/MatrixElements create ThePEG::MEee2gZ2qq MEee2gZ2qq MEee2gZ2qq.so create ThePEG::MEGG2GG MEGG2GG MEQCD.so create ThePEG::MEQG2QG MEQG2QG create ThePEG::MEQQ2GG MEQQ2GG create ThePEG::MEQQ2QQ MEQQ2QQ create ThePEG::MEQq2Qq MEQq2Qq create ThePEG::MEGG2QQ MEGG2QQ create ThePEG::MEQQ2qq MEQQ2qq create ThePEG::MEqq2qq MEqq2qq cd /Defaults/Handlers/Hadronization create ThePEG::ClusterCollapser SimpleCollapser create ThePEG::SimpleFlavour SimpleFlavour SimpleFlavour.so create ThePEG::GaussianPtGenerator GaussianPt GaussianPtGenerator.so create ThePEG::SimpleZGenerator ZGenerator SimpleZGenerator.so set SimpleCollapser:FlavourGenerator SimpleFlavour set /Defaults/Decayers/QsToHadrons:FlavourGenerator SimpleFlavour set /Defaults/Decayers/QsTo3PlusHadrons:FlavourGenerator SimpleFlavour set /Defaults/Decayers/OniumToHadrons:FlavourGenerator SimpleFlavour set /Defaults/Decayers/WeakToHadrons:FlavourGenerator SimpleFlavour set /Defaults/Decayers/WeakTo3PlusHadrons:FlavourGenerator SimpleFlavour cd /Defaults/Partons create ThePEG::NoRemnants NoRemnants create ThePEG::NoPDF NoPDF set NoPDF:RemnantHandler NoRemnants create ThePEG::UnResolvedRemnant SimpleLeptonRemnants UnResolvedRemnant.so create ThePEG::LeptonLeptonPDF SimpleLeptonPDF LeptonLeptonPDF.so set SimpleLeptonPDF:RemnantHandler SimpleLeptonRemnants set /Defaults/Particles/e-:PDF SimpleLeptonPDF set /Defaults/Particles/e+:PDF SimpleLeptonPDF library GRVBase.so create ThePEG::GRV94L GRV94L GRV94L.so create ThePEG::GRV94M GRV94M GRV94M.so create ThePEG::SoftRemnantHandler SoftRemnants create ThePEG::SimpleBaryonRemnantDecayer BaryonRemnantDecayer set BaryonRemnantDecayer:FlavourGenerator /Defaults/Handlers/Hadronization/SimpleFlavour set BaryonRemnantDecayer:PTGenerator /Defaults/Handlers/Hadronization/GaussianPt set BaryonRemnantDecayer:ZGenerator /Defaults/Handlers/Hadronization/ZGenerator set SoftRemnants:RemnantDecayer BaryonRemnantDecayer set GRV94L:RemnantHandler SoftRemnants set GRV94M:RemnantHandler SoftRemnants set /Defaults/Particles/g:DefaultSpin 3 set /Defaults/Particles/g:Spin 3 set /Defaults/Particles/gamma:DefaultSpin 3 set /Defaults/Particles/gamma:Spin 3 set /Defaults/Particles/Z0:DefaultSpin 3 set /Defaults/Particles/Z0:Spin 3 set /Defaults/Particles/W+:DefaultSpin 3 set /Defaults/Particles/W+:Spin 3 set /Defaults/Particles/W-:DefaultSpin 3 set /Defaults/Particles/W-:Spin 3 set /Defaults/Particles/h0:DefaultSpin 1 set /Defaults/Particles/h0:Spin 1 cd /Defaults/Handlers create ThePEG::PartonExtractor StandardExtractor set StandardExtractor:NoPDF /Defaults/Partons/NoPDF newdef StandardExtractor:FlatSHatY 1 create ThePEG::PartonExtractor EEExtractor set EEExtractor:NoPDF /Defaults/Partons/NoPDF create ThePEG::DecayHandler StandardDecayHandler create ThePEG::ACDCSampler ACDCSampler ACDCSampler.so create ThePEG::StandardEventHandler SimpleLEPHandler create ThePEG::FixedCMSLuminosity FixedLEPLuminosity FixedCMSLuminosity.so set FixedLEPLuminosity:Energy 91.2 set SimpleLEPHandler:LuminosityFunction FixedLEPLuminosity set SimpleLEPHandler:DecayHandler /Defaults/Handlers/StandardDecayHandler create ThePEG::SubProcessHandler SimpleEE2QQ insert SimpleEE2QQ:MatrixElements[0] /Defaults/MatrixElements/MEee2gZ2qq set SimpleEE2QQ:PartonExtractor EEExtractor insert SimpleLEPHandler:SubProcessHandlers[0] SimpleEE2QQ set SimpleLEPHandler:BeamA /Defaults/Particles/e- set SimpleLEPHandler:BeamB /Defaults/Particles/e+ set SimpleLEPHandler:Sampler ACDCSampler library LesHouches.so library MadGraphReader.so library ReweightMinPT.so library KTClus.so library SimpleDISCut.so library SimpleKTCut.so library V2LeptonsCut.so library ReweightConstant.so cd /Defaults/Generators create ThePEG::EventGenerator SimpleLEPGenerator create ThePEG::Strategy DefaultStrategy insert DefaultStrategy:DefaultParticlesDirs[0] /Defaults/Particles set SimpleLEPGenerator:Strategy DefaultStrategy set SimpleLEPGenerator:RandomNumberGenerator /Defaults/Random set SimpleLEPGenerator:StandardModelParameters /Defaults/StandardModel set SimpleLEPGenerator:EventHandler /Defaults/Handlers/SimpleLEPHandler create ThePEG::Cuts EECuts set EECuts:MHatMin 22.36068 set SimpleLEPGenerator:EventHandler:Cuts EECuts mkdir /LesHouches cd /LesHouches create ThePEG::EventGenerator LesHouchesGenerator cp /Defaults/Random StdRandom cp /Defaults/StandardModel StandardModel cp /Defaults/AlphaS O1AlphaS set StandardModel:QCD/RunningAlphaS O1AlphaS cp /Defaults/AlphaEM AlphaEM set StandardModel:EW/RunningAlphaEM AlphaEM cp /Defaults/CKM CKM set StandardModel:EW/CKM CKM set LesHouchesGenerator:RandomNumberGenerator StdRandom set LesHouchesGenerator:StandardModelParameters StandardModel cp /Defaults/Generators/DefaultStrategy DefaultStrategy set LesHouchesGenerator:Strategy DefaultStrategy create ThePEG::LesHouchesEventHandler LesHouchesHandler cp /Defaults/Handlers/StandardExtractor QCDExtractor set LesHouchesHandler:PartonExtractor QCDExtractor set LesHouchesGenerator:EventHandler LesHouchesHandler thepeg-1.8.0.orig/src/TestLHAPDF.in0000644000175000017500000000164011747772425015065 0ustar sunsuncd /LHAPDF cp /Defaults/Partons/SoftRemnants SoftRemnants set CTEQ6ll:RemnantHandler SoftRemnants cp /Defaults/Particles/p+ p+ set p+:PDF CTEQ6ll cp /Defaults/Particles/n0 n0 set n0:PDF CTEQ6ll set nbar0:PDF CTEQ6ll set pbar-:PDF CTEQ6ll cp CTEQ6ll CTEQ5L set CTEQ5L:PDFName cteq5l.LHgrid cp CTEQ6ll GRV98nlo set GRV98nlo:PDFName GRV98nlo.LHgrid # cp CTEQ6ll MRST2001nlo create ThePEG::LHAPDF MRST2001nlo set MRST2001nlo:PDFName MRST2001nlo.LHgrid # set MRST2001nlo:MaxFlav 6 set MRST2001nlo:RemnantHandler SoftRemnants insert /Defaults/Generators/SimpleLEPGenerator:LocalParticles[0] p+ set n0:PDF CTEQ5L insert /Defaults/Generators/SimpleLEPGenerator:LocalParticles[0] n0 set nbar0:PDF GRV98nlo insert /Defaults/Generators/SimpleLEPGenerator:LocalParticles[0] nbar0 set pbar-:PDF MRST2001nlo insert /Defaults/Generators/SimpleLEPGenerator:LocalParticles[0] pbar- cd /Defaults/Generators saverun TestLHAPDF SimpleLEPGenerator thepeg-1.8.0.orig/src/ThePEGParticles.in0000644000175000017500000134377611747772425016236 0ustar sunsuncreate ThePEG::ConstituentParticleData /Defaults/Particles/d setup /Defaults/Particles/d 1 d 0.00990 0.0 0.0 0.0 -1 3 2 1 0.3250 create ThePEG::ConstituentParticleData /Defaults/Particles/dbar setup /Defaults/Particles/dbar -1 dbar 0.00990 0.0 0.0 0.0 1 -3 2 1 0.3250 makeanti /Defaults/Particles/d /Defaults/Particles/dbar create ThePEG::ConstituentParticleData /Defaults/Particles/u setup /Defaults/Particles/u 2 u 0.00560 0.0 0.0 0.0 2 3 2 1 0.3250 create ThePEG::ConstituentParticleData /Defaults/Particles/ubar setup /Defaults/Particles/ubar -2 ubar 0.00560 0.0 0.0 0.0 -2 -3 2 1 0.3250 makeanti /Defaults/Particles/u /Defaults/Particles/ubar create ThePEG::ConstituentParticleData /Defaults/Particles/s setup /Defaults/Particles/s 3 s 0.1990 0.0 0.0 0.0 -1 3 2 1 0.50 create ThePEG::ConstituentParticleData /Defaults/Particles/sbar setup /Defaults/Particles/sbar -3 sbar 0.1990 0.0 0.0 0.0 1 -3 2 1 0.50 makeanti /Defaults/Particles/s /Defaults/Particles/sbar create ThePEG::ConstituentParticleData /Defaults/Particles/c setup /Defaults/Particles/c 4 c 1.230 0.0 0.0 0.0 2 3 2 1 1.600 create ThePEG::ConstituentParticleData /Defaults/Particles/cbar setup /Defaults/Particles/cbar -4 cbar 1.230 0.0 0.0 0.0 -2 -3 2 1 1.600 makeanti /Defaults/Particles/c /Defaults/Particles/cbar create ThePEG::ConstituentParticleData /Defaults/Particles/b setup /Defaults/Particles/b 5 b 4.170 0.0 0.0 0.0 -1 3 2 1 5.0 create ThePEG::ConstituentParticleData /Defaults/Particles/bbar setup /Defaults/Particles/bbar -5 bbar 4.170 0.0 0.0 0.0 1 -3 2 1 5.0 makeanti /Defaults/Particles/b /Defaults/Particles/bbar create ThePEG::ParticleData /Defaults/Particles/t setup /Defaults/Particles/t 6 t 175.0 1.398160 13.981560 0.0 2 3 2 0 create ThePEG::ParticleData /Defaults/Particles/tbar setup /Defaults/Particles/tbar -6 tbar 175.0 1.398160 13.981560 0.0 -2 -3 2 0 makeanti /Defaults/Particles/t /Defaults/Particles/tbar create ThePEG::ParticleData /Defaults/Particles/b' setup /Defaults/Particles/b' 7 b' 400.0 0.0 0.0 0.0 -1 3 2 0 create ThePEG::ParticleData /Defaults/Particles/b'bar setup /Defaults/Particles/b'bar -7 b'bar 400.0 0.0 0.0 0.0 1 -3 2 0 makeanti /Defaults/Particles/b' /Defaults/Particles/b'bar create ThePEG::ParticleData /Defaults/Particles/t' setup /Defaults/Particles/t' 8 t' 400.0 0.0 0.0 0.0 2 3 2 0 create ThePEG::ParticleData /Defaults/Particles/t'bar setup /Defaults/Particles/t'bar -8 t'bar 400.0 0.0 0.0 0.0 -2 -3 2 0 makeanti /Defaults/Particles/t' /Defaults/Particles/t'bar create ThePEG::BeamParticleData /Defaults/Particles/e- setup /Defaults/Particles/e- 11 e- 0.000510 0.0 0.0 0.0 -3 0 2 1 create ThePEG::BeamParticleData /Defaults/Particles/e+ setup /Defaults/Particles/e+ -11 e+ 0.000510 0.0 0.0 0.0 3 0 2 1 makeanti /Defaults/Particles/e- /Defaults/Particles/e+ create ThePEG::ParticleData /Defaults/Particles/nu_e setup /Defaults/Particles/nu_e 12 nu_e 0.0 0.0 0.0 0.0 0 0 2 1 create ThePEG::ParticleData /Defaults/Particles/nu_ebar setup /Defaults/Particles/nu_ebar -12 nu_ebar 0.0 0.0 0.0 0.0 0 0 2 1 makeanti /Defaults/Particles/nu_e /Defaults/Particles/nu_ebar create ThePEG::BeamParticleData /Defaults/Particles/mu- setup /Defaults/Particles/mu- 13 mu- 0.105660 0.0 0.0 658654.0 -3 0 2 1 create ThePEG::BeamParticleData /Defaults/Particles/mu+ setup /Defaults/Particles/mu+ -13 mu+ 0.105660 0.0 0.0 658654.0 3 0 2 1 makeanti /Defaults/Particles/mu- /Defaults/Particles/mu+ create ThePEG::ParticleData /Defaults/Particles/nu_mu setup /Defaults/Particles/nu_mu 14 nu_mu 0.0 0.0 0.0 0.0 0 0 2 1 create ThePEG::ParticleData /Defaults/Particles/nu_mubar setup /Defaults/Particles/nu_mubar -14 nu_mubar 0.0 0.0 0.0 0.0 0 0 2 1 makeanti /Defaults/Particles/nu_mu /Defaults/Particles/nu_mubar create ThePEG::ParticleData /Defaults/Particles/tau- setup /Defaults/Particles/tau- 15 tau- 1.7770 0.0 0.0 0.08720 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/tau+ setup /Defaults/Particles/tau+ -15 tau+ 1.7770 0.0 0.0 0.08720 3 0 2 0 makeanti /Defaults/Particles/tau- /Defaults/Particles/tau+ create ThePEG::ParticleData /Defaults/Particles/nu_tau setup /Defaults/Particles/nu_tau 16 nu_tau 0.0 0.0 0.0 0.0 0 0 2 1 create ThePEG::ParticleData /Defaults/Particles/nu_taubar setup /Defaults/Particles/nu_taubar -16 nu_taubar 0.0 0.0 0.0 0.0 0 0 2 1 makeanti /Defaults/Particles/nu_tau /Defaults/Particles/nu_taubar create ThePEG::ParticleData /Defaults/Particles/tau'- setup /Defaults/Particles/tau'- 17 tau'- 400.0 0.0 0.0 0.0 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/tau'+ setup /Defaults/Particles/tau'+ -17 tau'+ 400.0 0.0 0.0 0.0 3 0 2 0 makeanti /Defaults/Particles/tau'- /Defaults/Particles/tau'+ create ThePEG::ParticleData /Defaults/Particles/nu'_tau setup /Defaults/Particles/nu'_tau 18 nu'_tau 400.0 0.0 0.0 0.0 0 0 2 1 create ThePEG::ParticleData /Defaults/Particles/nu'_taubar setup /Defaults/Particles/nu'_taubar -18 nu'_taubar 400.0 0.0 0.0 0.0 0 0 2 1 makeanti /Defaults/Particles/nu'_tau /Defaults/Particles/nu'_taubar create ThePEG::ConstituentParticleData /Defaults/Particles/g setup /Defaults/Particles/g 21 g 0.0 0.0 0.0 0.0 0 8 0 1 0.0 create ThePEG::BeamParticleData /Defaults/Particles/gamma setup /Defaults/Particles/gamma 22 gamma 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/Z0 setup /Defaults/Particles/Z0 23 Z0 91.1880 2.478130 24.781290 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/W+ setup /Defaults/Particles/W+ 24 W+ 80.450 2.071150 20.711490 0.0 3 0 0 0 create ThePEG::ParticleData /Defaults/Particles/W- setup /Defaults/Particles/W- -24 W- 80.450 2.071150 20.711490 0.0 -3 0 0 0 makeanti /Defaults/Particles/W+ /Defaults/Particles/W- create ThePEG::ParticleData /Defaults/Particles/h0 setup /Defaults/Particles/h0 25 h0 115.0 0.003670 0.036690 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/Z'0 setup /Defaults/Particles/Z'0 32 Z'0 500.0 14.540290 145.402940 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/Z"0 setup /Defaults/Particles/Z"0 33 Z"0 900.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/W'+ setup /Defaults/Particles/W'+ 34 W'+ 500.0 16.660990 166.609930 0.0 3 0 0 0 create ThePEG::ParticleData /Defaults/Particles/W'- setup /Defaults/Particles/W'- -34 W'- 500.0 16.660990 166.609930 0.0 -3 0 0 0 makeanti /Defaults/Particles/W'+ /Defaults/Particles/W'- create ThePEG::ParticleData /Defaults/Particles/H0 setup /Defaults/Particles/H0 35 H0 300.0 8.388420 83.884230 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/A0 setup /Defaults/Particles/A0 36 A0 300.0 3.37520 33.751950 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/H+ setup /Defaults/Particles/H+ 37 H+ 300.0 4.176690 41.766940 0.0 3 0 0 0 create ThePEG::ParticleData /Defaults/Particles/H- setup /Defaults/Particles/H- -37 H- 300.0 4.176690 41.766940 0.0 -3 0 0 0 makeanti /Defaults/Particles/H+ /Defaults/Particles/H- create ThePEG::ParticleData /Defaults/Particles/Graviton setup /Defaults/Particles/Graviton 39 Graviton 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/R0 setup /Defaults/Particles/R0 41 R0 5000.0 417.291470 4172.914670 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/Rbar0 setup /Defaults/Particles/Rbar0 -41 Rbar0 5000.0 417.291470 4172.914670 0.0 0 0 0 0 makeanti /Defaults/Particles/R0 /Defaults/Particles/Rbar0 create ThePEG::ParticleData /Defaults/Particles/LQ_ue setup /Defaults/Particles/LQ_ue 42 LQ_ue 200.0 0.391620 3.916210 0.0 -1 3 0 0 create ThePEG::ParticleData /Defaults/Particles/LQ_uebar setup /Defaults/Particles/LQ_uebar -42 LQ_uebar 200.0 0.391620 3.916210 0.0 1 -3 0 0 makeanti /Defaults/Particles/LQ_ue /Defaults/Particles/LQ_uebar create ThePEG::ParticleData /Defaults/Particles/reggeon setup /Defaults/Particles/reggeon 110 reggeon 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::BeamParticleData /Defaults/Particles/pi0 setup /Defaults/Particles/pi0 111 pi0 0.134980 0.0 0.0 0.000030 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/rho0 setup /Defaults/Particles/rho0 113 rho0 0.76850 0.1510 0.40 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/a_20 setup /Defaults/Particles/a_20 115 a_20 1.3180 0.1070 0.250 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/K_L0 setup /Defaults/Particles/K_L0 130 K_L0 0.497670 0.0 0.0 15500.0 0 0 1 1 create ThePEG::ParticleData /Defaults/Particles/pi+ setup /Defaults/Particles/pi+ 211 pi+ 0.139570 0.0 0.0 7804.50 3 0 1 1 create ThePEG::ParticleData /Defaults/Particles/pi- setup /Defaults/Particles/pi- -211 pi- 0.139570 0.0 0.0 7804.50 -3 0 1 1 makeanti /Defaults/Particles/pi+ /Defaults/Particles/pi- create ThePEG::ParticleData /Defaults/Particles/rho+ setup /Defaults/Particles/rho+ 213 rho+ 0.76690 0.1490 0.40 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/rho- setup /Defaults/Particles/rho- -213 rho- 0.76690 0.1490 0.40 0.0 -3 0 3 0 makeanti /Defaults/Particles/rho+ /Defaults/Particles/rho- create ThePEG::ParticleData /Defaults/Particles/a_2+ setup /Defaults/Particles/a_2+ 215 a_2+ 1.3180 0.1070 0.250 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/a_2- setup /Defaults/Particles/a_2- -215 a_2- 1.3180 0.1070 0.250 0.0 -3 0 5 0 makeanti /Defaults/Particles/a_2+ /Defaults/Particles/a_2- create ThePEG::ParticleData /Defaults/Particles/eta setup /Defaults/Particles/eta 221 eta 0.547450 0.0 0.0 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/omega setup /Defaults/Particles/omega 223 omega 0.781940 0.008430 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/f_2 setup /Defaults/Particles/f_2 225 f_2 1.2750 0.1850 0.170 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/K_S0 setup /Defaults/Particles/K_S0 310 K_S0 0.497670 0.0 0.0 26.7620 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/K0 setup /Defaults/Particles/K0 311 K0 0.497670 0.0 0.0 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/Kbar0 setup /Defaults/Particles/Kbar0 -311 Kbar0 0.497670 0.0 0.0 0.0 0 0 1 0 makeanti /Defaults/Particles/K0 /Defaults/Particles/Kbar0 create ThePEG::ParticleData /Defaults/Particles/K*0 setup /Defaults/Particles/K*0 313 K*0 0.89610 0.05050 0.20 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*bar0 setup /Defaults/Particles/K*bar0 -313 K*bar0 0.89610 0.05050 0.20 0.0 0 0 3 0 makeanti /Defaults/Particles/K*0 /Defaults/Particles/K*bar0 create ThePEG::ParticleData /Defaults/Particles/K*_20 setup /Defaults/Particles/K*_20 315 K*_20 1.4320 0.1090 0.120 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/K*_2bar0 setup /Defaults/Particles/K*_2bar0 -315 K*_2bar0 1.4320 0.1090 0.120 0.0 0 0 5 0 makeanti /Defaults/Particles/K*_20 /Defaults/Particles/K*_2bar0 create ThePEG::ParticleData /Defaults/Particles/K+ setup /Defaults/Particles/K+ 321 K+ 0.49360 0.0 0.0 3709.0 3 0 1 1 create ThePEG::ParticleData /Defaults/Particles/K- setup /Defaults/Particles/K- -321 K- 0.49360 0.0 0.0 3709.0 -3 0 1 1 makeanti /Defaults/Particles/K+ /Defaults/Particles/K- create ThePEG::ParticleData /Defaults/Particles/K*+ setup /Defaults/Particles/K*+ 323 K*+ 0.89160 0.04980 0.20 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*- setup /Defaults/Particles/K*- -323 K*- 0.89160 0.04980 0.20 0.0 -3 0 3 0 makeanti /Defaults/Particles/K*+ /Defaults/Particles/K*- create ThePEG::ParticleData /Defaults/Particles/K*_2+ setup /Defaults/Particles/K*_2+ 325 K*_2+ 1.4250 0.0980 0.120 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/K*_2- setup /Defaults/Particles/K*_2- -325 K*_2- 1.4250 0.0980 0.120 0.0 -3 0 5 0 makeanti /Defaults/Particles/K*_2+ /Defaults/Particles/K*_2- create ThePEG::ParticleData /Defaults/Particles/eta' setup /Defaults/Particles/eta' 331 eta' 0.957770 0.00020 0.0020 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/phi setup /Defaults/Particles/phi 333 phi 1.01940 0.004430 0.0150 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/f'_2 setup /Defaults/Particles/f'_2 335 f'_2 1.5250 0.0760 0.20 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/D+ setup /Defaults/Particles/D+ 411 D+ 1.86930 0.0 0.0 0.3170 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/D- setup /Defaults/Particles/D- -411 D- 1.86930 0.0 0.0 0.3170 -3 0 1 0 makeanti /Defaults/Particles/D+ /Defaults/Particles/D- create ThePEG::ParticleData /Defaults/Particles/D*+ setup /Defaults/Particles/D*+ 413 D*+ 2.010 0.0 0.0 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*- setup /Defaults/Particles/D*- -413 D*- 2.010 0.0 0.0 0.0 -3 0 3 0 makeanti /Defaults/Particles/D*+ /Defaults/Particles/D*- create ThePEG::ParticleData /Defaults/Particles/D*_2+ setup /Defaults/Particles/D*_2+ 415 D*_2+ 2.460 0.0230 0.120 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/D*_2- setup /Defaults/Particles/D*_2- -415 D*_2- 2.460 0.0230 0.120 0.0 -3 0 5 0 makeanti /Defaults/Particles/D*_2+ /Defaults/Particles/D*_2- create ThePEG::ParticleData /Defaults/Particles/D0 setup /Defaults/Particles/D0 421 D0 1.86450 0.0 0.0 0.12440 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/Dbar0 setup /Defaults/Particles/Dbar0 -421 Dbar0 1.86450 0.0 0.0 0.12440 0 0 1 0 makeanti /Defaults/Particles/D0 /Defaults/Particles/Dbar0 create ThePEG::ParticleData /Defaults/Particles/D*0 setup /Defaults/Particles/D*0 423 D*0 2.00670 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*bar0 setup /Defaults/Particles/D*bar0 -423 D*bar0 2.00670 0.0 0.0 0.0 0 0 3 0 makeanti /Defaults/Particles/D*0 /Defaults/Particles/D*bar0 create ThePEG::ParticleData /Defaults/Particles/D*_20 setup /Defaults/Particles/D*_20 425 D*_20 2.460 0.0230 0.120 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/D*_2bar0 setup /Defaults/Particles/D*_2bar0 -425 D*_2bar0 2.460 0.0230 0.120 0.0 0 0 5 0 makeanti /Defaults/Particles/D*_20 /Defaults/Particles/D*_2bar0 create ThePEG::ParticleData /Defaults/Particles/D_s+ setup /Defaults/Particles/D_s+ 431 D_s+ 1.96850 0.0 0.0 0.140 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/D_s- setup /Defaults/Particles/D_s- -431 D_s- 1.96850 0.0 0.0 0.140 -3 0 1 0 makeanti /Defaults/Particles/D_s+ /Defaults/Particles/D_s- create ThePEG::ParticleData /Defaults/Particles/D*_s+ setup /Defaults/Particles/D*_s+ 433 D*_s+ 2.11240 0.0 0.0 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_s- setup /Defaults/Particles/D*_s- -433 D*_s- 2.11240 0.0 0.0 0.0 -3 0 3 0 makeanti /Defaults/Particles/D*_s+ /Defaults/Particles/D*_s- create ThePEG::ParticleData /Defaults/Particles/D*_2s+ setup /Defaults/Particles/D*_2s+ 435 D*_2s+ 2.57350 0.0150 0.050 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/D*_2s- setup /Defaults/Particles/D*_2s- -435 D*_2s- 2.57350 0.0150 0.050 0.0 -3 0 5 0 makeanti /Defaults/Particles/D*_2s+ /Defaults/Particles/D*_2s- create ThePEG::ParticleData /Defaults/Particles/eta_c setup /Defaults/Particles/eta_c 441 eta_c 2.97980 0.00130 0.0050 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/Jpsi setup /Defaults/Particles/Jpsi 443 Jpsi 3.096880 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/chi_2c setup /Defaults/Particles/chi_2c 445 chi_2c 3.55620 0.0020 0.010 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/B0 setup /Defaults/Particles/B0 511 B0 5.27920 0.0 0.0 0.4680 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/Bbar0 setup /Defaults/Particles/Bbar0 -511 Bbar0 5.27920 0.0 0.0 0.4680 0 0 1 0 makeanti /Defaults/Particles/B0 /Defaults/Particles/Bbar0 create ThePEG::ParticleData /Defaults/Particles/B*0 setup /Defaults/Particles/B*0 513 B*0 5.32480 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*bar0 setup /Defaults/Particles/B*bar0 -513 B*bar0 5.32480 0.0 0.0 0.0 0 0 3 0 makeanti /Defaults/Particles/B*0 /Defaults/Particles/B*bar0 create ThePEG::ParticleData /Defaults/Particles/B*_20 setup /Defaults/Particles/B*_20 515 B*_20 5.830 0.020 0.050 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/B*_2bar0 setup /Defaults/Particles/B*_2bar0 -515 B*_2bar0 5.830 0.020 0.050 0.0 0 0 5 0 makeanti /Defaults/Particles/B*_20 /Defaults/Particles/B*_2bar0 create ThePEG::ParticleData /Defaults/Particles/B+ setup /Defaults/Particles/B+ 521 B+ 5.27890 0.0 0.0 0.4620 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B- setup /Defaults/Particles/B- -521 B- 5.27890 0.0 0.0 0.4620 -3 0 1 0 makeanti /Defaults/Particles/B+ /Defaults/Particles/B- create ThePEG::ParticleData /Defaults/Particles/B*+ setup /Defaults/Particles/B*+ 523 B*+ 5.32480 0.0 0.0 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*- setup /Defaults/Particles/B*- -523 B*- 5.32480 0.0 0.0 0.0 -3 0 3 0 makeanti /Defaults/Particles/B*+ /Defaults/Particles/B*- create ThePEG::ParticleData /Defaults/Particles/B*_2+ setup /Defaults/Particles/B*_2+ 525 B*_2+ 5.830 0.020 0.050 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/B*_2- setup /Defaults/Particles/B*_2- -525 B*_2- 5.830 0.020 0.050 0.0 -3 0 5 0 makeanti /Defaults/Particles/B*_2+ /Defaults/Particles/B*_2- create ThePEG::ParticleData /Defaults/Particles/B_s0 setup /Defaults/Particles/B_s0 531 B_s0 5.36930 0.0 0.0 0.4830 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B_sbar0 setup /Defaults/Particles/B_sbar0 -531 B_sbar0 5.36930 0.0 0.0 0.4830 0 0 1 0 makeanti /Defaults/Particles/B_s0 /Defaults/Particles/B_sbar0 create ThePEG::ParticleData /Defaults/Particles/B*_s0 setup /Defaults/Particles/B*_s0 533 B*_s0 5.41630 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_sbar0 setup /Defaults/Particles/B*_sbar0 -533 B*_sbar0 5.41630 0.0 0.0 0.0 0 0 3 0 makeanti /Defaults/Particles/B*_s0 /Defaults/Particles/B*_sbar0 create ThePEG::ParticleData /Defaults/Particles/B*_2s0 setup /Defaults/Particles/B*_2s0 535 B*_2s0 6.070 0.020 0.050 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/B*_2sbar0 setup /Defaults/Particles/B*_2sbar0 -535 B*_2sbar0 6.070 0.020 0.050 0.0 0 0 5 0 makeanti /Defaults/Particles/B*_2s0 /Defaults/Particles/B*_2sbar0 create ThePEG::ParticleData /Defaults/Particles/B_c+ setup /Defaults/Particles/B_c+ 541 B_c+ 6.5940 0.0 0.0 0.150 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B_c- setup /Defaults/Particles/B_c- -541 B_c- 6.5940 0.0 0.0 0.150 -3 0 1 0 makeanti /Defaults/Particles/B_c+ /Defaults/Particles/B_c- create ThePEG::ParticleData /Defaults/Particles/B*_c+ setup /Defaults/Particles/B*_c+ 543 B*_c+ 6.6020 0.0 0.0 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_c- setup /Defaults/Particles/B*_c- -543 B*_c- 6.6020 0.0 0.0 0.0 -3 0 3 0 makeanti /Defaults/Particles/B*_c+ /Defaults/Particles/B*_c- create ThePEG::ParticleData /Defaults/Particles/B*_2c+ setup /Defaults/Particles/B*_2c+ 545 B*_2c+ 7.350 0.020 0.050 0.0 3 0 5 0 create ThePEG::ParticleData /Defaults/Particles/B*_2c- setup /Defaults/Particles/B*_2c- -545 B*_2c- 7.350 0.020 0.050 0.0 -3 0 5 0 makeanti /Defaults/Particles/B*_2c+ /Defaults/Particles/B*_2c- create ThePEG::ParticleData /Defaults/Particles/eta_b setup /Defaults/Particles/eta_b 551 eta_b 9.40 0.0 0.0 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/Upsilon setup /Defaults/Particles/Upsilon 553 Upsilon 9.46030 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/chi_2b setup /Defaults/Particles/chi_2b 555 chi_2b 9.91320 0.0 0.0 0.0 0 0 5 0 create ThePEG::ParticleData /Defaults/Particles/pomeron setup /Defaults/Particles/pomeron 990 pomeron 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ConstituentParticleData /Defaults/Particles/dd_1 setup /Defaults/Particles/dd_1 1103 dd_1 0.771330 0.0 0.0 0.0 -2 -3 3 1 0.6500 create ThePEG::ConstituentParticleData /Defaults/Particles/dd_1bar setup /Defaults/Particles/dd_1bar -1103 dd_1bar 0.771330 0.0 0.0 0.0 2 3 3 1 0.6500 makeanti /Defaults/Particles/dd_1 /Defaults/Particles/dd_1bar create ThePEG::ParticleData /Defaults/Particles/Delta- setup /Defaults/Particles/Delta- 1114 Delta- 1.2340 0.120 0.140 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Deltabar+ setup /Defaults/Particles/Deltabar+ -1114 Deltabar+ 1.2340 0.120 0.140 0.0 3 0 4 0 makeanti /Defaults/Particles/Delta- /Defaults/Particles/Deltabar+ create ThePEG::ConstituentParticleData /Defaults/Particles/ud_0 setup /Defaults/Particles/ud_0 2101 ud_0 0.579330 0.0 0.0 0.0 1 -3 1 1 0.6500 create ThePEG::ConstituentParticleData /Defaults/Particles/ud_0bar setup /Defaults/Particles/ud_0bar -2101 ud_0bar 0.579330 0.0 0.0 0.0 -1 3 1 1 0.6500 makeanti /Defaults/Particles/ud_0 /Defaults/Particles/ud_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/ud_1 setup /Defaults/Particles/ud_1 2103 ud_1 0.771330 0.0 0.0 0.0 1 -3 3 1 0.6500 create ThePEG::ConstituentParticleData /Defaults/Particles/ud_1bar setup /Defaults/Particles/ud_1bar -2103 ud_1bar 0.771330 0.0 0.0 0.0 -1 3 3 1 0.6500 makeanti /Defaults/Particles/ud_1 /Defaults/Particles/ud_1bar create ThePEG::BeamParticleData /Defaults/Particles/n0 setup /Defaults/Particles/n0 2112 n0 0.939570 0.0 0.0 0.0 0 0 2 1 create ThePEG::BeamParticleData /Defaults/Particles/nbar0 setup /Defaults/Particles/nbar0 -2112 nbar0 0.939570 0.0 0.0 0.0 0 0 2 1 makeanti /Defaults/Particles/n0 /Defaults/Particles/nbar0 create ThePEG::ParticleData /Defaults/Particles/Delta0 setup /Defaults/Particles/Delta0 2114 Delta0 1.2330 0.120 0.140 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Deltabar0 setup /Defaults/Particles/Deltabar0 -2114 Deltabar0 1.2330 0.120 0.140 0.0 0 0 4 0 makeanti /Defaults/Particles/Delta0 /Defaults/Particles/Deltabar0 create ThePEG::ConstituentParticleData /Defaults/Particles/uu_1 setup /Defaults/Particles/uu_1 2203 uu_1 0.771330 0.0 0.0 0.0 4 -3 3 1 0.6500 create ThePEG::ConstituentParticleData /Defaults/Particles/uu_1bar setup /Defaults/Particles/uu_1bar -2203 uu_1bar 0.771330 0.0 0.0 0.0 -4 3 3 1 0.6500 makeanti /Defaults/Particles/uu_1 /Defaults/Particles/uu_1bar create ThePEG::BeamParticleData /Defaults/Particles/p+ setup /Defaults/Particles/p+ 2212 p+ 0.938270 0.0 0.0 0.0 3 0 2 1 create ThePEG::BeamParticleData /Defaults/Particles/pbar- setup /Defaults/Particles/pbar- -2212 pbar- 0.938270 0.0 0.0 0.0 -3 0 2 1 makeanti /Defaults/Particles/p+ /Defaults/Particles/pbar- create ThePEG::ParticleData /Defaults/Particles/Delta+ setup /Defaults/Particles/Delta+ 2214 Delta+ 1.2320 0.120 0.140 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Deltabar- setup /Defaults/Particles/Deltabar- -2214 Deltabar- 1.2320 0.120 0.140 0.0 -3 0 4 0 makeanti /Defaults/Particles/Delta+ /Defaults/Particles/Deltabar- create ThePEG::ParticleData /Defaults/Particles/Delta++ setup /Defaults/Particles/Delta++ 2224 Delta++ 1.2310 0.120 0.140 0.0 6 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Deltabar-- setup /Defaults/Particles/Deltabar-- -2224 Deltabar-- 1.2310 0.120 0.140 0.0 -6 0 4 0 makeanti /Defaults/Particles/Delta++ /Defaults/Particles/Deltabar-- create ThePEG::ConstituentParticleData /Defaults/Particles/sd_0 setup /Defaults/Particles/sd_0 3101 sd_0 0.804730 0.0 0.0 0.0 -2 -3 1 1 0.8250 create ThePEG::ConstituentParticleData /Defaults/Particles/sd_0bar setup /Defaults/Particles/sd_0bar -3101 sd_0bar 0.804730 0.0 0.0 0.0 2 3 1 1 0.8250 makeanti /Defaults/Particles/sd_0 /Defaults/Particles/sd_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/sd_1 setup /Defaults/Particles/sd_1 3103 sd_1 0.929530 0.0 0.0 0.0 -2 -3 3 1 0.8250 create ThePEG::ConstituentParticleData /Defaults/Particles/sd_1bar setup /Defaults/Particles/sd_1bar -3103 sd_1bar 0.929530 0.0 0.0 0.0 2 3 3 1 0.8250 makeanti /Defaults/Particles/sd_1 /Defaults/Particles/sd_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma- setup /Defaults/Particles/Sigma- 3112 Sigma- 1.197440 0.0 0.0 44.340 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigmabar+ setup /Defaults/Particles/Sigmabar+ -3112 Sigmabar+ 1.197440 0.0 0.0 44.340 3 0 2 0 makeanti /Defaults/Particles/Sigma- /Defaults/Particles/Sigmabar+ create ThePEG::ParticleData /Defaults/Particles/Sigma*- setup /Defaults/Particles/Sigma*- 3114 Sigma*- 1.38720 0.03940 0.040 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*bar+ setup /Defaults/Particles/Sigma*bar+ -3114 Sigma*bar+ 1.38720 0.03940 0.040 0.0 3 0 4 0 makeanti /Defaults/Particles/Sigma*- /Defaults/Particles/Sigma*bar+ create ThePEG::ParticleData /Defaults/Particles/Lambda0 setup /Defaults/Particles/Lambda0 3122 Lambda0 1.115680 0.0 0.0 78.880 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Lambdabar0 setup /Defaults/Particles/Lambdabar0 -3122 Lambdabar0 1.115680 0.0 0.0 78.880 0 0 2 0 makeanti /Defaults/Particles/Lambda0 /Defaults/Particles/Lambdabar0 create ThePEG::ConstituentParticleData /Defaults/Particles/su_0 setup /Defaults/Particles/su_0 3201 su_0 0.804730 0.0 0.0 0.0 1 -3 1 1 0.8250 create ThePEG::ConstituentParticleData /Defaults/Particles/su_0bar setup /Defaults/Particles/su_0bar -3201 su_0bar 0.804730 0.0 0.0 0.0 -1 3 1 1 0.8250 makeanti /Defaults/Particles/su_0 /Defaults/Particles/su_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/su_1 setup /Defaults/Particles/su_1 3203 su_1 0.929530 0.0 0.0 0.0 1 -3 3 1 0.8250 create ThePEG::ConstituentParticleData /Defaults/Particles/su_1bar setup /Defaults/Particles/su_1bar -3203 su_1bar 0.929530 0.0 0.0 0.0 -1 3 3 1 0.8250 makeanti /Defaults/Particles/su_1 /Defaults/Particles/su_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma0 setup /Defaults/Particles/Sigma0 3212 Sigma0 1.192550 0.0 0.0 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigmabar0 setup /Defaults/Particles/Sigmabar0 -3212 Sigmabar0 1.192550 0.0 0.0 0.0 0 0 2 0 makeanti /Defaults/Particles/Sigma0 /Defaults/Particles/Sigmabar0 create ThePEG::ParticleData /Defaults/Particles/Sigma*0 setup /Defaults/Particles/Sigma*0 3214 Sigma*0 1.38370 0.0360 0.0350 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*bar0 setup /Defaults/Particles/Sigma*bar0 -3214 Sigma*bar0 1.38370 0.0360 0.0350 0.0 0 0 4 0 makeanti /Defaults/Particles/Sigma*0 /Defaults/Particles/Sigma*bar0 create ThePEG::ParticleData /Defaults/Particles/Sigma+ setup /Defaults/Particles/Sigma+ 3222 Sigma+ 1.189370 0.0 0.0 23.960 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigmabar- setup /Defaults/Particles/Sigmabar- -3222 Sigmabar- 1.189370 0.0 0.0 23.960 -3 0 2 0 makeanti /Defaults/Particles/Sigma+ /Defaults/Particles/Sigmabar- create ThePEG::ParticleData /Defaults/Particles/Sigma*+ setup /Defaults/Particles/Sigma*+ 3224 Sigma*+ 1.38280 0.03580 0.0350 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*bar- setup /Defaults/Particles/Sigma*bar- -3224 Sigma*bar- 1.38280 0.03580 0.0350 0.0 -3 0 4 0 makeanti /Defaults/Particles/Sigma*+ /Defaults/Particles/Sigma*bar- create ThePEG::ConstituentParticleData /Defaults/Particles/ss_1 setup /Defaults/Particles/ss_1 3303 ss_1 1.093610 0.0 0.0 0.0 -2 -3 3 1 1.0 create ThePEG::ConstituentParticleData /Defaults/Particles/ss_1bar setup /Defaults/Particles/ss_1bar -3303 ss_1bar 1.093610 0.0 0.0 0.0 2 3 3 1 1.0 makeanti /Defaults/Particles/ss_1 /Defaults/Particles/ss_1bar create ThePEG::ParticleData /Defaults/Particles/Xi- setup /Defaults/Particles/Xi- 3312 Xi- 1.32130 0.0 0.0 49.10 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xibar+ setup /Defaults/Particles/Xibar+ -3312 Xibar+ 1.32130 0.0 0.0 49.10 3 0 2 0 makeanti /Defaults/Particles/Xi- /Defaults/Particles/Xibar+ create ThePEG::ParticleData /Defaults/Particles/Xi*- setup /Defaults/Particles/Xi*- 3314 Xi*- 1.5350 0.00990 0.050 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*bar+ setup /Defaults/Particles/Xi*bar+ -3314 Xi*bar+ 1.5350 0.00990 0.050 0.0 3 0 4 0 makeanti /Defaults/Particles/Xi*- /Defaults/Particles/Xi*bar+ create ThePEG::ParticleData /Defaults/Particles/Xi0 setup /Defaults/Particles/Xi0 3322 Xi0 1.31490 0.0 0.0 87.10 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xibar0 setup /Defaults/Particles/Xibar0 -3322 Xibar0 1.31490 0.0 0.0 87.10 0 0 2 0 makeanti /Defaults/Particles/Xi0 /Defaults/Particles/Xibar0 create ThePEG::ParticleData /Defaults/Particles/Xi*0 setup /Defaults/Particles/Xi*0 3324 Xi*0 1.53180 0.00910 0.050 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*bar0 setup /Defaults/Particles/Xi*bar0 -3324 Xi*bar0 1.53180 0.00910 0.050 0.0 0 0 4 0 makeanti /Defaults/Particles/Xi*0 /Defaults/Particles/Xi*bar0 create ThePEG::ParticleData /Defaults/Particles/Omega- setup /Defaults/Particles/Omega- 3334 Omega- 1.672450 0.0 0.0 24.60 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omegabar+ setup /Defaults/Particles/Omegabar+ -3334 Omegabar+ 1.672450 0.0 0.0 24.60 3 0 4 0 makeanti /Defaults/Particles/Omega- /Defaults/Particles/Omegabar+ create ThePEG::ConstituentParticleData /Defaults/Particles/cd_0 setup /Defaults/Particles/cd_0 4101 cd_0 1.969080 0.0 0.0 0.0 1 -3 1 1 1.925 create ThePEG::ConstituentParticleData /Defaults/Particles/cd_0bar setup /Defaults/Particles/cd_0bar -4101 cd_0bar 1.969080 0.0 0.0 0.0 -1 3 1 1 1.925 makeanti /Defaults/Particles/cd_0 /Defaults/Particles/cd_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/cd_1 setup /Defaults/Particles/cd_1 4103 cd_1 2.008080 0.0 0.0 0.0 1 -3 3 1 1.925 create ThePEG::ConstituentParticleData /Defaults/Particles/cd_1bar setup /Defaults/Particles/cd_1bar -4103 cd_1bar 2.008080 0.0 0.0 0.0 -1 3 3 1 1.925 makeanti /Defaults/Particles/cd_1 /Defaults/Particles/cd_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma_c0 setup /Defaults/Particles/Sigma_c0 4112 Sigma_c0 2.45210 0.0 0.0 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_cbar0 setup /Defaults/Particles/Sigma_cbar0 -4112 Sigma_cbar0 2.45210 0.0 0.0 0.0 0 0 2 0 makeanti /Defaults/Particles/Sigma_c0 /Defaults/Particles/Sigma_cbar0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_c0 setup /Defaults/Particles/Sigma*_c0 4114 Sigma*_c0 2.50 0.0 0.0 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_cbar0 setup /Defaults/Particles/Sigma*_cbar0 -4114 Sigma*_cbar0 2.50 0.0 0.0 0.0 0 0 4 0 makeanti /Defaults/Particles/Sigma*_c0 /Defaults/Particles/Sigma*_cbar0 create ThePEG::ParticleData /Defaults/Particles/Lambda_c+ setup /Defaults/Particles/Lambda_c+ 4122 Lambda_c+ 2.28490 0.0 0.0 0.06180 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Lambda_cbar- setup /Defaults/Particles/Lambda_cbar- -4122 Lambda_cbar- 2.28490 0.0 0.0 0.06180 -3 0 2 0 makeanti /Defaults/Particles/Lambda_c+ /Defaults/Particles/Lambda_cbar- create ThePEG::ParticleData /Defaults/Particles/Xi_c0 setup /Defaults/Particles/Xi_c0 4132 Xi_c0 2.47030 0.0 0.0 0.0290 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_cbar0 setup /Defaults/Particles/Xi_cbar0 -4132 Xi_cbar0 2.47030 0.0 0.0 0.0290 0 0 2 0 makeanti /Defaults/Particles/Xi_c0 /Defaults/Particles/Xi_cbar0 create ThePEG::ConstituentParticleData /Defaults/Particles/cu_0 setup /Defaults/Particles/cu_0 4201 cu_0 1.969080 0.0 0.0 0.0 4 -3 1 1 1.925 create ThePEG::ConstituentParticleData /Defaults/Particles/cu_0bar setup /Defaults/Particles/cu_0bar -4201 cu_0bar 1.969080 0.0 0.0 0.0 -4 3 1 1 1.925 makeanti /Defaults/Particles/cu_0 /Defaults/Particles/cu_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/cu_1 setup /Defaults/Particles/cu_1 4203 cu_1 2.008080 0.0 0.0 0.0 4 -3 3 1 1.925 create ThePEG::ConstituentParticleData /Defaults/Particles/cu_1bar setup /Defaults/Particles/cu_1bar -4203 cu_1bar 2.008080 0.0 0.0 0.0 -4 3 3 1 1.925 makeanti /Defaults/Particles/cu_1 /Defaults/Particles/cu_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma_c+ setup /Defaults/Particles/Sigma_c+ 4212 Sigma_c+ 2.45350 0.0 0.0 0.0 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_cbar- setup /Defaults/Particles/Sigma_cbar- -4212 Sigma_cbar- 2.45350 0.0 0.0 0.0 -3 0 2 0 makeanti /Defaults/Particles/Sigma_c+ /Defaults/Particles/Sigma_cbar- create ThePEG::ParticleData /Defaults/Particles/Sigma*_c+ setup /Defaults/Particles/Sigma*_c+ 4214 Sigma*_c+ 2.50 0.0 0.0 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_cbar- setup /Defaults/Particles/Sigma*_cbar- -4214 Sigma*_cbar- 2.50 0.0 0.0 0.0 -3 0 4 0 makeanti /Defaults/Particles/Sigma*_c+ /Defaults/Particles/Sigma*_cbar- create ThePEG::ParticleData /Defaults/Particles/Sigma_c++ setup /Defaults/Particles/Sigma_c++ 4222 Sigma_c++ 2.45290 0.0 0.0 0.0 6 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_cbar-- setup /Defaults/Particles/Sigma_cbar-- -4222 Sigma_cbar-- 2.45290 0.0 0.0 0.0 -6 0 2 0 makeanti /Defaults/Particles/Sigma_c++ /Defaults/Particles/Sigma_cbar-- create ThePEG::ParticleData /Defaults/Particles/Sigma*_c++ setup /Defaults/Particles/Sigma*_c++ 4224 Sigma*_c++ 2.50 0.0 0.0 0.0 6 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_cbar-- setup /Defaults/Particles/Sigma*_cbar-- -4224 Sigma*_cbar-- 2.50 0.0 0.0 0.0 -6 0 4 0 makeanti /Defaults/Particles/Sigma*_c++ /Defaults/Particles/Sigma*_cbar-- create ThePEG::ParticleData /Defaults/Particles/Xi_c+ setup /Defaults/Particles/Xi_c+ 4232 Xi_c+ 2.46560 0.0 0.0 0.1060 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_cbar- setup /Defaults/Particles/Xi_cbar- -4232 Xi_cbar- 2.46560 0.0 0.0 0.1060 -3 0 2 0 makeanti /Defaults/Particles/Xi_c+ /Defaults/Particles/Xi_cbar- create ThePEG::ConstituentParticleData /Defaults/Particles/cs_0 setup /Defaults/Particles/cs_0 4301 cs_0 2.154320 0.0 0.0 0.0 1 -3 1 1 2.100 create ThePEG::ConstituentParticleData /Defaults/Particles/cs_0bar setup /Defaults/Particles/cs_0bar -4301 cs_0bar 2.154320 0.0 0.0 0.0 -1 3 1 1 2.100 makeanti /Defaults/Particles/cs_0 /Defaults/Particles/cs_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/cs_1 setup /Defaults/Particles/cs_1 4303 cs_1 2.179670 0.0 0.0 0.0 1 -3 3 1 2.100 create ThePEG::ConstituentParticleData /Defaults/Particles/cs_1bar setup /Defaults/Particles/cs_1bar -4303 cs_1bar 2.179670 0.0 0.0 0.0 -1 3 3 1 2.100 makeanti /Defaults/Particles/cs_1 /Defaults/Particles/cs_1bar create ThePEG::ParticleData /Defaults/Particles/Xi'_c0 setup /Defaults/Particles/Xi'_c0 4312 Xi'_c0 2.550 0.0 0.0 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_cbar0 setup /Defaults/Particles/Xi'_cbar0 -4312 Xi'_cbar0 2.550 0.0 0.0 0.0 0 0 2 0 makeanti /Defaults/Particles/Xi'_c0 /Defaults/Particles/Xi'_cbar0 create ThePEG::ParticleData /Defaults/Particles/Xi*_c0 setup /Defaults/Particles/Xi*_c0 4314 Xi*_c0 2.630 0.0 0.0 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_cbar0 setup /Defaults/Particles/Xi*_cbar0 -4314 Xi*_cbar0 2.630 0.0 0.0 0.0 0 0 4 0 makeanti /Defaults/Particles/Xi*_c0 /Defaults/Particles/Xi*_cbar0 create ThePEG::ParticleData /Defaults/Particles/Xi'_c+ setup /Defaults/Particles/Xi'_c+ 4322 Xi'_c+ 2.550 0.0 0.0 0.0 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_cbar- setup /Defaults/Particles/Xi'_cbar- -4322 Xi'_cbar- 2.550 0.0 0.0 0.0 -3 0 2 0 makeanti /Defaults/Particles/Xi'_c+ /Defaults/Particles/Xi'_cbar- create ThePEG::ParticleData /Defaults/Particles/Xi*_c+ setup /Defaults/Particles/Xi*_c+ 4324 Xi*_c+ 2.630 0.0 0.0 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_cbar- setup /Defaults/Particles/Xi*_cbar- -4324 Xi*_cbar- 2.630 0.0 0.0 0.0 -3 0 4 0 makeanti /Defaults/Particles/Xi*_c+ /Defaults/Particles/Xi*_cbar- create ThePEG::ParticleData /Defaults/Particles/Omega_c0 setup /Defaults/Particles/Omega_c0 4332 Omega_c0 2.7040 0.0 0.0 0.0190 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_cbar0 setup /Defaults/Particles/Omega_cbar0 -4332 Omega_cbar0 2.7040 0.0 0.0 0.0190 0 0 2 0 makeanti /Defaults/Particles/Omega_c0 /Defaults/Particles/Omega_cbar0 create ThePEG::ParticleData /Defaults/Particles/Omega*_c0 setup /Defaults/Particles/Omega*_c0 4334 Omega*_c0 2.80 0.0 0.0 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_cbar0 setup /Defaults/Particles/Omega*_cbar0 -4334 Omega*_cbar0 2.80 0.0 0.0 0.0 0 0 4 0 makeanti /Defaults/Particles/Omega*_c0 /Defaults/Particles/Omega*_cbar0 create ThePEG::ConstituentParticleData /Defaults/Particles/cc_1 setup /Defaults/Particles/cc_1 4403 cc_1 3.275310 0.0 0.0 0.0 4 -3 3 1 3.200 create ThePEG::ConstituentParticleData /Defaults/Particles/cc_1bar setup /Defaults/Particles/cc_1bar -4403 cc_1bar 3.275310 0.0 0.0 0.0 -4 3 3 1 3.200 makeanti /Defaults/Particles/cc_1 /Defaults/Particles/cc_1bar create ThePEG::ParticleData /Defaults/Particles/Xi_cc+ setup /Defaults/Particles/Xi_cc+ 4412 Xi_cc+ 3.597980 0.0 0.0 0.10 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_ccbar- setup /Defaults/Particles/Xi_ccbar- -4412 Xi_ccbar- 3.597980 0.0 0.0 0.10 -3 0 2 0 makeanti /Defaults/Particles/Xi_cc+ /Defaults/Particles/Xi_ccbar- create ThePEG::ParticleData /Defaults/Particles/Xi*_cc+ setup /Defaults/Particles/Xi*_cc+ 4414 Xi*_cc+ 3.656480 0.0 0.0 0.10 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_ccbar- setup /Defaults/Particles/Xi*_ccbar- -4414 Xi*_ccbar- 3.656480 0.0 0.0 0.10 -3 0 4 0 makeanti /Defaults/Particles/Xi*_cc+ /Defaults/Particles/Xi*_ccbar- create ThePEG::ParticleData /Defaults/Particles/Xi_cc++ setup /Defaults/Particles/Xi_cc++ 4422 Xi_cc++ 3.597980 0.0 0.0 0.10 6 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_ccbar-- setup /Defaults/Particles/Xi_ccbar-- -4422 Xi_ccbar-- 3.597980 0.0 0.0 0.10 -6 0 2 0 makeanti /Defaults/Particles/Xi_cc++ /Defaults/Particles/Xi_ccbar-- create ThePEG::ParticleData /Defaults/Particles/Xi*_cc++ setup /Defaults/Particles/Xi*_cc++ 4424 Xi*_cc++ 3.656480 0.0 0.0 0.10 6 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_ccbar-- setup /Defaults/Particles/Xi*_ccbar-- -4424 Xi*_ccbar-- 3.656480 0.0 0.0 0.10 -6 0 4 0 makeanti /Defaults/Particles/Xi*_cc++ /Defaults/Particles/Xi*_ccbar-- create ThePEG::ParticleData /Defaults/Particles/Omega_cc+ setup /Defaults/Particles/Omega_cc+ 4432 Omega_cc+ 3.786630 0.0 0.0 0.10 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_ccbar- setup /Defaults/Particles/Omega_ccbar- -4432 Omega_ccbar- 3.786630 0.0 0.0 0.10 -3 0 2 0 makeanti /Defaults/Particles/Omega_cc+ /Defaults/Particles/Omega_ccbar- create ThePEG::ParticleData /Defaults/Particles/Omega*_cc+ setup /Defaults/Particles/Omega*_cc+ 4434 Omega*_cc+ 3.824660 0.0 0.0 0.10 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_ccbar- setup /Defaults/Particles/Omega*_ccbar- -4434 Omega*_ccbar- 3.824660 0.0 0.0 0.10 -3 0 4 0 makeanti /Defaults/Particles/Omega*_cc+ /Defaults/Particles/Omega*_ccbar- create ThePEG::ParticleData /Defaults/Particles/Omega*_ccc++ setup /Defaults/Particles/Omega*_ccc++ 4444 Omega*_ccc++ 4.915940 0.0 0.0 0.10 6 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_cccbar- setup /Defaults/Particles/Omega*_cccbar- -4444 Omega*_cccbar- 4.915940 0.0 0.0 0.10 -6 0 4 0 makeanti /Defaults/Particles/Omega*_ccc++ /Defaults/Particles/Omega*_cccbar- create ThePEG::ConstituentParticleData /Defaults/Particles/bd_0 setup /Defaults/Particles/bd_0 5101 bd_0 5.388970 0.0 0.0 0.0 -2 -3 1 1 5.325 create ThePEG::ConstituentParticleData /Defaults/Particles/bd_0bar setup /Defaults/Particles/bd_0bar -5101 bd_0bar 5.388970 0.0 0.0 0.0 2 3 1 1 5.325 makeanti /Defaults/Particles/bd_0 /Defaults/Particles/bd_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/bd_1 setup /Defaults/Particles/bd_1 5103 bd_1 5.401450 0.0 0.0 0.0 -2 -3 3 1 5.325 create ThePEG::ConstituentParticleData /Defaults/Particles/bd_1bar setup /Defaults/Particles/bd_1bar -5103 bd_1bar 5.401450 0.0 0.0 0.0 2 3 3 1 5.325 makeanti /Defaults/Particles/bd_1 /Defaults/Particles/bd_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma_b- setup /Defaults/Particles/Sigma_b- 5112 Sigma_b- 5.80 0.0 0.0 0.0 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_bbar+ setup /Defaults/Particles/Sigma_bbar+ -5112 Sigma_bbar+ 5.80 0.0 0.0 0.0 3 0 2 0 makeanti /Defaults/Particles/Sigma_b- /Defaults/Particles/Sigma_bbar+ create ThePEG::ParticleData /Defaults/Particles/Sigma*_b- setup /Defaults/Particles/Sigma*_b- 5114 Sigma*_b- 5.810 0.0 0.0 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_bbar+ setup /Defaults/Particles/Sigma*_bbar+ -5114 Sigma*_bbar+ 5.810 0.0 0.0 0.0 3 0 4 0 makeanti /Defaults/Particles/Sigma*_b- /Defaults/Particles/Sigma*_bbar+ create ThePEG::ParticleData /Defaults/Particles/Lambda_b0 setup /Defaults/Particles/Lambda_b0 5122 Lambda_b0 5.6410 0.0 0.0 0.3420 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Lambda_bbar0 setup /Defaults/Particles/Lambda_bbar0 -5122 Lambda_bbar0 5.6410 0.0 0.0 0.3420 0 0 2 0 makeanti /Defaults/Particles/Lambda_b0 /Defaults/Particles/Lambda_bbar0 create ThePEG::ParticleData /Defaults/Particles/Xi_b- setup /Defaults/Particles/Xi_b- 5132 Xi_b- 5.840 0.0 0.0 0.3870 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bbar+ setup /Defaults/Particles/Xi_bbar+ -5132 Xi_bbar+ 5.840 0.0 0.0 0.3870 3 0 2 0 makeanti /Defaults/Particles/Xi_b- /Defaults/Particles/Xi_bbar+ create ThePEG::ParticleData /Defaults/Particles/Xi_bc0 setup /Defaults/Particles/Xi_bc0 5142 Xi_bc0 7.005750 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bcbar0 setup /Defaults/Particles/Xi_bcbar0 -5142 Xi_bcbar0 7.005750 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Xi_bc0 /Defaults/Particles/Xi_bcbar0 create ThePEG::ConstituentParticleData /Defaults/Particles/bu_0 setup /Defaults/Particles/bu_0 5201 bu_0 5.388970 0.0 0.0 0.0 1 -3 1 1 5.325 create ThePEG::ConstituentParticleData /Defaults/Particles/bu_0bar setup /Defaults/Particles/bu_0bar -5201 bu_0bar 5.388970 0.0 0.0 0.0 -1 3 1 1 5.325 makeanti /Defaults/Particles/bu_0 /Defaults/Particles/bu_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/bu_1 setup /Defaults/Particles/bu_1 5203 bu_1 5.401450 0.0 0.0 0.0 1 -3 3 1 5.325 create ThePEG::ConstituentParticleData /Defaults/Particles/bu_1bar setup /Defaults/Particles/bu_1bar -5203 bu_1bar 5.401450 0.0 0.0 0.0 -1 3 3 1 5.325 makeanti /Defaults/Particles/bu_1 /Defaults/Particles/bu_1bar create ThePEG::ParticleData /Defaults/Particles/Sigma_b0 setup /Defaults/Particles/Sigma_b0 5212 Sigma_b0 5.80 0.0 0.0 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_bbar0 setup /Defaults/Particles/Sigma_bbar0 -5212 Sigma_bbar0 5.80 0.0 0.0 0.0 0 0 2 0 makeanti /Defaults/Particles/Sigma_b0 /Defaults/Particles/Sigma_bbar0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_b0 setup /Defaults/Particles/Sigma*_b0 5214 Sigma*_b0 5.810 0.0 0.0 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_bbar0 setup /Defaults/Particles/Sigma*_bbar0 -5214 Sigma*_bbar0 5.810 0.0 0.0 0.0 0 0 4 0 makeanti /Defaults/Particles/Sigma*_b0 /Defaults/Particles/Sigma*_bbar0 create ThePEG::ParticleData /Defaults/Particles/Sigma_b+ setup /Defaults/Particles/Sigma_b+ 5222 Sigma_b+ 5.80 0.0 0.0 0.0 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Sigma_bbar- setup /Defaults/Particles/Sigma_bbar- -5222 Sigma_bbar- 5.80 0.0 0.0 0.0 -3 0 2 0 makeanti /Defaults/Particles/Sigma_b+ /Defaults/Particles/Sigma_bbar- create ThePEG::ParticleData /Defaults/Particles/Sigma*_b+ setup /Defaults/Particles/Sigma*_b+ 5224 Sigma*_b+ 5.810 0.0 0.0 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Sigma*_bbar- setup /Defaults/Particles/Sigma*_bbar- -5224 Sigma*_bbar- 5.810 0.0 0.0 0.0 -3 0 4 0 makeanti /Defaults/Particles/Sigma*_b+ /Defaults/Particles/Sigma*_bbar- create ThePEG::ParticleData /Defaults/Particles/Xi_b0 setup /Defaults/Particles/Xi_b0 5232 Xi_b0 5.840 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bbar0 setup /Defaults/Particles/Xi_bbar0 -5232 Xi_bbar0 5.840 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Xi_b0 /Defaults/Particles/Xi_bbar0 create ThePEG::ParticleData /Defaults/Particles/Xi_bc+ setup /Defaults/Particles/Xi_bc+ 5242 Xi_bc+ 7.005750 0.0 0.0 0.3870 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bcbar- setup /Defaults/Particles/Xi_bcbar- -5242 Xi_bcbar- 7.005750 0.0 0.0 0.3870 -3 0 2 0 makeanti /Defaults/Particles/Xi_bc+ /Defaults/Particles/Xi_bcbar- create ThePEG::ConstituentParticleData /Defaults/Particles/bs_0 setup /Defaults/Particles/bs_0 5301 bs_0 5.567250 0.0 0.0 0.0 -2 -3 1 1 5.500 create ThePEG::ConstituentParticleData /Defaults/Particles/bs_0bar setup /Defaults/Particles/bs_0bar -5301 bs_0bar 5.567250 0.0 0.0 0.0 2 3 1 1 5.500 makeanti /Defaults/Particles/bs_0 /Defaults/Particles/bs_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/bs_1 setup /Defaults/Particles/bs_1 5303 bs_1 5.575360 0.0 0.0 0.0 -2 -3 3 1 5.500 create ThePEG::ConstituentParticleData /Defaults/Particles/bs_1bar setup /Defaults/Particles/bs_1bar -5303 bs_1bar 5.575360 0.0 0.0 0.0 2 3 3 1 5.500 makeanti /Defaults/Particles/bs_1 /Defaults/Particles/bs_1bar create ThePEG::ParticleData /Defaults/Particles/Xi'_b- setup /Defaults/Particles/Xi'_b- 5312 Xi'_b- 5.960 0.0 0.0 0.0 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_bbar+ setup /Defaults/Particles/Xi'_bbar+ -5312 Xi'_bbar+ 5.960 0.0 0.0 0.0 3 0 2 0 makeanti /Defaults/Particles/Xi'_b- /Defaults/Particles/Xi'_bbar+ create ThePEG::ParticleData /Defaults/Particles/Xi*_b- setup /Defaults/Particles/Xi*_b- 5314 Xi*_b- 5.970 0.0 0.0 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bbar+ setup /Defaults/Particles/Xi*_bbar+ -5314 Xi*_bbar+ 5.970 0.0 0.0 0.0 3 0 4 0 makeanti /Defaults/Particles/Xi*_b- /Defaults/Particles/Xi*_bbar+ create ThePEG::ParticleData /Defaults/Particles/Xi'_b0 setup /Defaults/Particles/Xi'_b0 5322 Xi'_b0 5.960 0.0 0.0 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_bbar0 setup /Defaults/Particles/Xi'_bbar0 -5322 Xi'_bbar0 5.960 0.0 0.0 0.0 0 0 2 0 makeanti /Defaults/Particles/Xi'_b0 /Defaults/Particles/Xi'_bbar0 create ThePEG::ParticleData /Defaults/Particles/Xi*_b0 setup /Defaults/Particles/Xi*_b0 5324 Xi*_b0 5.970 0.0 0.0 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bbar0 setup /Defaults/Particles/Xi*_bbar0 -5324 Xi*_bbar0 5.970 0.0 0.0 0.0 0 0 4 0 makeanti /Defaults/Particles/Xi*_b0 /Defaults/Particles/Xi*_bbar0 create ThePEG::ParticleData /Defaults/Particles/Omega_b- setup /Defaults/Particles/Omega_b- 5332 Omega_b- 6.120 0.0 0.0 0.3870 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_bbar+ setup /Defaults/Particles/Omega_bbar+ -5332 Omega_bbar+ 6.120 0.0 0.0 0.3870 3 0 2 0 makeanti /Defaults/Particles/Omega_b- /Defaults/Particles/Omega_bbar+ create ThePEG::ParticleData /Defaults/Particles/Omega*_b- setup /Defaults/Particles/Omega*_b- 5334 Omega*_b- 6.130 0.0 0.0 0.0 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbar+ setup /Defaults/Particles/Omega*_bbar+ -5334 Omega*_bbar+ 6.130 0.0 0.0 0.0 3 0 4 0 makeanti /Defaults/Particles/Omega*_b- /Defaults/Particles/Omega*_bbar+ create ThePEG::ParticleData /Defaults/Particles/Omega_bc0 setup /Defaults/Particles/Omega_bc0 5342 Omega_bc0 7.190990 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_bcbar0 setup /Defaults/Particles/Omega_bcbar0 -5342 Omega_bcbar0 7.190990 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Omega_bc0 /Defaults/Particles/Omega_bcbar0 create ThePEG::ConstituentParticleData /Defaults/Particles/bc_0 setup /Defaults/Particles/bc_0 5401 bc_0 6.671430 0.0 0.0 0.0 1 -3 1 1 6.600 create ThePEG::ConstituentParticleData /Defaults/Particles/bc_0bar setup /Defaults/Particles/bc_0bar -5401 bc_0bar 6.671430 0.0 0.0 0.0 -1 3 1 1 6.600 makeanti /Defaults/Particles/bc_0 /Defaults/Particles/bc_0bar create ThePEG::ConstituentParticleData /Defaults/Particles/bc_1 setup /Defaults/Particles/bc_1 5403 bc_1 6.673970 0.0 0.0 0.0 1 -3 3 1 6.600 create ThePEG::ConstituentParticleData /Defaults/Particles/bc_1bar setup /Defaults/Particles/bc_1bar -5403 bc_1bar 6.673970 0.0 0.0 0.0 -1 3 3 1 6.600 makeanti /Defaults/Particles/bc_1 /Defaults/Particles/bc_1bar create ThePEG::ParticleData /Defaults/Particles/Xi'_bc0 setup /Defaults/Particles/Xi'_bc0 5412 Xi'_bc0 7.037240 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_bcbar0 setup /Defaults/Particles/Xi'_bcbar0 -5412 Xi'_bcbar0 7.037240 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Xi'_bc0 /Defaults/Particles/Xi'_bcbar0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bc0 setup /Defaults/Particles/Xi*_bc0 5414 Xi*_bc0 7.04850 0.0 0.0 0.3870 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bcbar0 setup /Defaults/Particles/Xi*_bcbar0 -5414 Xi*_bcbar0 7.04850 0.0 0.0 0.3870 0 0 4 0 makeanti /Defaults/Particles/Xi*_bc0 /Defaults/Particles/Xi*_bcbar0 create ThePEG::ParticleData /Defaults/Particles/Xi'_bc+ setup /Defaults/Particles/Xi'_bc+ 5422 Xi'_bc+ 7.037240 0.0 0.0 0.3870 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi'_bcbar- setup /Defaults/Particles/Xi'_bcbar- -5422 Xi'_bcbar- 7.037240 0.0 0.0 0.3870 -3 0 2 0 makeanti /Defaults/Particles/Xi'_bc+ /Defaults/Particles/Xi'_bcbar- create ThePEG::ParticleData /Defaults/Particles/Xi*_bc+ setup /Defaults/Particles/Xi*_bc+ 5424 Xi*_bc+ 7.04850 0.0 0.0 0.3870 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bcbar- setup /Defaults/Particles/Xi*_bcbar- -5424 Xi*_bcbar- 7.04850 0.0 0.0 0.3870 -3 0 4 0 makeanti /Defaults/Particles/Xi*_bc+ /Defaults/Particles/Xi*_bcbar- create ThePEG::ParticleData /Defaults/Particles/Omega'_bc0 setup /Defaults/Particles/Omega'_bc0 5432 Omega'_bc0 7.211010 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega'_bcba setup /Defaults/Particles/Omega'_bcba -5432 Omega'_bcba 7.211010 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Omega'_bc0 /Defaults/Particles/Omega'_bcba create ThePEG::ParticleData /Defaults/Particles/Omega*_bc0 setup /Defaults/Particles/Omega*_bc0 5434 Omega*_bc0 7.2190 0.0 0.0 0.3870 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bcbar0 setup /Defaults/Particles/Omega*_bcbar0 -5434 Omega*_bcbar0 7.2190 0.0 0.0 0.3870 0 0 4 0 makeanti /Defaults/Particles/Omega*_bc0 /Defaults/Particles/Omega*_bcbar0 create ThePEG::ParticleData /Defaults/Particles/Omega_bcc+ setup /Defaults/Particles/Omega_bcc+ 5442 Omega_bcc+ 8.309450 0.0 0.0 0.3870 3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_bccbar- setup /Defaults/Particles/Omega_bccbar- -5442 Omega_bccbar- 8.309450 0.0 0.0 0.3870 -3 0 2 0 makeanti /Defaults/Particles/Omega_bcc+ /Defaults/Particles/Omega_bccbar- create ThePEG::ParticleData /Defaults/Particles/Omega*_bcc+ setup /Defaults/Particles/Omega*_bcc+ 5444 Omega*_bcc+ 8.313250 0.0 0.0 0.3870 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bccbar- setup /Defaults/Particles/Omega*_bccbar- -5444 Omega*_bccbar- 8.313250 0.0 0.0 0.3870 -3 0 4 0 makeanti /Defaults/Particles/Omega*_bcc+ /Defaults/Particles/Omega*_bccbar- create ThePEG::ConstituentParticleData /Defaults/Particles/bb_1 setup /Defaults/Particles/bb_1 5503 bb_1 10.073540 0.0 0.0 0.0 -2 -3 3 1 10.00 create ThePEG::ConstituentParticleData /Defaults/Particles/bb_1bar setup /Defaults/Particles/bb_1bar -5503 bb_1bar 10.073540 0.0 0.0 0.0 2 3 3 1 10.00 makeanti /Defaults/Particles/bb_1 /Defaults/Particles/bb_1bar create ThePEG::ParticleData /Defaults/Particles/Xi_bb- setup /Defaults/Particles/Xi_bb- 5512 Xi_bb- 10.422720 0.0 0.0 0.3870 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bbbar+ setup /Defaults/Particles/Xi_bbbar+ -5512 Xi_bbbar+ 10.422720 0.0 0.0 0.3870 3 0 2 0 makeanti /Defaults/Particles/Xi_bb- /Defaults/Particles/Xi_bbbar+ create ThePEG::ParticleData /Defaults/Particles/Xi*_bb- setup /Defaults/Particles/Xi*_bb- 5514 Xi*_bb- 10.441440 0.0 0.0 0.3870 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bbbar+ setup /Defaults/Particles/Xi*_bbbar+ -5514 Xi*_bbbar+ 10.441440 0.0 0.0 0.3870 3 0 4 0 makeanti /Defaults/Particles/Xi*_bb- /Defaults/Particles/Xi*_bbbar+ create ThePEG::ParticleData /Defaults/Particles/Xi_bb0 setup /Defaults/Particles/Xi_bb0 5522 Xi_bb0 10.422720 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Xi_bbbar0 setup /Defaults/Particles/Xi_bbbar0 -5522 Xi_bbbar0 10.422720 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Xi_bb0 /Defaults/Particles/Xi_bbbar0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bb0 setup /Defaults/Particles/Xi*_bb0 5524 Xi*_bb0 10.441440 0.0 0.0 0.3870 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Xi*_bbbar0 setup /Defaults/Particles/Xi*_bbbar0 -5524 Xi*_bbbar0 10.441440 0.0 0.0 0.3870 0 0 4 0 makeanti /Defaults/Particles/Xi*_bb0 /Defaults/Particles/Xi*_bbbar0 create ThePEG::ParticleData /Defaults/Particles/Omega_bb- setup /Defaults/Particles/Omega_bb- 5532 Omega_bb- 10.602090 0.0 0.0 0.3870 -3 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_bbbar+ setup /Defaults/Particles/Omega_bbbar+ -5532 Omega_bbbar+ 10.602090 0.0 0.0 0.3870 3 0 2 0 makeanti /Defaults/Particles/Omega_bb- /Defaults/Particles/Omega_bbbar+ create ThePEG::ParticleData /Defaults/Particles/Omega*_bb- setup /Defaults/Particles/Omega*_bb- 5534 Omega*_bb- 10.614260 0.0 0.0 0.3870 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbbar+ setup /Defaults/Particles/Omega*_bbbar+ -5534 Omega*_bbbar+ 10.614260 0.0 0.0 0.3870 3 0 4 0 makeanti /Defaults/Particles/Omega*_bb- /Defaults/Particles/Omega*_bbbar+ create ThePEG::ParticleData /Defaults/Particles/Omega_bbc0 setup /Defaults/Particles/Omega_bbc0 5542 Omega_bbc0 11.707670 0.0 0.0 0.3870 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/Omega_bbcbar0 setup /Defaults/Particles/Omega_bbcbar0 -5542 Omega_bbcbar0 11.707670 0.0 0.0 0.3870 0 0 2 0 makeanti /Defaults/Particles/Omega_bbc0 /Defaults/Particles/Omega_bbcbar0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbc0 setup /Defaults/Particles/Omega*_bbc0 5544 Omega*_bbc0 11.711470 0.0 0.0 0.3870 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbcbar0 setup /Defaults/Particles/Omega*_bbcbar0 -5544 Omega*_bbcbar0 11.711470 0.0 0.0 0.3870 0 0 4 0 makeanti /Defaults/Particles/Omega*_bbc0 /Defaults/Particles/Omega*_bbcbar0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbb- setup /Defaults/Particles/Omega*_bbb- 5554 Omega*_bbb- 15.110610 0.0 0.0 0.3870 -3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/Omega*_bbbbar+ setup /Defaults/Particles/Omega*_bbbbar+ -5554 Omega*_bbbbar+ 15.110610 0.0 0.0 0.3870 3 0 4 0 makeanti /Defaults/Particles/Omega*_bbb- /Defaults/Particles/Omega*_bbbbar+ create ThePEG::ParticleData /Defaults/Particles/a_00 setup /Defaults/Particles/a_00 9000111 a_00 0.98350 0.060 0.050 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/b_10 setup /Defaults/Particles/b_10 10113 b_10 1.2310 0.1420 0.250 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/a_0+ setup /Defaults/Particles/a_0+ 9000211 a_0+ 0.98350 0.060 0.050 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/a_0- setup /Defaults/Particles/a_0- -9000211 a_0- 0.98350 0.060 0.050 0.0 -3 0 1 0 makeanti /Defaults/Particles/a_0+ /Defaults/Particles/a_0- create ThePEG::ParticleData /Defaults/Particles/b_1+ setup /Defaults/Particles/b_1+ 10213 b_1+ 1.2310 0.1420 0.250 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/b_1- setup /Defaults/Particles/b_1- -10213 b_1- 1.2310 0.1420 0.250 0.0 -3 0 3 0 makeanti /Defaults/Particles/b_1+ /Defaults/Particles/b_1- create ThePEG::ParticleData /Defaults/Particles/f_0 setup /Defaults/Particles/f_0 9010221 f_0 1.0 0.0 0.0 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/h_1 setup /Defaults/Particles/h_1 10223 h_1 1.170 0.360 0.20 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*_00 setup /Defaults/Particles/K*_00 10311 K*_00 1.4290 0.2870 0.40 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/K*_0bar0 setup /Defaults/Particles/K*_0bar0 -10311 K*_0bar0 1.4290 0.2870 0.40 0.0 0 0 1 0 makeanti /Defaults/Particles/K*_00 /Defaults/Particles/K*_0bar0 create ThePEG::ParticleData /Defaults/Particles/K_10 setup /Defaults/Particles/K_10 10313 K_10 1.290 0.090 0.0050 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K_1bar0 setup /Defaults/Particles/K_1bar0 -10313 K_1bar0 1.290 0.090 0.0050 0.0 0 0 3 0 makeanti /Defaults/Particles/K_10 /Defaults/Particles/K_1bar0 create ThePEG::ParticleData /Defaults/Particles/K*_0+ setup /Defaults/Particles/K*_0+ 10321 K*_0+ 1.4290 0.2870 0.40 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/K*_0- setup /Defaults/Particles/K*_0- -10321 K*_0- 1.4290 0.2870 0.40 0.0 -3 0 1 0 makeanti /Defaults/Particles/K*_0+ /Defaults/Particles/K*_0- create ThePEG::ParticleData /Defaults/Particles/K_1+ setup /Defaults/Particles/K_1+ 10323 K_1+ 1.290 0.090 0.010 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K_1- setup /Defaults/Particles/K_1- -10323 K_1- 1.290 0.090 0.010 0.0 -3 0 3 0 makeanti /Defaults/Particles/K_1+ /Defaults/Particles/K_1- create ThePEG::ParticleData /Defaults/Particles/eta1440 setup /Defaults/Particles/eta1440 100331 eta1440 1.40 0.250 0.350 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/h'_1 setup /Defaults/Particles/h'_1 10333 h'_1 1.40 0.080 0.0010 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_0+ setup /Defaults/Particles/D*_0+ 10411 D*_0+ 2.2720 0.050 0.10 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/D*_0- setup /Defaults/Particles/D*_0- -10411 D*_0- 2.2720 0.050 0.10 0.0 -3 0 1 0 makeanti /Defaults/Particles/D*_0+ /Defaults/Particles/D*_0- create ThePEG::ParticleData /Defaults/Particles/D_1+ setup /Defaults/Particles/D_1+ 10413 D_1+ 2.4240 0.020 0.080 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D_1- setup /Defaults/Particles/D_1- -10413 D_1- 2.4240 0.020 0.080 0.0 -3 0 3 0 makeanti /Defaults/Particles/D_1+ /Defaults/Particles/D_1- create ThePEG::ParticleData /Defaults/Particles/D*_00 setup /Defaults/Particles/D*_00 10421 D*_00 2.2720 0.050 0.10 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/D*_0bar0 setup /Defaults/Particles/D*_0bar0 -10421 D*_0bar0 2.2720 0.050 0.10 0.0 0 0 1 0 makeanti /Defaults/Particles/D*_00 /Defaults/Particles/D*_0bar0 create ThePEG::ParticleData /Defaults/Particles/D_10 setup /Defaults/Particles/D_10 10423 D_10 2.4240 0.020 0.080 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D_1bar0 setup /Defaults/Particles/D_1bar0 -10423 D_1bar0 2.4240 0.020 0.080 0.0 0 0 3 0 makeanti /Defaults/Particles/D_10 /Defaults/Particles/D_1bar0 create ThePEG::ParticleData /Defaults/Particles/D*_0s+ setup /Defaults/Particles/D*_0s+ 10431 D*_0s+ 2.50 0.050 0.10 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/D*_0s- setup /Defaults/Particles/D*_0s- -10431 D*_0s- 2.50 0.050 0.10 0.0 -3 0 1 0 makeanti /Defaults/Particles/D*_0s+ /Defaults/Particles/D*_0s- create ThePEG::ParticleData /Defaults/Particles/D_1s+ setup /Defaults/Particles/D_1s+ 10433 D_1s+ 2.5360 0.0 0.0 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D_1s- setup /Defaults/Particles/D_1s- -10433 D_1s- 2.5360 0.0 0.0 0.0 -3 0 3 0 makeanti /Defaults/Particles/D_1s+ /Defaults/Particles/D_1s- create ThePEG::ParticleData /Defaults/Particles/chi_0c setup /Defaults/Particles/chi_0c 10441 chi_0c 3.41510 0.0140 0.050 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/h_1c setup /Defaults/Particles/h_1c 10443 h_1c 3.460 0.010 0.020 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_00 setup /Defaults/Particles/B*_00 10511 B*_00 5.680 0.050 0.10 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B*_0bar0 setup /Defaults/Particles/B*_0bar0 -10511 B*_0bar0 5.680 0.050 0.10 0.0 0 0 1 0 makeanti /Defaults/Particles/B*_00 /Defaults/Particles/B*_0bar0 create ThePEG::ParticleData /Defaults/Particles/B_10 setup /Defaults/Particles/B_10 10513 B_10 5.730 0.050 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B_1bar0 setup /Defaults/Particles/B_1bar0 -10513 B_1bar0 5.730 0.050 0.10 0.0 0 0 3 0 makeanti /Defaults/Particles/B_10 /Defaults/Particles/B_1bar0 create ThePEG::ParticleData /Defaults/Particles/B*_0+ setup /Defaults/Particles/B*_0+ 10521 B*_0+ 5.680 0.050 0.10 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B*_0- setup /Defaults/Particles/B*_0- -10521 B*_0- 5.680 0.050 0.10 0.0 -3 0 1 0 makeanti /Defaults/Particles/B*_0+ /Defaults/Particles/B*_0- create ThePEG::ParticleData /Defaults/Particles/B_1+ setup /Defaults/Particles/B_1+ 10523 B_1+ 5.730 0.050 0.10 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B_1- setup /Defaults/Particles/B_1- -10523 B_1- 5.730 0.050 0.10 0.0 -3 0 3 0 makeanti /Defaults/Particles/B_1+ /Defaults/Particles/B_1- create ThePEG::ParticleData /Defaults/Particles/B*_0s0 setup /Defaults/Particles/B*_0s0 10531 B*_0s0 5.920 0.050 0.10 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B*_0sbar0 setup /Defaults/Particles/B*_0sbar0 -10531 B*_0sbar0 5.920 0.050 0.10 0.0 0 0 1 0 makeanti /Defaults/Particles/B*_0s0 /Defaults/Particles/B*_0sbar0 create ThePEG::ParticleData /Defaults/Particles/B_1s0 setup /Defaults/Particles/B_1s0 10533 B_1s0 5.970 0.050 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B_1sbar0 setup /Defaults/Particles/B_1sbar0 -10533 B_1sbar0 5.970 0.050 0.10 0.0 0 0 3 0 makeanti /Defaults/Particles/B_1s0 /Defaults/Particles/B_1sbar0 create ThePEG::ParticleData /Defaults/Particles/B*_0c+ setup /Defaults/Particles/B*_0c+ 10541 B*_0c+ 7.250 0.050 0.050 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/B*_0c- setup /Defaults/Particles/B*_0c- -10541 B*_0c- 7.250 0.050 0.050 0.0 -3 0 1 0 makeanti /Defaults/Particles/B*_0c+ /Defaults/Particles/B*_0c- create ThePEG::ParticleData /Defaults/Particles/B_1c+ setup /Defaults/Particles/B_1c+ 10543 B_1c+ 7.30 0.050 0.10 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B_1c- setup /Defaults/Particles/B_1c- -10543 B_1c- 7.30 0.050 0.10 0.0 -3 0 3 0 makeanti /Defaults/Particles/B_1c+ /Defaults/Particles/B_1c- create ThePEG::ParticleData /Defaults/Particles/chi_0b setup /Defaults/Particles/chi_0b 10551 chi_0b 9.85980 0.0 0.0 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/h_1b setup /Defaults/Particles/h_1b 10553 h_1b 9.8750 0.010 0.020 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/a_10 setup /Defaults/Particles/a_10 20113 a_10 1.230 0.40 0.30 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/a_1+ setup /Defaults/Particles/a_1+ 20213 a_1+ 1.230 0.40 0.30 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/a_1- setup /Defaults/Particles/a_1- -20213 a_1- 1.230 0.40 0.30 0.0 -3 0 3 0 makeanti /Defaults/Particles/a_1+ /Defaults/Particles/a_1- create ThePEG::ParticleData /Defaults/Particles/f_1 setup /Defaults/Particles/f_1 20223 f_1 1.2820 0.0250 0.050 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*_10 setup /Defaults/Particles/K*_10 20313 K*_10 1.4020 0.1740 0.30 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*_1bar0 setup /Defaults/Particles/K*_1bar0 -20313 K*_1bar0 1.4020 0.1740 0.30 0.0 0 0 3 0 makeanti /Defaults/Particles/K*_10 /Defaults/Particles/K*_1bar0 create ThePEG::ParticleData /Defaults/Particles/K*_1+ setup /Defaults/Particles/K*_1+ 20323 K*_1+ 1.4020 0.1740 0.30 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/K*_1- setup /Defaults/Particles/K*_1- -20323 K*_1- 1.4020 0.1740 0.30 0.0 -3 0 3 0 makeanti /Defaults/Particles/K*_1+ /Defaults/Particles/K*_1- create ThePEG::ParticleData /Defaults/Particles/f'_1 setup /Defaults/Particles/f'_1 20333 f'_1 1.4270 0.0530 0.020 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_1+ setup /Defaults/Particles/D*_1+ 20413 D*_1+ 2.3720 0.050 0.10 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_1- setup /Defaults/Particles/D*_1- -20413 D*_1- 2.3720 0.050 0.10 0.0 -3 0 3 0 makeanti /Defaults/Particles/D*_1+ /Defaults/Particles/D*_1- create ThePEG::ParticleData /Defaults/Particles/D*_10 setup /Defaults/Particles/D*_10 20423 D*_10 2.3720 0.050 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_1bar0 setup /Defaults/Particles/D*_1bar0 -20423 D*_1bar0 2.3720 0.050 0.10 0.0 0 0 3 0 makeanti /Defaults/Particles/D*_10 /Defaults/Particles/D*_1bar0 create ThePEG::ParticleData /Defaults/Particles/D*_1s+ setup /Defaults/Particles/D*_1s+ 20433 D*_1s+ 2.560 0.050 0.030 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/D*_1s- setup /Defaults/Particles/D*_1s- -20433 D*_1s- 2.560 0.050 0.030 0.0 -3 0 3 0 makeanti /Defaults/Particles/D*_1s+ /Defaults/Particles/D*_1s- create ThePEG::ParticleData /Defaults/Particles/chi_1c setup /Defaults/Particles/chi_1c 20443 chi_1c 3.51060 0.00090 0.0010 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_10 setup /Defaults/Particles/B*_10 20513 B*_10 5.780 0.050 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_1bar0 setup /Defaults/Particles/B*_1bar0 -20513 B*_1bar0 5.780 0.050 0.10 0.0 0 0 3 0 makeanti /Defaults/Particles/B*_10 /Defaults/Particles/B*_1bar0 create ThePEG::ParticleData /Defaults/Particles/B*_1+ setup /Defaults/Particles/B*_1+ 20523 B*_1+ 5.780 0.050 0.10 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_1- setup /Defaults/Particles/B*_1- -20523 B*_1- 5.780 0.050 0.10 0.0 -3 0 3 0 makeanti /Defaults/Particles/B*_1+ /Defaults/Particles/B*_1- create ThePEG::ParticleData /Defaults/Particles/B*_1s0 setup /Defaults/Particles/B*_1s0 20533 B*_1s0 6.020 0.050 0.10 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_1sbar0 setup /Defaults/Particles/B*_1sbar0 -20533 B*_1sbar0 6.020 0.050 0.10 0.0 0 0 3 0 makeanti /Defaults/Particles/B*_1s0 /Defaults/Particles/B*_1sbar0 create ThePEG::ParticleData /Defaults/Particles/B*_1c+ setup /Defaults/Particles/B*_1c+ 20543 B*_1c+ 7.30 0.050 0.10 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/B*_1c- setup /Defaults/Particles/B*_1c- -20543 B*_1c- 7.30 0.050 0.10 0.0 -3 0 3 0 makeanti /Defaults/Particles/B*_1c+ /Defaults/Particles/B*_1c- create ThePEG::ParticleData /Defaults/Particles/chi_1b setup /Defaults/Particles/chi_1b 20553 chi_1b 9.89190 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/psi' setup /Defaults/Particles/psi' 100443 psi' 3.6860 0.0 0.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/Upsilon' setup /Defaults/Particles/Upsilon' 100553 Upsilon' 10.02330 0.0 0.0 0.0 0 0 3 0 create ThePEG::ConstituentParticleData /Defaults/Particles/~d_L setup /Defaults/Particles/~d_L 1000001 ~d_L 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~d_Lbar setup /Defaults/Particles/~d_Lbar -1000001 ~d_Lbar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~d_L /Defaults/Particles/~d_Lbar create ThePEG::ConstituentParticleData /Defaults/Particles/~u_L setup /Defaults/Particles/~u_L 1000002 ~u_L 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~u_Lbar setup /Defaults/Particles/~u_Lbar -1000002 ~u_Lbar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~u_L /Defaults/Particles/~u_Lbar create ThePEG::ConstituentParticleData /Defaults/Particles/~s_L setup /Defaults/Particles/~s_L 1000003 ~s_L 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~s_Lbar setup /Defaults/Particles/~s_Lbar -1000003 ~s_Lbar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~s_L /Defaults/Particles/~s_Lbar create ThePEG::ConstituentParticleData /Defaults/Particles/~c_L setup /Defaults/Particles/~c_L 1000004 ~c_L 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~c_Lbar setup /Defaults/Particles/~c_Lbar -1000004 ~c_Lbar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~c_L /Defaults/Particles/~c_Lbar create ThePEG::ConstituentParticleData /Defaults/Particles/~b_1 setup /Defaults/Particles/~b_1 1000005 ~b_1 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~b_1bar setup /Defaults/Particles/~b_1bar -1000005 ~b_1bar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~b_1 /Defaults/Particles/~b_1bar create ThePEG::ConstituentParticleData /Defaults/Particles/~t_1 setup /Defaults/Particles/~t_1 1000006 ~t_1 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~t_1bar setup /Defaults/Particles/~t_1bar -1000006 ~t_1bar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~t_1 /Defaults/Particles/~t_1bar create ThePEG::ParticleData /Defaults/Particles/~e_L- setup /Defaults/Particles/~e_L- 1000011 ~e_L- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~e_L+ setup /Defaults/Particles/~e_L+ -1000011 ~e_L+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~e_L- /Defaults/Particles/~e_L+ create ThePEG::ParticleData /Defaults/Particles/~nu_eL setup /Defaults/Particles/~nu_eL 1000012 ~nu_eL 500.0 1.0 10.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~nu_eLbar setup /Defaults/Particles/~nu_eLbar -1000012 ~nu_eLbar 500.0 1.0 10.0 0.0 0 0 3 0 makeanti /Defaults/Particles/~nu_eL /Defaults/Particles/~nu_eLbar create ThePEG::ParticleData /Defaults/Particles/~mu_L- setup /Defaults/Particles/~mu_L- 1000013 ~mu_L- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~mu_L+ setup /Defaults/Particles/~mu_L+ -1000013 ~mu_L+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~mu_L- /Defaults/Particles/~mu_L+ create ThePEG::ParticleData /Defaults/Particles/~nu_muL setup /Defaults/Particles/~nu_muL 1000014 ~nu_muL 500.0 1.0 10.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~nu_muLbar setup /Defaults/Particles/~nu_muLbar -1000014 ~nu_muLbar 500.0 1.0 10.0 0.0 0 0 3 0 makeanti /Defaults/Particles/~nu_muL /Defaults/Particles/~nu_muLbar create ThePEG::ParticleData /Defaults/Particles/~tau_1- setup /Defaults/Particles/~tau_1- 1000015 ~tau_1- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~tau_1+ setup /Defaults/Particles/~tau_1+ -1000015 ~tau_1+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~tau_1- /Defaults/Particles/~tau_1+ create ThePEG::ParticleData /Defaults/Particles/~nu_tauL setup /Defaults/Particles/~nu_tauL 1000016 ~nu_tauL 500.0 1.0 10.0 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~nu_tauLbar setup /Defaults/Particles/~nu_tauLbar -1000016 ~nu_tauLbar 500.0 1.0 10.0 0.0 0 0 3 0 makeanti /Defaults/Particles/~nu_tauL /Defaults/Particles/~nu_tauLbar create ThePEG::ParticleData /Defaults/Particles/~g setup /Defaults/Particles/~g 1000021 ~g 500.0 1.0 10.0 0.0 0 8 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_10 setup /Defaults/Particles/~chi_10 1000022 ~chi_10 500.0 1.0 10.0 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_20 setup /Defaults/Particles/~chi_20 1000023 ~chi_20 500.0 1.0 10.0 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_1+ setup /Defaults/Particles/~chi_1+ 1000024 ~chi_1+ 500.0 1.0 10.0 0.0 3 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_1- setup /Defaults/Particles/~chi_1- -1000024 ~chi_1- 500.0 1.0 10.0 0.0 -3 0 0 0 makeanti /Defaults/Particles/~chi_1+ /Defaults/Particles/~chi_1- create ThePEG::ParticleData /Defaults/Particles/~chi_30 setup /Defaults/Particles/~chi_30 1000025 ~chi_30 500.0 1.0 10.0 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_40 setup /Defaults/Particles/~chi_40 1000035 ~chi_40 500.0 1.0 10.0 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_2+ setup /Defaults/Particles/~chi_2+ 1000037 ~chi_2+ 500.0 1.0 10.0 0.0 3 0 0 0 create ThePEG::ParticleData /Defaults/Particles/~chi_2- setup /Defaults/Particles/~chi_2- -1000037 ~chi_2- 500.0 1.0 10.0 0.0 -3 0 0 0 makeanti /Defaults/Particles/~chi_2+ /Defaults/Particles/~chi_2- create ThePEG::ParticleData /Defaults/Particles/~Gravitino setup /Defaults/Particles/~Gravitino 1000039 ~Gravitino 500.0 0.0 0.000010 0.0 0 0 0 1 create ThePEG::ConstituentParticleData /Defaults/Particles/~d_R setup /Defaults/Particles/~d_R 2000001 ~d_R 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~d_Rbar setup /Defaults/Particles/~d_Rbar -2000001 ~d_Rbar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~d_R /Defaults/Particles/~d_Rbar create ThePEG::ConstituentParticleData /Defaults/Particles/~u_R setup /Defaults/Particles/~u_R 2000002 ~u_R 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~u_Rbar setup /Defaults/Particles/~u_Rbar -2000002 ~u_Rbar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~u_R /Defaults/Particles/~u_Rbar create ThePEG::ConstituentParticleData /Defaults/Particles/~s_R setup /Defaults/Particles/~s_R 2000003 ~s_R 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~s_Rbar setup /Defaults/Particles/~s_Rbar -2000003 ~s_Rbar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~s_R /Defaults/Particles/~s_Rbar create ThePEG::ConstituentParticleData /Defaults/Particles/~c_R setup /Defaults/Particles/~c_R 2000004 ~c_R 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~c_Rbar setup /Defaults/Particles/~c_Rbar -2000004 ~c_Rbar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~c_R /Defaults/Particles/~c_Rbar create ThePEG::ConstituentParticleData /Defaults/Particles/~b_2 setup /Defaults/Particles/~b_2 2000005 ~b_2 500.0 1.0 10.0 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~b_2bar setup /Defaults/Particles/~b_2bar -2000005 ~b_2bar 500.0 1.0 10.0 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/~b_2 /Defaults/Particles/~b_2bar create ThePEG::ConstituentParticleData /Defaults/Particles/~t_2 setup /Defaults/Particles/~t_2 2000006 ~t_2 500.0 1.0 10.0 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/~t_2bar setup /Defaults/Particles/~t_2bar -2000006 ~t_2bar 500.0 1.0 10.0 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/~t_2 /Defaults/Particles/~t_2bar create ThePEG::ParticleData /Defaults/Particles/~e_R- setup /Defaults/Particles/~e_R- 2000011 ~e_R- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~e_R+ setup /Defaults/Particles/~e_R+ -2000011 ~e_R+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~e_R- /Defaults/Particles/~e_R+ create ThePEG::ParticleData /Defaults/Particles/~nu_eR setup /Defaults/Particles/~nu_eR 2000012 ~nu_eR 500.0 0.0 0.000010 0.0 0 0 3 1 create ThePEG::ParticleData /Defaults/Particles/~nu_eRbar setup /Defaults/Particles/~nu_eRbar -2000012 ~nu_eRbar 500.0 0.0 0.000010 0.0 0 0 3 1 makeanti /Defaults/Particles/~nu_eR /Defaults/Particles/~nu_eRbar create ThePEG::ParticleData /Defaults/Particles/~mu_R- setup /Defaults/Particles/~mu_R- 2000013 ~mu_R- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~mu_R+ setup /Defaults/Particles/~mu_R+ -2000013 ~mu_R+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~mu_R- /Defaults/Particles/~mu_R+ create ThePEG::ParticleData /Defaults/Particles/~nu_muR setup /Defaults/Particles/~nu_muR 2000014 ~nu_muR 500.0 0.0 0.000010 0.0 0 0 3 1 create ThePEG::ParticleData /Defaults/Particles/~nu_muRbar setup /Defaults/Particles/~nu_muRbar -2000014 ~nu_muRbar 500.0 0.0 0.000010 0.0 0 0 3 1 makeanti /Defaults/Particles/~nu_muR /Defaults/Particles/~nu_muRbar create ThePEG::ParticleData /Defaults/Particles/~tau_2- setup /Defaults/Particles/~tau_2- 2000015 ~tau_2- 500.0 1.0 10.0 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/~tau_2+ setup /Defaults/Particles/~tau_2+ -2000015 ~tau_2+ 500.0 1.0 10.0 0.0 3 0 3 0 makeanti /Defaults/Particles/~tau_2- /Defaults/Particles/~tau_2+ create ThePEG::ParticleData /Defaults/Particles/~nu_tauR setup /Defaults/Particles/~nu_tauR 2000016 ~nu_tauR 500.0 0.0 0.000010 0.0 0 0 3 1 create ThePEG::ParticleData /Defaults/Particles/~nu_tauRbar setup /Defaults/Particles/~nu_tauRbar -2000016 ~nu_tauRbar 500.0 0.0 0.000010 0.0 0 0 3 1 makeanti /Defaults/Particles/~nu_tauR /Defaults/Particles/~nu_tauRbar create ThePEG::ParticleData /Defaults/Particles/pi_tc0 setup /Defaults/Particles/pi_tc0 3000111 pi_tc0 110.0 0.029110 0.291080 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/pi_tc+ setup /Defaults/Particles/pi_tc+ 3000211 pi_tc+ 110.0 0.017410 0.174120 0.0 3 0 1 0 create ThePEG::ParticleData /Defaults/Particles/pi_tc- setup /Defaults/Particles/pi_tc- -3000211 pi_tc- 110.0 0.017410 0.174120 0.0 -3 0 1 0 makeanti /Defaults/Particles/pi_tc+ /Defaults/Particles/pi_tc- create ThePEG::ParticleData /Defaults/Particles/pi'_tc0 setup /Defaults/Particles/pi'_tc0 3000221 pi'_tc0 110.0 0.045360 0.453620 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/eta_tc0 setup /Defaults/Particles/eta_tc0 3000331 eta_tc0 350.0 0.095110 0.951140 0.0 0 8 1 0 create ThePEG::ParticleData /Defaults/Particles/rho_tc0 setup /Defaults/Particles/rho_tc0 3000113 rho_tc0 210.0 0.86860 8.686040 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/rho_tc+ setup /Defaults/Particles/rho_tc+ 3000213 rho_tc+ 210.0 0.623950 6.239460 0.0 3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/rho_tc- setup /Defaults/Particles/rho_tc- -3000213 rho_tc- 210.0 0.623950 6.239460 0.0 -3 0 3 0 makeanti /Defaults/Particles/rho_tc+ /Defaults/Particles/rho_tc- create ThePEG::ParticleData /Defaults/Particles/omega_tc setup /Defaults/Particles/omega_tc 3000223 omega_tc 210.0 0.191920 1.919230 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/V8_tc setup /Defaults/Particles/V8_tc 3100021 V8_tc 500.0 123.276380 450.0 0.0 0 8 1 0 create ThePEG::ParticleData /Defaults/Particles/pi_22_1_tc setup /Defaults/Particles/pi_22_1_tc 3100111 pi_22_1_tc 125.0 0.022960 0.229590 0.0 0 0 1 0 create ThePEG::ParticleData /Defaults/Particles/pi_22_8_tc setup /Defaults/Particles/pi_22_8_tc 3200111 pi_22_8_tc 250.0 0.188860 1.888630 0.0 0 8 1 0 create ThePEG::ParticleData /Defaults/Particles/rho_11_tc setup /Defaults/Particles/rho_11_tc 3100113 rho_11_tc 400.0 23.268190 232.681850 0.0 0 8 3 0 create ThePEG::ParticleData /Defaults/Particles/rho_12_tc setup /Defaults/Particles/rho_12_tc 3200113 rho_12_tc 350.0 2.863060 28.630590 0.0 0 8 3 0 create ThePEG::ParticleData /Defaults/Particles/rho_21_tc setup /Defaults/Particles/rho_21_tc 3300113 rho_21_tc 350.0 0.0 0.0 0.0 0 8 3 0 create ThePEG::ParticleData /Defaults/Particles/rho_22_tc setup /Defaults/Particles/rho_22_tc 3400113 rho_22_tc 300.0 3.459030 34.590320 0.0 0 8 3 0 create ThePEG::ConstituentParticleData /Defaults/Particles/d* setup /Defaults/Particles/d* 4000001 d* 400.0 2.593590 25.935940 0.0 -1 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/d*bar setup /Defaults/Particles/d*bar -4000001 d*bar 400.0 2.593590 25.935940 0.0 1 -3 3 0 0.0 makeanti /Defaults/Particles/d* /Defaults/Particles/d*bar create ThePEG::ConstituentParticleData /Defaults/Particles/u* setup /Defaults/Particles/u* 4000002 u* 400.0 2.596870 25.968730 0.0 2 3 3 0 0.0 create ThePEG::ConstituentParticleData /Defaults/Particles/u*bar setup /Defaults/Particles/u*bar -4000002 u*bar 400.0 2.596870 25.968730 0.0 -2 -3 3 0 0.0 makeanti /Defaults/Particles/u* /Defaults/Particles/u*bar create ThePEG::ParticleData /Defaults/Particles/e*- setup /Defaults/Particles/e*- 4000011 e*- 400.0 0.428960 4.289610 0.0 -3 0 3 0 create ThePEG::ParticleData /Defaults/Particles/e*bar+ setup /Defaults/Particles/e*bar+ -4000011 e*bar+ 400.0 0.428960 4.289610 0.0 3 0 3 0 makeanti /Defaults/Particles/e*- /Defaults/Particles/e*bar+ create ThePEG::ParticleData /Defaults/Particles/nu*_e0 setup /Defaults/Particles/nu*_e0 4000012 nu*_e0 400.0 0.419120 4.191240 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/nu*_ebar0 setup /Defaults/Particles/nu*_ebar0 -4000012 nu*_ebar0 400.0 0.419120 4.191240 0.0 0 0 3 0 makeanti /Defaults/Particles/nu*_e0 /Defaults/Particles/nu*_ebar0 create ThePEG::ParticleData /Defaults/Particles/Graviton* setup /Defaults/Particles/Graviton* 5000039 Graviton* 1000.0 0.141530 1.415280 0.0 0 0 0 0 create ThePEG::ParticleData /Defaults/Particles/nu_Re setup /Defaults/Particles/nu_Re 9900012 nu_Re 500.0 0.000980 0.009770 0.0 0 0 2 0 create ThePEG::ParticleData /Defaults/Particles/nu_Rmu setup /Defaults/Particles/nu_Rmu 9900014 nu_Rmu 500.0 0.000980 0.009760 0.0 0 0 4 0 create ThePEG::ParticleData /Defaults/Particles/nu_Rtau setup /Defaults/Particles/nu_Rtau 9900016 nu_Rtau 500.0 0.000970 0.009730 0.0 0 0 6 0 create ThePEG::ParticleData /Defaults/Particles/Z_R0 setup /Defaults/Particles/Z_R0 9900023 Z_R0 1200.0 26.72450 267.245010 0.0 0 0 3 0 create ThePEG::ParticleData /Defaults/Particles/W_R+ setup /Defaults/Particles/W_R+ 9900024 W_R+ 750.0 21.749160 217.491620 0.0 3 0 4 0 create ThePEG::ParticleData /Defaults/Particles/W_R- setup /Defaults/Particles/W_R- -9900024 W_R- 750.0 21.749160 217.491620 0.0 -3 0 4 0 makeanti /Defaults/Particles/W_R+ /Defaults/Particles/W_R- create ThePEG::ParticleData /Defaults/Particles/H_L++ setup /Defaults/Particles/H_L++ 9900041 H_L++ 200.0 0.881590 8.815920 0.0 6 0 1 0 create ThePEG::ParticleData /Defaults/Particles/H_L-- setup /Defaults/Particles/H_L-- -9900041 H_L-- 200.0 0.881590 8.815920 0.0 -6 0 1 0 makeanti /Defaults/Particles/H_L++ /Defaults/Particles/H_L-- create ThePEG::ParticleData /Defaults/Particles/H_R++ setup /Defaults/Particles/H_R++ 9900042 H_R++ 200.0 0.880010 8.800130 0.0 6 0 2 0 create ThePEG::ParticleData /Defaults/Particles/H_R-- setup /Defaults/Particles/H_R-- -9900042 H_R-- 200.0 0.880010 8.800130 0.0 -6 0 2 0 makeanti /Defaults/Particles/H_R++ /Defaults/Particles/H_R-- create ThePEG::ParticleData /Defaults/Particles/rho_diff0 setup /Defaults/Particles/rho_diff0 9900110 rho_diff0 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/pi_diffr+ setup /Defaults/Particles/pi_diffr+ 9900210 pi_diffr+ 0.0 0.0 0.0 0.0 3 0 0 1 create ThePEG::ParticleData /Defaults/Particles/pi_diffr- setup /Defaults/Particles/pi_diffr- -9900210 pi_diffr- 0.0 0.0 0.0 0.0 -3 0 0 1 makeanti /Defaults/Particles/pi_diffr+ /Defaults/Particles/pi_diffr- create ThePEG::ParticleData /Defaults/Particles/omega_di setup /Defaults/Particles/omega_di 9900220 omega_di 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/phi_diff setup /Defaults/Particles/phi_diff 9900330 phi_diff 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/Jpsi_di setup /Defaults/Particles/Jpsi_di 9900440 Jpsi_di 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/n_diffr0 setup /Defaults/Particles/n_diffr0 9902110 n_diffr0 0.0 0.0 0.0 0.0 0 0 0 1 create ThePEG::ParticleData /Defaults/Particles/n_diffrbar0 setup /Defaults/Particles/n_diffrbar0 -9902110 n_diffrbar0 0.0 0.0 0.0 0.0 0 0 0 1 makeanti /Defaults/Particles/n_diffr0 /Defaults/Particles/n_diffrbar0 create ThePEG::ParticleData /Defaults/Particles/p_diffr+ setup /Defaults/Particles/p_diffr+ 9902210 p_diffr+ 0.0 0.0 0.0 0.0 3 0 0 1 create ThePEG::ParticleData /Defaults/Particles/p_diffrbar- setup /Defaults/Particles/p_diffrbar- -9902210 p_diffrbar- 0.0 0.0 0.0 0.0 -3 0 0 1 makeanti /Defaults/Particles/p_diffr+ /Defaults/Particles/p_diffrbar- decaymode d->g=d; 0.0 1 /Defaults/Decayers/Dummy decaymode d->gamma,d; 0.0 1 /Defaults/Decayers/Dummy decaymode d->Z0,d; 0.0 1 /Defaults/Decayers/Dummy decaymode d->W-,u; 0.0 1 /Defaults/Decayers/Dummy decaymode d->W-,c; 0.0 1 /Defaults/Decayers/Dummy decaymode d->W-,t; 0.0 1 /Defaults/Decayers/Dummy decaymode d->W-,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode d->h0,d; 0.0 1 /Defaults/Decayers/Dummy decaymode u->g=u; 0.0 1 /Defaults/Decayers/Dummy decaymode u->gamma,u; 0.0 1 /Defaults/Decayers/Dummy decaymode u->Z0,u; 0.0 1 /Defaults/Decayers/Dummy decaymode u->W+,d; 0.0 1 /Defaults/Decayers/Dummy decaymode u->W+,s; 0.0 1 /Defaults/Decayers/Dummy decaymode u->W+,b; 0.0 1 /Defaults/Decayers/Dummy decaymode u->W+,b'; 0.0 1 /Defaults/Decayers/Dummy decaymode u->h0,u; 0.0 1 /Defaults/Decayers/Dummy decaymode s->g=s; 0.0 1 /Defaults/Decayers/Dummy decaymode s->gamma,s; 0.0 1 /Defaults/Decayers/Dummy decaymode s->Z0,s; 0.0 1 /Defaults/Decayers/Dummy decaymode s->W-,u; 0.0 1 /Defaults/Decayers/Dummy decaymode s->W-,c; 0.0 1 /Defaults/Decayers/Dummy decaymode s->W-,t; 0.0 1 /Defaults/Decayers/Dummy decaymode s->W-,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode s->h0,s; 0.0 1 /Defaults/Decayers/Dummy decaymode c->g=c; 0.0 1 /Defaults/Decayers/Dummy decaymode c->gamma,c; 0.0 1 /Defaults/Decayers/Dummy decaymode c->Z0,c; 0.0 1 /Defaults/Decayers/Dummy decaymode c->W+,d; 0.0 1 /Defaults/Decayers/Dummy decaymode c->W+,s; 0.0 1 /Defaults/Decayers/Dummy decaymode c->W+,b; 0.0 1 /Defaults/Decayers/Dummy decaymode c->W+,b'; 0.0 1 /Defaults/Decayers/Dummy decaymode c->h0,c; 0.0 1 /Defaults/Decayers/Dummy decaymode b->g=b; 0.0 1 /Defaults/Decayers/Dummy decaymode b->gamma,b; 0.0 1 /Defaults/Decayers/Dummy decaymode b->Z0,b; 0.0 1 /Defaults/Decayers/Dummy decaymode b->W-,u; 0.0 1 /Defaults/Decayers/Dummy decaymode b->W-,c; 0.0 1 /Defaults/Decayers/Dummy decaymode b->W-,t; 0.0 1 /Defaults/Decayers/Dummy decaymode b->W-,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode b->h0,b; 0.0 1 /Defaults/Decayers/Dummy decaymode t->g=t; 0.0 1 /Defaults/Decayers/Dummy decaymode t->gamma,t; 0.0 1 /Defaults/Decayers/Dummy decaymode t->Z0,t; 0.0 1 /Defaults/Decayers/Dummy decaymode t->W+,d; 0.000030 1 /Defaults/Decayers/Flat decaymode t->W+,s; 0.0017650 1 /Defaults/Decayers/Flat decaymode t->W+,b; 0.9982050 1 /Defaults/Decayers/Flat decaymode t->W+,b'; 0.0 1 /Defaults/Decayers/Flat decaymode t->h0,t; 0.0 1 /Defaults/Decayers/Dummy decaymode t->H+,b; 0.0 1 /Defaults/Decayers/Flat decaymode t->~chi_10,~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode t->~chi_20,~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode t->~chi_30,~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode t->~chi_40,~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode t->~g=~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode t->~Gravitino,~t_1; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode b'->g=b'; 0.0 1 /Defaults/Decayers/Dummy decaymode b'->gamma,b'; 0.0 1 /Defaults/Decayers/Dummy decaymode b'->Z0,b'; 0.0 1 /Defaults/Decayers/Dummy decaymode b'->W-,u; 0.0 1 /Defaults/Decayers/Flat decaymode b'->W-,c; 0.0 1 /Defaults/Decayers/Flat decaymode b'->W-,t; 0.0 1 /Defaults/Decayers/Flat decaymode b'->W-,t'; 0.0 1 /Defaults/Decayers/Flat decaymode b'->h0,b'; 0.0 1 /Defaults/Decayers/Dummy decaymode b'->H-,c; 0.0 1 /Defaults/Decayers/Flat decaymode b'->H-,t; 0.0 1 /Defaults/Decayers/Flat decaymode t'->g=t'; 0.0 1 /Defaults/Decayers/Dummy decaymode t'->gamma,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode t'->Z0,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode t'->W+,d; 0.0 1 /Defaults/Decayers/Flat decaymode t'->W+,s; 0.0 1 /Defaults/Decayers/Flat decaymode t'->W+,b; 0.0 1 /Defaults/Decayers/Flat decaymode t'->W+,b'; 0.0 1 /Defaults/Decayers/Flat decaymode t'->h0,t'; 0.0 1 /Defaults/Decayers/Dummy decaymode t'->H+,b; 0.0 1 /Defaults/Decayers/Flat decaymode t'->H+,b'; 0.0 1 /Defaults/Decayers/Flat decaymode e-->gamma,e-; 0.0 1 /Defaults/Decayers/Dummy decaymode e-->Z0,e-; 0.0 1 /Defaults/Decayers/Dummy decaymode e-->W-,nu_e; 0.0 1 /Defaults/Decayers/Dummy decaymode e-->h0,e-; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_e->Z0,nu_e; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_e->W+,e-; 0.0 1 /Defaults/Decayers/Dummy decaymode mu-->nu_ebar,e-,nu_mu; 1.0 1 /Defaults/Decayers/WeakToHadrons decaymode mu-->gamma,mu-; 0.0 1 /Defaults/Decayers/Dummy decaymode mu-->Z0,mu-; 0.0 1 /Defaults/Decayers/Dummy decaymode mu-->W-,nu_mu; 0.0 1 /Defaults/Decayers/Dummy decaymode mu-->h0,mu-; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_mu->Z0,nu_mu; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_mu->W+,mu-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau-->nu_ebar,e-,nu_tau; 0.17830 1 /Defaults/Decayers/WeakToHadrons decaymode tau-->nu_mubar,mu-,nu_tau; 0.17350 1 /Defaults/Decayers/WeakToHadrons decaymode tau-->nu_tau,pi-; 0.11310 1 /Defaults/Decayers/Flat decaymode tau-->nu_tau,rho-; 0.24940 1 /Defaults/Decayers/Flat decaymode tau-->nu_tau,pi-,pi0; 0.0030 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,pi0; 0.090 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,pi0,pi0; 0.00270 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,pi0,pi0; 0.010 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,pi0,pi0,pi0; 0.00140 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,pi0,pi0,pi0; 0.00120 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_S0; 0.000250 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_L0; 0.000250 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-; 0.00710 1 /Defaults/Decayers/Flat decaymode tau-->nu_tau,K*-; 0.0120 1 /Defaults/Decayers/Flat decaymode tau-->nu_tau,K-,pi0; 0.00040 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K*-,pi0; 0.000750 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K*-,pi0,pi0; 0.000060 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,K_S0; 0.000780 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,K_L0; 0.000780 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,K+,pi-; 0.00340 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho0; 0.080 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,pi+,pi-; 0.0110 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,omega; 0.01910 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,eta; 0.000060 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,rho0; 0.0050 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho0,pi0; 0.01330 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,pi+,pi-; 0.00670 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,pi+,pi-,pi0; 0.00050 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,omega; 0.00350 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,omega,pi0; 0.00060 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,eta; 0.00150 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,eta,pi0; 0.000210 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,rho0,pi0; 0.00020 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho0,rho0; 0.000750 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,eta,eta; 0.00010 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho0,pi0,pi0; 0.00020 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,rho-,rho0,pi0,pi0; 0.00110 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho+,rho-; 0.00020 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho+,pi-,pi0; 0.00020 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho-,pi+,pi0; 0.00020 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,rho0,rho0,pi0; 0.000220 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K*-,pi0,pi0; 0.00040 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,pi0,pi0,pi0; 0.00010 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_S0,pi0; 0.002050 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_L0,pi0; 0.002050 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,K_S0,pi0; 0.000690 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,K-,K_L0,pi0; 0.000690 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_S0,K_S0; 0.000250 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_S0,K_L0; 0.000510 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->nu_tau,pi-,K_L0,K_L0; 0.000250 1 /Defaults/Decayers/Tau2Hadrons decaymode tau-->gamma,tau-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau-->Z0,tau-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau-->W-,nu_tau; 0.0 1 /Defaults/Decayers/Dummy decaymode tau-->h0,tau-; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_tau->Z0,nu_tau; 0.0 1 /Defaults/Decayers/Dummy decaymode nu_tau->W+,tau-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau'-->gamma,tau'-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau'-->Z0,tau'-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau'-->W-,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode tau'-->h0,tau'-; 0.0 1 /Defaults/Decayers/Dummy decaymode tau'-->H-,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode nu'_tau->Z0,nu'_tau; 0.0 1 /Defaults/Decayers/Dummy decaymode nu'_tau->W+,tau'-; 0.0 1 /Defaults/Decayers/Flat decaymode nu'_tau->H+,tau'-; 0.0 1 /Defaults/Decayers/Flat decaymode g->d=dbar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->u=ubar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->s=sbar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->c=cbar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->b=bbar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->t=tbar; 0.0 0 /Defaults/Decayers/Dummy decaymode g->b'=b'bar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->t'=t'bar; 0.0 1 /Defaults/Decayers/Dummy decaymode g->g,g; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->d=dbar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->u=ubar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->s=sbar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->c=cbar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->b=bbar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->t=tbar; 0.0 0 /Defaults/Decayers/Dummy decaymode gamma->b'=b'bar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->t'=t'bar; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->e-,e+; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->mu-,mu+; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->tau-,tau+; 0.0 1 /Defaults/Decayers/Dummy decaymode gamma->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Dummy decaymode Z0->d=dbar; 0.1539950 1 /Defaults/Decayers/ColourPairs decaymode Z0->u=ubar; 0.119420 1 /Defaults/Decayers/ColourPairs decaymode Z0->s=sbar; 0.1539840 1 /Defaults/Decayers/ColourPairs decaymode Z0->c=cbar; 0.1192590 1 /Defaults/Decayers/ColourPairs decaymode Z0->b=bbar; 0.1522720 1 /Defaults/Decayers/ColourPairs decaymode Z0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Z0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Z0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Z0->e-,e+; 0.0335760 1 /Defaults/Decayers/Flat decaymode Z0->nu_e,nu_ebar; 0.0668060 1 /Defaults/Decayers/Flat decaymode Z0->mu-,mu+; 0.0335760 1 /Defaults/Decayers/Flat decaymode Z0->nu_mu,nu_mubar; 0.0668060 1 /Defaults/Decayers/Flat decaymode Z0->tau-,tau+; 0.03350 1 /Defaults/Decayers/Flat decaymode Z0->nu_tau,nu_taubar; 0.0668060 1 /Defaults/Decayers/Flat decaymode Z0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode Z0->nu'_tau,nu'_taubar; 0.0 1 /Defaults/Decayers/Flat decaymode W+->dbar=u; 0.3213690 1 /Defaults/Decayers/ColourPairs decaymode W+->dbar=c; 0.0164940 1 /Defaults/Decayers/ColourPairs decaymode W+->dbar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->dbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->sbar=u; 0.0165020 1 /Defaults/Decayers/ColourPairs decaymode W+->sbar=c; 0.3206150 1 /Defaults/Decayers/ColourPairs decaymode W+->sbar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->sbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->bbar=u; 0.000010 1 /Defaults/Decayers/ColourPairs decaymode W+->bbar=c; 0.0005910 1 /Defaults/Decayers/ColourPairs decaymode W+->bbar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->bbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->b'bar=u; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->b'bar=c; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->b'bar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->b'bar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W+->e+,nu_e; 0.1081660 1 /Defaults/Decayers/Flat decaymode W+->mu+,nu_mu; 0.1081660 1 /Defaults/Decayers/Flat decaymode W+->tau+,nu_tau; 0.1080870 1 /Defaults/Decayers/Flat decaymode W+->tau'+,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode h0->d=dbar; 0.0000010 1 /Defaults/Decayers/ColourPairs decaymode h0->u=ubar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode h0->s=sbar; 0.0003490 1 /Defaults/Decayers/ColourPairs decaymode h0->c=cbar; 0.0487070 1 /Defaults/Decayers/ColourPairs decaymode h0->b=bbar; 0.7683080 1 /Defaults/Decayers/ColourPairs decaymode h0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode h0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode h0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode h0->e-,e+; 0.0 1 /Defaults/Decayers/Flat decaymode h0->mu-,mu+; 0.0002270 1 /Defaults/Decayers/Flat decaymode h0->tau-,tau+; 0.0640480 1 /Defaults/Decayers/Flat decaymode h0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode h0->g,g; 0.0406210 1 /Defaults/Decayers/Flat decaymode h0->gamma,gamma; 0.0020430 1 /Defaults/Decayers/Flat decaymode h0->gamma,Z0; 0.0006150 1 /Defaults/Decayers/Flat decaymode h0->Z0,Z0; 0.0069810 1 /Defaults/Decayers/Flat decaymode h0->W+,W-; 0.0680990 1 /Defaults/Decayers/Flat decaymode h0->~chi_10,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_20,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_20,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_30,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_30,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_30,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_40,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_40,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_40,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_40,~chi_40; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_1+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_1+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_2+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~chi_2+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~d_L=~d_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~d_R=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~d_L=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~d_Lbar=~d_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~u_L=~u_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~u_R=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~u_L=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~u_Lbar=~u_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~s_L=~s_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~s_R=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~s_L=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~s_Lbar=~s_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~c_L=~c_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~c_R=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~c_L=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~c_Lbar=~c_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~b_1=~b_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~b_2=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~b_1=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~b_1bar=~b_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~t_1=~t_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~t_2=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~t_1=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~t_1bar=~t_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~e_L-,~e_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~e_R-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~e_L-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~e_L+,~e_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_eL,~nu_eLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_eR,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_eL,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_eLbar,~nu_eR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~mu_L-,~mu_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~mu_R-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~mu_L-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~mu_L+,~mu_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_muL,~nu_muLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_muR,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_muL,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_muLbar,~nu_muR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~tau_1-,~tau_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~tau_2-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~tau_1-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~tau_1+,~tau_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_tauL,~nu_tauLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_tauR,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_tauL,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode h0->~nu_tauLbar,~nu_tauR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode Z'0->d=dbar; 0.1458350 1 /Defaults/Decayers/ColourPairs decaymode Z'0->u=ubar; 0.1132760 1 /Defaults/Decayers/ColourPairs decaymode Z'0->s=sbar; 0.1458350 1 /Defaults/Decayers/ColourPairs decaymode Z'0->c=cbar; 0.1132710 1 /Defaults/Decayers/ColourPairs decaymode Z'0->b=bbar; 0.1457810 1 /Defaults/Decayers/ColourPairs decaymode Z'0->t=tbar; 0.0490020 1 /Defaults/Decayers/ColourPairs decaymode Z'0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Z'0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Z'0->e-,e+; 0.0320250 1 /Defaults/Decayers/Flat decaymode Z'0->nu_e,nu_ebar; 0.0636420 1 /Defaults/Decayers/Flat decaymode Z'0->mu-,mu+; 0.0320250 1 /Defaults/Decayers/Flat decaymode Z'0->nu_mu,nu_mubar; 0.0636420 1 /Defaults/Decayers/Flat decaymode Z'0->tau-,tau+; 0.0320220 1 /Defaults/Decayers/Flat decaymode Z'0->nu_tau,nu_taubar; 0.0636420 1 /Defaults/Decayers/Flat decaymode Z'0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->nu'_tau,nu'_taubar; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->W+,W-; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->H+,H-; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->Z0,gamma; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->Z0,h0; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->h0,A0; 0.0 1 /Defaults/Decayers/Flat decaymode Z'0->H0,A0; 0.0 1 /Defaults/Decayers/Flat decaymode W'+->dbar=u; 0.2512250 1 /Defaults/Decayers/ColourPairs decaymode W'+->dbar=c; 0.01290 1 /Defaults/Decayers/ColourPairs decaymode W'+->dbar=t; 0.0000060 1 /Defaults/Decayers/ColourPairs decaymode W'+->dbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->sbar=u; 0.01290 1 /Defaults/Decayers/ColourPairs decaymode W'+->sbar=c; 0.2507640 1 /Defaults/Decayers/ColourPairs decaymode W'+->sbar=t; 0.000380 1 /Defaults/Decayers/ColourPairs decaymode W'+->sbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->bbar=u; 0.0000080 1 /Defaults/Decayers/ColourPairs decaymode W'+->bbar=c; 0.0004650 1 /Defaults/Decayers/ColourPairs decaymode W'+->bbar=t; 0.2154180 1 /Defaults/Decayers/ColourPairs decaymode W'+->bbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->b'bar=u; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->b'bar=c; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->b'bar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->b'bar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode W'+->e+,nu_e; 0.0853120 1 /Defaults/Decayers/Flat decaymode W'+->mu+,nu_mu; 0.0853120 1 /Defaults/Decayers/Flat decaymode W'+->tau+,nu_tau; 0.085310 1 /Defaults/Decayers/Flat decaymode W'+->tau'+,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode W'+->W+,Z0; 0.0 1 /Defaults/Decayers/Flat decaymode W'+->W+,gamma; 0.0 1 /Defaults/Decayers/Flat decaymode W'+->W+,h0; 0.0 1 /Defaults/Decayers/Flat decaymode H0->d=dbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->u=ubar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->s=sbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->c=cbar; 0.0000490 1 /Defaults/Decayers/ColourPairs decaymode H0->b=bbar; 0.0007740 1 /Defaults/Decayers/ColourPairs decaymode H0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H0->e-,e+; 0.0 1 /Defaults/Decayers/Flat decaymode H0->mu-,mu+; 0.0 1 /Defaults/Decayers/Flat decaymode H0->tau-,tau+; 0.0000740 1 /Defaults/Decayers/Flat decaymode H0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode H0->g,g; 0.0004170 1 /Defaults/Decayers/Flat decaymode H0->gamma,gamma; 0.0000150 1 /Defaults/Decayers/Flat decaymode H0->gamma,Z0; 0.0000610 1 /Defaults/Decayers/Flat decaymode H0->Z0,Z0; 0.306710 1 /Defaults/Decayers/Flat decaymode H0->W+,W-; 0.6890110 1 /Defaults/Decayers/Flat decaymode H0->Z0,h0; 0.0 1 /Defaults/Decayers/Flat decaymode H0->h0,h0; 0.0028890 1 /Defaults/Decayers/Flat decaymode H0->W+,H-; 0.0 1 /Defaults/Decayers/Flat decaymode H0->H+,W-; 0.0 1 /Defaults/Decayers/Flat decaymode H0->Z0,A0; 0.0 1 /Defaults/Decayers/Flat decaymode H0->h0,A0; 0.0 1 /Defaults/Decayers/Flat decaymode H0->A0,A0; 0.0 1 /Defaults/Decayers/Flat decaymode H0->~chi_10,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_20,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_20,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_30,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_30,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_30,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_40,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_40,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_40,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_40,~chi_40; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_1+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_1+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_2+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~chi_2+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~d_L=~d_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~d_R=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~d_L=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~d_Lbar=~d_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~u_L=~u_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~u_R=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~u_L=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~u_Lbar=~u_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~s_L=~s_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~s_R=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~s_L=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~s_Lbar=~s_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~c_L=~c_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~c_R=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~c_L=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~c_Lbar=~c_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~b_1=~b_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~b_2=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~b_1=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~b_1bar=~b_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~t_1=~t_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~t_2=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~t_1=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~t_1bar=~t_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~e_L-,~e_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~e_R-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~e_L-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~e_L+,~e_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_eL,~nu_eLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_eR,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_eL,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_eLbar,~nu_eR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~mu_L-,~mu_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~mu_R-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~mu_L-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~mu_L+,~mu_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_muL,~nu_muLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_muR,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_muL,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_muLbar,~nu_muR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~tau_1-,~tau_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~tau_2-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~tau_1-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~tau_1+,~tau_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_tauL,~nu_tauLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_tauR,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_tauL,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H0->~nu_tauLbar,~nu_tauR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->d=dbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode A0->u=ubar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode A0->s=sbar; 0.0000010 1 /Defaults/Decayers/ColourPairs decaymode A0->c=cbar; 0.0001210 1 /Defaults/Decayers/ColourPairs decaymode A0->b=bbar; 0.0019240 1 /Defaults/Decayers/ColourPairs decaymode A0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode A0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode A0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode A0->e-,e+; 0.0 1 /Defaults/Decayers/Flat decaymode A0->mu-,mu+; 0.0000010 1 /Defaults/Decayers/Flat decaymode A0->tau-,tau+; 0.0001840 1 /Defaults/Decayers/Flat decaymode A0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode A0->g,g; 0.0031060 1 /Defaults/Decayers/Flat decaymode A0->gamma,gamma; 0.0000150 1 /Defaults/Decayers/Flat decaymode A0->gamma,Z0; 0.0000030 1 /Defaults/Decayers/Flat decaymode A0->Z0,Z0; 0.0 1 /Defaults/Decayers/Flat decaymode A0->W+,W-; 0.0 1 /Defaults/Decayers/Flat decaymode A0->Z0,h0; 0.9946460 1 /Defaults/Decayers/Flat decaymode A0->h0,h0; 0.0 1 /Defaults/Decayers/Flat decaymode A0->W+,H-; 0.0 1 /Defaults/Decayers/Flat decaymode A0->H+,W-; 0.0 1 /Defaults/Decayers/Flat decaymode A0->~chi_10,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_20,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_20,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_30,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_30,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_30,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_40,~chi_10; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_40,~chi_20; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_40,~chi_30; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_40,~chi_40; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_1+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_1+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_2+,~chi_1-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~chi_2+,~chi_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~d_L=~d_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~d_R=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~d_L=~d_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~d_Lbar=~d_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~u_L=~u_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~u_R=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~u_L=~u_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~u_Lbar=~u_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~s_L=~s_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~s_R=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~s_L=~s_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~s_Lbar=~s_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~c_L=~c_Lbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~c_R=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~c_L=~c_Rbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~c_Lbar=~c_R; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~b_1=~b_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~b_2=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~b_1=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~b_1bar=~b_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~t_1=~t_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~t_2=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~t_1=~t_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~t_1bar=~t_2; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~e_L-,~e_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~e_R-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~e_L-,~e_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~e_L+,~e_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_eL,~nu_eLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_eR,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_eL,~nu_eRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_eLbar,~nu_eR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~mu_L-,~mu_L+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~mu_R-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~mu_L-,~mu_R+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~mu_L+,~mu_R-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_muL,~nu_muLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_muR,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_muL,~nu_muRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_muLbar,~nu_muR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~tau_1-,~tau_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~tau_2-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~tau_1-,~tau_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~tau_1+,~tau_2-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_tauL,~nu_tauLbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_tauR,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_tauL,~nu_tauRbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode A0->~nu_tauLbar,~nu_tauR; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->dbar=u; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H+->sbar=c; 0.0000210 1 /Defaults/Decayers/ColourPairs decaymode H+->bbar=t; 0.0901350 1 /Defaults/Decayers/ColourPairs decaymode H+->b'bar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode H+->e+,nu_e; 0.0 1 /Defaults/Decayers/Flat decaymode H+->mu+,nu_mu; 0.0000130 1 /Defaults/Decayers/Flat decaymode H+->tau+,nu_tau; 0.0037140 1 /Defaults/Decayers/Flat decaymode H+->tau'+,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode H+->W+,h0; 0.9061170 1 /Defaults/Decayers/Flat decaymode H+->~chi_10,~chi_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_10,~chi_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_20,~chi_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_20,~chi_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_30,~chi_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_30,~chi_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_40,~chi_1+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~chi_40,~chi_2+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~t_1=~b_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~t_2=~b_1bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~t_1=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~t_2=~b_2bar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~d_Lbar=~u_L; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~s_Lbar=~c_L; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~e_L+,~nu_eL; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~mu_L+,~nu_muL; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~tau_1+,~nu_tauL; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode H+->~tau_2+,~nu_tauL; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode R0->d=sbar; 0.2151190 1 /Defaults/Decayers/ColourPairs decaymode R0->u=cbar; 0.2151190 1 /Defaults/Decayers/ColourPairs decaymode R0->s=bbar; 0.2151190 1 /Defaults/Decayers/ColourPairs decaymode R0->c=tbar; 0.2147240 1 /Defaults/Decayers/ColourPairs decaymode R0->b=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode R0->t=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode R0->e-,mu+; 0.069960 1 /Defaults/Decayers/Flat decaymode R0->mu-,tau+; 0.0699590 1 /Defaults/Decayers/Flat decaymode R0->tau-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode LQ_ue->u,e-; 1.0 1 /Defaults/Decayers/Flat decaymode pi0->gamma,gamma; 0.9880 1 /Defaults/Decayers/Flat decaymode pi0->gamma,e-,e+; 0.0120 1 /Defaults/Decayers/Dalitz decaymode rho0->pi+,pi-; 0.9987390 1 /Defaults/Decayers/V2PP decaymode rho0->pi0,gamma; 0.000790 1 /Defaults/Decayers/Flat decaymode rho0->eta,gamma; 0.000380 1 /Defaults/Decayers/Flat decaymode rho0->mu-,mu+; 0.0000460 1 /Defaults/Decayers/Flat decaymode rho0->e-,e+; 0.0000450 1 /Defaults/Decayers/Flat decaymode a_20->rho+,pi-; 0.347250 1 /Defaults/Decayers/Flat decaymode a_20->rho-,pi+; 0.347250 1 /Defaults/Decayers/Flat decaymode a_20->eta,pi0; 0.1440 1 /Defaults/Decayers/Flat decaymode a_20->omega,pi+,pi-; 0.1040 1 /Defaults/Decayers/Flat decaymode a_20->K+,K-; 0.02450 1 /Defaults/Decayers/Flat decaymode a_20->K_L0,K_L0; 0.012250 1 /Defaults/Decayers/Flat decaymode a_20->K_S0,K_S0; 0.012250 1 /Defaults/Decayers/Flat decaymode a_20->pi0,gamma; 0.00280 1 /Defaults/Decayers/Flat decaymode a_20->eta',pi0; 0.00570 1 /Defaults/Decayers/Flat decaymode K_L0->pi0,pi0,pi0; 0.21120 1 /Defaults/Decayers/Flat decaymode K_L0->pi+,pi-,pi0; 0.12560 1 /Defaults/Decayers/Flat decaymode K_L0->nu_ebar,e-,pi+; 0.19390 1 /Defaults/Decayers/WeakToHadrons decaymode K_L0->nu_e,e+,pi-; 0.19390 1 /Defaults/Decayers/WeakToHadrons decaymode K_L0->nu_mubar,mu-,pi+; 0.13590 1 /Defaults/Decayers/WeakToHadrons decaymode K_L0->nu_mu,mu+,pi-; 0.13590 1 /Defaults/Decayers/WeakToHadrons decaymode K_L0->pi+,pi-; 0.0020 1 /Defaults/Decayers/Flat decaymode K_L0->pi0,pi0; 0.0010 1 /Defaults/Decayers/Flat decaymode K_L0->gamma,gamma; 0.00060 1 /Defaults/Decayers/Flat decaymode pi+->mu+,nu_mu; 0.9998770 1 /Defaults/Decayers/Flat decaymode pi+->e+,nu_e; 0.0001230 1 /Defaults/Decayers/Flat decaymode rho+->pi+,pi0; 0.999550 1 /Defaults/Decayers/V2PP decaymode rho+->pi+,gamma; 0.000450 1 /Defaults/Decayers/Flat decaymode a_2+->rho+,pi0; 0.347250 1 /Defaults/Decayers/Flat decaymode a_2+->rho0,pi+; 0.347250 1 /Defaults/Decayers/Flat decaymode a_2+->eta,pi+; 0.1440 1 /Defaults/Decayers/Flat decaymode a_2+->omega,pi+,pi0; 0.1040 1 /Defaults/Decayers/Flat decaymode a_2+->K+,Kbar0; 0.0490 1 /Defaults/Decayers/Flat decaymode a_2+->pi+,gamma; 0.00280 1 /Defaults/Decayers/Flat decaymode a_2+->eta',pi+; 0.00570 1 /Defaults/Decayers/Flat decaymode eta->gamma,gamma; 0.39230 1 /Defaults/Decayers/Flat decaymode eta->pi0,pi0,pi0; 0.3210 1 /Defaults/Decayers/Flat decaymode eta->pi+,pi-,pi0; 0.23170 1 /Defaults/Decayers/Flat decaymode eta->gamma,pi+,pi-; 0.04780 1 /Defaults/Decayers/Flat decaymode eta->gamma,e-,e+; 0.00490 1 /Defaults/Decayers/Dalitz decaymode eta->pi+,pi-,e-,e+; 0.00130 1 /Defaults/Decayers/Flat decaymode eta->gamma,mu-,mu+; 0.00030 1 /Defaults/Decayers/Flat decaymode eta->pi0,gamma,gamma; 0.00070 1 /Defaults/Decayers/Flat decaymode omega->pi+,pi-,pi0; 0.890 1 /Defaults/Decayers/OmegaPhi3Pi decaymode omega->gamma,pi0; 0.086930 1 /Defaults/Decayers/Flat decaymode omega->pi+,pi-; 0.02210 1 /Defaults/Decayers/V2PP decaymode omega->eta,gamma; 0.000830 1 /Defaults/Decayers/Flat decaymode omega->pi0,pi0,gamma; 0.000070 1 /Defaults/Decayers/Flat decaymode omega->e-,e+; 0.000070 1 /Defaults/Decayers/Flat decaymode f_2->pi+,pi-; 0.5640 1 /Defaults/Decayers/Flat decaymode f_2->pi0,pi0; 0.2820 1 /Defaults/Decayers/Flat decaymode f_2->pi+,pi-,pi0,pi0; 0.0720 1 /Defaults/Decayers/Flat decaymode f_2->pi+,pi-,pi+,pi-; 0.0280 1 /Defaults/Decayers/Flat decaymode f_2->K+,K-; 0.0230 1 /Defaults/Decayers/Flat decaymode f_2->K_L0,K_L0; 0.01150 1 /Defaults/Decayers/Flat decaymode f_2->K_S0,K_S0; 0.01150 1 /Defaults/Decayers/Flat decaymode f_2->eta,eta; 0.0050 1 /Defaults/Decayers/Flat decaymode f_2->pi0,pi0,pi0,pi0; 0.0030 1 /Defaults/Decayers/Flat decaymode K_S0->pi+,pi-; 0.68610 1 /Defaults/Decayers/Flat decaymode K_S0->pi0,pi0; 0.31390 1 /Defaults/Decayers/Flat decaymode K0->K_L0; 0.50 1 /Defaults/Decayers/Flat decaymode K0->K_S0; 0.50 1 /Defaults/Decayers/Flat decaymode K*0->K+,pi-; 0.6650 1 /Defaults/Decayers/V2PP decaymode K*0->K0,pi0; 0.3330 1 /Defaults/Decayers/V2PP decaymode K*0->K0,gamma; 0.0020 1 /Defaults/Decayers/Flat decaymode K*_20->K+,pi-; 0.3330 1 /Defaults/Decayers/Flat decaymode K*_20->K0,pi0; 0.1660 1 /Defaults/Decayers/Flat decaymode K*_20->K*+,pi-; 0.1680 1 /Defaults/Decayers/Flat decaymode K*_20->K*0,pi0; 0.0840 1 /Defaults/Decayers/Flat decaymode K*_20->K*+,pi-,pi0; 0.0870 1 /Defaults/Decayers/Flat decaymode K*_20->K*0,pi+,pi-; 0.0430 1 /Defaults/Decayers/Flat decaymode K*_20->K+,rho-; 0.0590 1 /Defaults/Decayers/Flat decaymode K*_20->K0,rho0; 0.0290 1 /Defaults/Decayers/Flat decaymode K*_20->K0,omega; 0.0290 1 /Defaults/Decayers/Flat decaymode K*_20->K0,eta; 0.0020 1 /Defaults/Decayers/Flat decaymode K+->mu+,nu_mu; 0.63520 1 /Defaults/Decayers/Flat decaymode K+->pi+,pi0; 0.21160 1 /Defaults/Decayers/Flat decaymode K+->pi+,pi+,pi-; 0.05590 1 /Defaults/Decayers/Flat decaymode K+->pi+,pi0,pi0; 0.01730 1 /Defaults/Decayers/Flat decaymode K+->nu_e,e+,pi0; 0.04820 1 /Defaults/Decayers/WeakToHadrons decaymode K+->nu_mu,mu+,pi0; 0.03180 1 /Defaults/Decayers/WeakToHadrons decaymode K*+->K0,pi+; 0.6660 1 /Defaults/Decayers/V2PP decaymode K*+->K+,pi0; 0.3330 1 /Defaults/Decayers/V2PP decaymode K*+->K+,gamma; 0.0010 1 /Defaults/Decayers/Flat decaymode K*_2+->K0,pi+; 0.3320 1 /Defaults/Decayers/Flat decaymode K*_2+->K+,pi0; 0.1660 1 /Defaults/Decayers/Flat decaymode K*_2+->K*0,pi+; 0.1680 1 /Defaults/Decayers/Flat decaymode K*_2+->K*+,pi0; 0.0840 1 /Defaults/Decayers/Flat decaymode K*_2+->K*0,pi+,pi0; 0.0860 1 /Defaults/Decayers/Flat decaymode K*_2+->K*+,pi+,pi-; 0.0430 1 /Defaults/Decayers/Flat decaymode K*_2+->K0,rho+; 0.0590 1 /Defaults/Decayers/Flat decaymode K*_2+->K+,rho0; 0.0290 1 /Defaults/Decayers/Flat decaymode K*_2+->K+,omega; 0.0290 1 /Defaults/Decayers/Flat decaymode K*_2+->K+,eta; 0.0020 1 /Defaults/Decayers/Flat decaymode K*_2+->K+,gamma; 0.0020 1 /Defaults/Decayers/Flat decaymode eta'->pi+,pi-,eta; 0.4370 1 /Defaults/Decayers/Flat decaymode eta'->pi0,pi0,eta; 0.2080 1 /Defaults/Decayers/Flat decaymode eta'->gamma,rho0; 0.3020 1 /Defaults/Decayers/Flat decaymode eta'->gamma,omega; 0.03020 1 /Defaults/Decayers/Flat decaymode eta'->gamma,gamma; 0.02120 1 /Defaults/Decayers/Flat decaymode eta'->pi0,pi0,pi0; 0.00160 1 /Defaults/Decayers/Flat decaymode phi->K+,K-; 0.489470 1 /Defaults/Decayers/V2PP decaymode phi->K_L0,K_S0; 0.340 1 /Defaults/Decayers/V2PP decaymode phi->rho-,pi+; 0.0430 1 /Defaults/Decayers/Flat decaymode phi->rho0,pi0; 0.0430 1 /Defaults/Decayers/Flat decaymode phi->rho+,pi-; 0.0430 1 /Defaults/Decayers/Flat decaymode phi->pi+,pi-,pi0; 0.0270 1 /Defaults/Decayers/OmegaPhi3Pi decaymode phi->gamma,eta; 0.01260 1 /Defaults/Decayers/Flat decaymode phi->pi0,gamma; 0.00130 1 /Defaults/Decayers/Flat decaymode phi->e-,e+; 0.00030 1 /Defaults/Decayers/Flat decaymode phi->mu-,mu+; 0.000250 1 /Defaults/Decayers/Flat decaymode phi->pi+,pi-; 0.000080 1 /Defaults/Decayers/Flat decaymode f'_2->K+,K-; 0.4440 1 /Defaults/Decayers/Flat decaymode f'_2->K_L0,K_L0; 0.2220 1 /Defaults/Decayers/Flat decaymode f'_2->K_S0,K_S0; 0.2220 1 /Defaults/Decayers/Flat decaymode f'_2->eta,eta; 0.1040 1 /Defaults/Decayers/Flat decaymode f'_2->pi+,pi-; 0.0040 1 /Defaults/Decayers/Flat decaymode f'_2->pi0,pi0; 0.0040 1 /Defaults/Decayers/Flat decaymode D+->e+,nu_e,Kbar0; 0.070 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,K*bar0; 0.0650 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,Kbar0,pi0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,K-,pi+; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,K*bar0,pi0; 0.0110 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,K*-,pi+; 0.0110 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,pi0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,eta; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,eta'; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,rho0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->e+,nu_e,omega; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,Kbar0; 0.070 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,K*bar0; 0.0650 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,Kbar0,pi0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,K-,pi+; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,K*bar0,pi0; 0.0110 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,K*-,pi+; 0.0110 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,pi0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,eta; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,eta'; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,rho0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->mu+,nu_mu,omega; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode D+->Kbar0,pi+; 0.0260 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,pi+; 0.0190 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,rho+; 0.0660 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,rho+; 0.0410 1 /Defaults/Decayers/Flat decaymode D+->K*_1bar0,pi+; 0.0450 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,a_1+; 0.0760 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,K+; 0.00730 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,K+; 0.00470 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,K*+; 0.00470 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,K*+; 0.0260 1 /Defaults/Decayers/Flat decaymode D+->pi0,pi+; 0.0010 1 /Defaults/Decayers/Flat decaymode D+->pi0,rho+; 0.00060 1 /Defaults/Decayers/Flat decaymode D+->eta,pi+; 0.00660 1 /Defaults/Decayers/Flat decaymode D+->eta,rho+; 0.0050 1 /Defaults/Decayers/Flat decaymode D+->eta',pi+; 0.0030 1 /Defaults/Decayers/Flat decaymode D+->eta',rho+; 0.0030 1 /Defaults/Decayers/Flat decaymode D+->rho0,pi+; 0.00060 1 /Defaults/Decayers/Flat decaymode D+->rho0,rho+; 0.00060 1 /Defaults/Decayers/Flat decaymode D+->omega,pi+; 0.0010 1 /Defaults/Decayers/Flat decaymode D+->omega,rho+; 0.0010 1 /Defaults/Decayers/Flat decaymode D+->phi,pi+; 0.0060 1 /Defaults/Decayers/Flat decaymode D+->phi,rho+; 0.0050 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,pi+,pi0; 0.0120 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,pi+,rho0; 0.00570 1 /Defaults/Decayers/Flat decaymode D+->K-,pi+,pi+; 0.0670 1 /Defaults/Decayers/Flat decaymode D+->K-,rho+,pi+; 0.0080 1 /Defaults/Decayers/Flat decaymode D+->pi+,pi+,pi-; 0.00220 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,K+,Kbar0; 0.0270 1 /Defaults/Decayers/Flat decaymode D+->K-,K+,pi+; 0.0040 1 /Defaults/Decayers/Flat decaymode D+->phi,pi+,pi0; 0.0190 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,pi+,pi+,pi-; 0.0120 1 /Defaults/Decayers/Flat decaymode D+->K*bar0,pi+,pi+,pi-; 0.0020 1 /Defaults/Decayers/Flat decaymode D+->K-,pi+,pi+,pi0; 0.0090 1 /Defaults/Decayers/Flat decaymode D+->pi+,pi+,pi-,pi0; 0.02180 1 /Defaults/Decayers/Flat decaymode D+->K-,pi+,pi+,pi+,pi-; 0.0010 1 /Defaults/Decayers/Flat decaymode D+->K-,pi+,pi+,pi0,pi0; 0.0220 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,pi+,pi+,pi-,pi0; 0.0870 1 /Defaults/Decayers/Flat decaymode D+->Kbar0,rho0,pi+,pi+,pi-; 0.0010 1 /Defaults/Decayers/Flat decaymode D+->K-,rho0,pi+,pi+,pi0; 0.00190 1 /Defaults/Decayers/Flat decaymode D+->pi+,pi+,pi+,pi-,pi-; 0.00150 1 /Defaults/Decayers/Flat decaymode D+->rho0,pi+,pi+,pi-,pi0; 0.00280 1 /Defaults/Decayers/Flat decaymode D*+->D0,pi+; 0.6830 1 /Defaults/Decayers/V2PP decaymode D*+->D+,pi0; 0.3060 1 /Defaults/Decayers/V2PP decaymode D*+->D+,gamma; 0.0110 1 /Defaults/Decayers/Flat decaymode D*_2+->D0,pi+; 0.30 1 /Defaults/Decayers/Flat decaymode D*_2+->D+,pi0; 0.150 1 /Defaults/Decayers/Flat decaymode D*_2+->D*0,pi+; 0.160 1 /Defaults/Decayers/Flat decaymode D*_2+->D*+,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode D*_2+->D*0,pi+,pi0; 0.130 1 /Defaults/Decayers/Flat decaymode D*_2+->D*+,pi+,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode D*_2+->D0,pi+,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode D*_2+->D+,pi+,pi-; 0.040 1 /Defaults/Decayers/Flat decaymode D0->e+,nu_e,K-; 0.0340 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,K*-; 0.0270 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,Kbar0,pi-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,K-,pi0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,K*bar0,pi-; 0.0040 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,K*-,pi0; 0.0040 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,pi-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->e+,nu_e,rho-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,K-; 0.0340 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,K*-; 0.0270 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,Kbar0,pi-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,K-,pi0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,K*bar0,pi-; 0.0040 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,K*-,pi0; 0.0040 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,pi-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->mu+,nu_mu,rho-; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode D0->K-,pi+; 0.03650 1 /Defaults/Decayers/Flat decaymode D0->K*-,pi+; 0.0450 1 /Defaults/Decayers/Flat decaymode D0->K-,rho+; 0.0730 1 /Defaults/Decayers/Flat decaymode D0->K*-,rho+; 0.0620 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,pi0; 0.0210 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,pi0; 0.0210 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,eta; 0.0210 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,rho0; 0.00610 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,rho0; 0.0150 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,omega; 0.0250 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,phi; 0.00880 1 /Defaults/Decayers/Flat decaymode D0->K-,a_1+; 0.0740 1 /Defaults/Decayers/Flat decaymode D0->K_1-,pi+; 0.01090 1 /Defaults/Decayers/Flat decaymode D0->K-,K+; 0.00410 1 /Defaults/Decayers/Flat decaymode D0->K*-,K+; 0.0020 1 /Defaults/Decayers/Flat decaymode D0->K-,K*+; 0.00350 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,K0; 0.00110 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,K0; 0.0010 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,K*0; 0.00270 1 /Defaults/Decayers/Flat decaymode D0->pi+,pi-; 0.00160 1 /Defaults/Decayers/Flat decaymode D0->pi0,pi0; 0.00160 1 /Defaults/Decayers/Flat decaymode D0->phi,rho0; 0.00180 1 /Defaults/Decayers/Flat decaymode D0->K-,pi+,pi0; 0.0110 1 /Defaults/Decayers/Flat decaymode D0->K-,pi+,rho0; 0.00630 1 /Defaults/Decayers/Flat decaymode D0->K-,K+,Kbar0; 0.00520 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,pi+,pi-; 0.0180 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,pi+,pi-; 0.0160 1 /Defaults/Decayers/Flat decaymode D0->K-,K0,pi+; 0.00340 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,K+,pi-; 0.00360 1 /Defaults/Decayers/Flat decaymode D0->K_S0,K_S0,K_S0; 0.00090 1 /Defaults/Decayers/Flat decaymode D0->phi,pi+,pi-; 0.00060 1 /Defaults/Decayers/Flat decaymode D0->pi+,pi-,pi0; 0.0150 1 /Defaults/Decayers/Flat decaymode D0->K-,pi+,pi0,pi0; 0.09230 1 /Defaults/Decayers/Flat decaymode D0->K-,pi+,pi+,pi-; 0.0180 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,pi+,pi-,pi0; 0.0220 1 /Defaults/Decayers/Flat decaymode D0->K*bar0,pi+,pi-,pi0; 0.00770 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,K+,K-,pi0; 0.0090 1 /Defaults/Decayers/Flat decaymode D0->pi+,pi+,pi-,pi-; 0.00750 1 /Defaults/Decayers/Flat decaymode D0->K-,pi+,pi+,pi-,pi0; 0.0240 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,pi+,pi+,pi-,pi-; 0.00850 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,pi+,pi-,pi0,pi0; 0.0670 1 /Defaults/Decayers/Flat decaymode D0->Kbar0,rho0,pi0,pi0,pi0; 0.05110 1 /Defaults/Decayers/Flat decaymode D0->pi+,pi+,pi-,pi-,pi0; 0.0170 1 /Defaults/Decayers/Flat decaymode D0->rho0,pi+,pi+,pi-,pi-; 0.00040 1 /Defaults/Decayers/Flat decaymode D0->K+,K-,pi+,pi-,pi0; 0.00280 1 /Defaults/Decayers/Flat decaymode D*0->D0,pi0; 0.6190 1 /Defaults/Decayers/V2PP decaymode D*0->D0,gamma; 0.3810 1 /Defaults/Decayers/Flat decaymode D*_20->D+,pi-; 0.30 1 /Defaults/Decayers/Flat decaymode D*_20->D0,pi0; 0.150 1 /Defaults/Decayers/Flat decaymode D*_20->D*+,pi-; 0.160 1 /Defaults/Decayers/Flat decaymode D*_20->D*0,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode D*_20->D*+,pi-,pi0; 0.130 1 /Defaults/Decayers/Flat decaymode D*_20->D*0,pi+,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode D*_20->D+,pi-,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode D*_20->D0,pi+,pi-; 0.040 1 /Defaults/Decayers/Flat decaymode D_s+->tau+,nu_tau; 0.010 1 /Defaults/Decayers/Flat decaymode D_s+->e+,nu_e,eta; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->e+,nu_e,eta'; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->e+,nu_e,phi; 0.030 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->e+,nu_e,K+,K-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->e+,nu_e,K0,Kbar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->mu+,nu_mu,eta; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->mu+,nu_mu,eta'; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->mu+,nu_mu,phi; 0.030 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->mu+,nu_mu,K+,K-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->mu+,nu_mu,K0,Kbar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode D_s+->eta,pi+; 0.0150 1 /Defaults/Decayers/Flat decaymode D_s+->eta',pi+; 0.0370 1 /Defaults/Decayers/Flat decaymode D_s+->phi,pi+; 0.0280 1 /Defaults/Decayers/Flat decaymode D_s+->eta,rho+; 0.0790 1 /Defaults/Decayers/Flat decaymode D_s+->eta',rho+; 0.0950 1 /Defaults/Decayers/Flat decaymode D_s+->phi,rho+; 0.0520 1 /Defaults/Decayers/Flat decaymode D_s+->f_0,pi+; 0.00780 1 /Defaults/Decayers/Flat decaymode D_s+->pi+,pi0; 0.0010 1 /Defaults/Decayers/Flat decaymode D_s+->rho+,pi0; 0.0010 1 /Defaults/Decayers/Flat decaymode D_s+->pi+,rho0; 0.0010 1 /Defaults/Decayers/Flat decaymode D_s+->rho+,rho0; 0.0010 1 /Defaults/Decayers/Flat decaymode D_s+->K+,Kbar0; 0.0280 1 /Defaults/Decayers/Flat decaymode D_s+->K*+,Kbar0; 0.0330 1 /Defaults/Decayers/Flat decaymode D_s+->K+,K*bar0; 0.0260 1 /Defaults/Decayers/Flat decaymode D_s+->K*+,K*bar0; 0.050 1 /Defaults/Decayers/Flat decaymode D_s+->p+,nbar0; 0.010 1 /Defaults/Decayers/Flat decaymode D_s+->eta,K+; 0.0050 1 /Defaults/Decayers/Flat decaymode D_s+->eta',K+; 0.0050 1 /Defaults/Decayers/Flat decaymode D_s+->phi,K+; 0.0050 1 /Defaults/Decayers/Flat decaymode D_s+->eta,K*+; 0.0050 1 /Defaults/Decayers/Flat decaymode D_s+->u=dbar,s=sbar; 0.250 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode D_s+->u=dbar; 0.09520 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode D*_s+->D_s+,gamma; 0.940 1 /Defaults/Decayers/Flat decaymode D*_s+->D_s+,pi0; 0.060 1 /Defaults/Decayers/Flat decaymode D*_2s+->D0,K+; 0.40 1 /Defaults/Decayers/Flat decaymode D*_2s+->D+,K0; 0.40 1 /Defaults/Decayers/Flat decaymode D*_2s+->D*0,K+; 0.10 1 /Defaults/Decayers/Flat decaymode D*_2s+->D*+,K0; 0.10 1 /Defaults/Decayers/Flat decaymode eta_c->?MatchLightQuark,?MatchLightAntiQuark; 1.0 1 /Defaults/Decayers/OniumToHadrons decaymode Jpsi->e-,e+; 0.06020 1 /Defaults/Decayers/Flat decaymode Jpsi->mu-,mu+; 0.06010 1 /Defaults/Decayers/Flat decaymode Jpsi->?MatchLightQuark,?MatchLightAntiQuark; 0.87970 1 /Defaults/Decayers/OniumToHadrons decaymode chi_2c->Jpsi,gamma; 0.1350 1 /Defaults/Decayers/Flat decaymode chi_2c->?MatchLightQuark,?MatchLightAntiQuark; 0.8650 1 /Defaults/Decayers/OniumToHadrons decaymode B0->nu_e,e+,D-; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_e,e+,D*-; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_e,e+,D_1-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_e,e+,D*_0-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_e,e+,D*_1-; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_e,e+,D*_2-; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D-; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D*-; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D_1-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D*_0-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D*_1-; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_mu,mu+,D*_2-; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_tau,tau+,D-; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode B0->nu_tau,tau+,D*-; 0.030 1 /Defaults/Decayers/WeakToHadrons decaymode B0->D-,pi+; 0.00350 1 /Defaults/Decayers/Flat decaymode B0->D-,rho+; 0.0110 1 /Defaults/Decayers/Flat decaymode B0->D-,a_1+; 0.00550 1 /Defaults/Decayers/Flat decaymode B0->D*-,pi+; 0.00420 1 /Defaults/Decayers/Flat decaymode B0->D*-,rho+; 0.0090 1 /Defaults/Decayers/Flat decaymode B0->D*-,a_1+; 0.0180 1 /Defaults/Decayers/Flat decaymode B0->D-,D_s+; 0.0150 1 /Defaults/Decayers/Flat decaymode B0->D-,D*_s+; 0.01850 1 /Defaults/Decayers/Flat decaymode B0->D*-,D_s+; 0.01350 1 /Defaults/Decayers/Flat decaymode B0->D*-,D*_s+; 0.0250 1 /Defaults/Decayers/Flat decaymode B0->eta_c,K0; 0.00040 1 /Defaults/Decayers/Flat decaymode B0->eta_c,K*0; 0.00070 1 /Defaults/Decayers/Flat decaymode B0->Jpsi,K0; 0.00080 1 /Defaults/Decayers/Flat decaymode B0->Jpsi,K*0; 0.00140 1 /Defaults/Decayers/Flat decaymode B0->chi_1c,K0; 0.00190 1 /Defaults/Decayers/Flat decaymode B0->chi_1c,K*0; 0.00250 1 /Defaults/Decayers/Flat decaymode B0->u=dbar,cbar=d; 0.42910 1 /Defaults/Decayers/WeakTo3PlusHadrons decaymode B0->u=cbar,dbar=d; 0.080 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B0->c=sbar,cbar=d; 0.070 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B0->c=cbar,sbar=d; 0.020 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B0->u=dbar,ubar=d; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode B0->c=sbar,ubar=d; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B*0->B0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode B*_20->B+,pi-; 0.30 1 /Defaults/Decayers/Flat decaymode B*_20->B0,pi0; 0.150 1 /Defaults/Decayers/Flat decaymode B*_20->B*+,pi-; 0.160 1 /Defaults/Decayers/Flat decaymode B*_20->B*0,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode B*_20->B*+,pi-,pi0; 0.130 1 /Defaults/Decayers/Flat decaymode B*_20->B*0,pi+,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode B*_20->B+,pi-,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode B*_20->B0,pi+,pi-; 0.040 1 /Defaults/Decayers/Flat decaymode B+->nu_e,e+,Dbar0; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_e,e+,D*bar0; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_e,e+,D_1bar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_e,e+,D*_0bar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_e,e+,D*_1bar0; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_e,e+,D*_2bar0; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,Dbar0; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,D*bar0; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,D_1bar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,D*_0bar0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,D*_1bar0; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_mu,mu+,D*_2bar0; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_tau,tau+,Dbar0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode B+->nu_tau,tau+,D*bar0; 0.030 1 /Defaults/Decayers/WeakToHadrons decaymode B+->Dbar0,pi+; 0.00350 1 /Defaults/Decayers/Flat decaymode B+->Dbar0,rho+; 0.0110 1 /Defaults/Decayers/Flat decaymode B+->Dbar0,a_1+; 0.00550 1 /Defaults/Decayers/Flat decaymode B+->D*bar0,pi+; 0.00420 1 /Defaults/Decayers/Flat decaymode B+->D*bar0,rho+; 0.0090 1 /Defaults/Decayers/Flat decaymode B+->D*bar0,a_1+; 0.0180 1 /Defaults/Decayers/Flat decaymode B+->Dbar0,D_s+; 0.0150 1 /Defaults/Decayers/Flat decaymode B+->Dbar0,D*_s+; 0.01850 1 /Defaults/Decayers/Flat decaymode B+->D*bar0,D_s+; 0.01350 1 /Defaults/Decayers/Flat decaymode B+->D*bar0,D*_s+; 0.0250 1 /Defaults/Decayers/Flat decaymode B+->eta_c,K+; 0.00040 1 /Defaults/Decayers/Flat decaymode B+->eta_c,K*+; 0.00070 1 /Defaults/Decayers/Flat decaymode B+->Jpsi,K+; 0.00080 1 /Defaults/Decayers/Flat decaymode B+->Jpsi,K*+; 0.00140 1 /Defaults/Decayers/Flat decaymode B+->chi_1c,K+; 0.00190 1 /Defaults/Decayers/Flat decaymode B+->chi_1c,K*+; 0.00250 1 /Defaults/Decayers/Flat decaymode B+->u=dbar,cbar=u; 0.42910 1 /Defaults/Decayers/WeakTo3PlusHadrons decaymode B+->u=cbar,dbar=u; 0.080 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B+->c=sbar,cbar=u; 0.070 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B+->c=cbar,sbar=u; 0.020 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B+->u=dbar,ubar=u; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode B+->c=sbar,ubar=u; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B*+->B+,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode B*_2+->B0,pi+; 0.30 1 /Defaults/Decayers/Flat decaymode B*_2+->B+,pi0; 0.150 1 /Defaults/Decayers/Flat decaymode B*_2+->B*0,pi+; 0.160 1 /Defaults/Decayers/Flat decaymode B*_2+->B*+,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode B*_2+->B*0,pi+,pi0; 0.130 1 /Defaults/Decayers/Flat decaymode B*_2+->B*+,pi+,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode B*_2+->B0,pi+,pi0; 0.080 1 /Defaults/Decayers/Flat decaymode B*_2+->B+,pi+,pi-; 0.040 1 /Defaults/Decayers/Flat decaymode B_s0->nu_e,e+,D_s-; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_e,e+,D*_s-; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_e,e+,D_1s-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_e,e+,D*_0s-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_e,e+,D*_1s-; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_e,e+,D*_2s-; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D_s-; 0.020 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D*_s-; 0.0550 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D_1s-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D*_0s-; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D*_1s-; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_mu,mu+,D*_2s-; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_tau,tau+,D_s-; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->nu_tau,tau+,D*_s-; 0.030 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->D_s-,pi+; 0.00350 1 /Defaults/Decayers/Flat decaymode B_s0->D_s-,rho+; 0.0110 1 /Defaults/Decayers/Flat decaymode B_s0->D_s-,a_1+; 0.00550 1 /Defaults/Decayers/Flat decaymode B_s0->D*_s-,pi+; 0.00420 1 /Defaults/Decayers/Flat decaymode B_s0->D*_s-,rho+; 0.0090 1 /Defaults/Decayers/Flat decaymode B_s0->D*_s-,a_1+; 0.0180 1 /Defaults/Decayers/Flat decaymode B_s0->D_s-,D_s+; 0.0150 1 /Defaults/Decayers/Flat decaymode B_s0->D_s-,D*_s+; 0.01850 1 /Defaults/Decayers/Flat decaymode B_s0->D*_s-,D_s+; 0.01350 1 /Defaults/Decayers/Flat decaymode B_s0->D*_s-,D*_s+; 0.0250 1 /Defaults/Decayers/Flat decaymode B_s0->eta_c,eta; 0.00020 1 /Defaults/Decayers/Flat decaymode B_s0->eta_c,eta'; 0.00020 1 /Defaults/Decayers/Flat decaymode B_s0->eta_c,phi; 0.00070 1 /Defaults/Decayers/Flat decaymode B_s0->Jpsi,eta; 0.00040 1 /Defaults/Decayers/Flat decaymode B_s0->Jpsi,eta'; 0.00040 1 /Defaults/Decayers/Flat decaymode B_s0->Jpsi,phi; 0.00140 1 /Defaults/Decayers/Flat decaymode B_s0->chi_1c,eta; 0.0010 1 /Defaults/Decayers/Flat decaymode B_s0->chi_1c,eta'; 0.00090 1 /Defaults/Decayers/Flat decaymode B_s0->chi_1c,phi; 0.00250 1 /Defaults/Decayers/Flat decaymode B_s0->u=dbar,cbar=s; 0.42910 1 /Defaults/Decayers/WeakTo3PlusHadrons decaymode B_s0->u=cbar,dbar=s; 0.080 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B_s0->c=sbar,cbar=s; 0.070 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B_s0->c=cbar,sbar=s; 0.020 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode B_s0->u=dbar,ubar=s; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode B_s0->c=sbar,ubar=s; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode B*_s0->B_s0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode B*_2s0->B+,K-; 0.30 1 /Defaults/Decayers/Flat decaymode B*_2s0->B0,Kbar0; 0.30 1 /Defaults/Decayers/Flat decaymode B*_2s0->B*+,K-; 0.20 1 /Defaults/Decayers/Flat decaymode B*_2s0->B*0,Kbar0; 0.20 1 /Defaults/Decayers/Flat decaymode B_c+->nu_tau,tau+; 0.0470 1 /Defaults/Decayers/Flat decaymode B_c+->c=sbar; 0.1220 1 /Defaults/Decayers/QsToHadrons decaymode B_c+->c=dbar; 0.0060 1 /Defaults/Decayers/QsToHadrons decaymode B_c+->nu_e,e+,eta_c; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->nu_e,e+,Jpsi; 0.0350 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->nu_mu,mu+,eta_c; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->nu_mu,mu+,Jpsi; 0.0350 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->nu_tau,tau+,eta_c; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->nu_tau,tau+,Jpsi; 0.0070 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->u=dbar,cbar=c; 0.150 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->u=cbar,dbar=c; 0.0370 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->u=sbar,cbar=c; 0.0080 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->u=cbar,sbar=c; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->c=sbar,cbar=c; 0.050 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->c=cbar,sbar=c; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->c=dbar,cbar=c; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->c=cbar,dbar=c; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->e+,nu_e,B_s0; 0.0140 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->e+,nu_e,B*_s0; 0.0420 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->mu+,nu_mu,B_s0; 0.0140 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->mu+,nu_mu,B*_s0; 0.0420 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->dbar=u,s=bbar; 0.240 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->dbar=s,u=bbar; 0.0650 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->sbar=u,s=bbar; 0.0120 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->sbar=s,u=bbar; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->e+,nu_e,B0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->e+,nu_e,B*0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->mu+,nu_mu,B0; 0.0010 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->mu+,nu_mu,B*0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->dbar=u,d=bbar; 0.0140 1 /Defaults/Decayers/WeakToHadrons decaymode B_c+->dbar=d,u=bbar; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode B*_c+->B_c+,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode B*_2c+->B0,D+; 0.30 1 /Defaults/Decayers/Flat decaymode B*_2c+->B+,D0; 0.30 1 /Defaults/Decayers/Flat decaymode B*_2c+->B*0,D+; 0.20 1 /Defaults/Decayers/Flat decaymode B*_2c+->B*+,D0; 0.20 1 /Defaults/Decayers/Flat decaymode eta_b->g,g; 1.0 1 /Defaults/Decayers/ColourPairs decaymode Upsilon->e-,e+; 0.02520 1 /Defaults/Decayers/Flat decaymode Upsilon->mu-,mu+; 0.02480 1 /Defaults/Decayers/Flat decaymode Upsilon->tau-,tau+; 0.02670 1 /Defaults/Decayers/Flat decaymode Upsilon->d=dbar; 0.0150 1 /Defaults/Decayers/ColourPairs decaymode Upsilon->u=ubar; 0.0450 1 /Defaults/Decayers/ColourPairs decaymode Upsilon->s=sbar; 0.0150 1 /Defaults/Decayers/ColourPairs decaymode Upsilon->c=cbar; 0.0450 1 /Defaults/Decayers/ColourPairs decaymode Upsilon->g,g,g; 0.77430 1 /Defaults/Decayers/Onium3G decaymode Upsilon->gamma,g,g; 0.0290 1 /Defaults/Decayers/Onium3G decaymode chi_2b->Upsilon,gamma; 0.220 1 /Defaults/Decayers/Flat decaymode chi_2b->g,g; 0.780 1 /Defaults/Decayers/ColourPairs decaymode Delta-->n0,pi-; 1.0 1 /Defaults/Decayers/Flat decaymode Delta0->p+,pi-; 0.3310 1 /Defaults/Decayers/Flat decaymode Delta0->n0,pi0; 0.6630 1 /Defaults/Decayers/Flat decaymode Delta0->n0,gamma; 0.0060 1 /Defaults/Decayers/Flat decaymode Delta+->p+,pi0; 0.6630 1 /Defaults/Decayers/Flat decaymode Delta+->n0,pi+; 0.3310 1 /Defaults/Decayers/Flat decaymode Delta+->p+,gamma; 0.0060 1 /Defaults/Decayers/Flat decaymode Delta++->p+,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma-->n0,pi-; 0.9990 1 /Defaults/Decayers/Flat decaymode Sigma-->nu_ebar,e-,n0; 0.0010 1 /Defaults/Decayers/Flat decaymode Sigma*-->Lambda0,pi-; 0.880 1 /Defaults/Decayers/Flat decaymode Sigma*-->Sigma0,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode Sigma*-->Sigma-,pi0; 0.060 1 /Defaults/Decayers/Flat decaymode Lambda0->p+,pi-; 0.6390 1 /Defaults/Decayers/Flat decaymode Lambda0->n0,pi0; 0.3580 1 /Defaults/Decayers/Flat decaymode Lambda0->n0,gamma; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda0->nu_ebar,e-,p+; 0.0010 1 /Defaults/Decayers/Flat decaymode Sigma0->Lambda0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*0->Lambda0,pi0; 0.880 1 /Defaults/Decayers/Flat decaymode Sigma*0->Sigma+,pi-; 0.060 1 /Defaults/Decayers/Flat decaymode Sigma*0->Sigma-,pi+; 0.060 1 /Defaults/Decayers/Flat decaymode Sigma+->p+,pi0; 0.5160 1 /Defaults/Decayers/Flat decaymode Sigma+->n0,pi+; 0.4830 1 /Defaults/Decayers/Flat decaymode Sigma+->p+,gamma; 0.0010 1 /Defaults/Decayers/Flat decaymode Sigma*+->Lambda0,pi+; 0.880 1 /Defaults/Decayers/Flat decaymode Sigma*+->Sigma+,pi0; 0.060 1 /Defaults/Decayers/Flat decaymode Sigma*+->Sigma0,pi+; 0.060 1 /Defaults/Decayers/Flat decaymode Xi-->Lambda0,pi-; 0.99880 1 /Defaults/Decayers/Flat decaymode Xi-->Sigma-,gamma; 0.00010 1 /Defaults/Decayers/Flat decaymode Xi-->nu_ebar,e-,Lambda0; 0.00060 1 /Defaults/Decayers/Flat decaymode Xi-->nu_mubar,mu-,Lambda0; 0.00040 1 /Defaults/Decayers/Flat decaymode Xi-->nu_ebar,e-,Sigma0; 0.00010 1 /Defaults/Decayers/Flat decaymode Xi*-->Xi0,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode Xi*-->Xi-,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode Xi0->Lambda0,pi0; 0.99540 1 /Defaults/Decayers/Flat decaymode Xi0->Lambda0,gamma; 0.00110 1 /Defaults/Decayers/Flat decaymode Xi0->Sigma0,gamma; 0.00350 1 /Defaults/Decayers/Flat decaymode Xi*0->Xi0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode Xi*0->Xi-,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode Omega-->Lambda0,K-; 0.6760 1 /Defaults/Decayers/Flat decaymode Omega-->Xi0,pi-; 0.2340 1 /Defaults/Decayers/Flat decaymode Omega-->Xi-,pi0; 0.0850 1 /Defaults/Decayers/Flat decaymode Omega-->nu_ebar,e-,Xi0; 0.0050 1 /Defaults/Decayers/Flat decaymode Sigma_c0->Lambda_c+,pi-; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_c0->Lambda_c+,pi-; 1.0 1 /Defaults/Decayers/Flat decaymode Lambda_c+->e+,nu_e,Lambda0; 0.0180 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,Sigma0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,Sigma*0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,n0; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,Delta0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,p+,pi-; 0.0060 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->e+,nu_e,n0,pi0; 0.0060 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,Lambda0; 0.0180 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,Sigma0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,Sigma*0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,n0; 0.0030 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,Delta0; 0.0020 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,p+,pi-; 0.0060 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->mu+,nu_mu,n0,pi0; 0.0060 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_c+->Delta++,K-; 0.00660 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta++,K*-; 0.0250 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,Kbar0; 0.0160 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,K*bar0; 0.00880 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,Kbar0; 0.0050 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,K*bar0; 0.0050 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Lambda0,pi+; 0.00580 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Lambda0,rho+; 0.0050 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma0,pi+; 0.00550 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma0,rho+; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*0,pi+; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*0,rho+; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,pi0; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,eta; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,eta'; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,rho0; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,omega; 0.0040 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,pi0; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,eta; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,rho0; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,omega; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Xi0,K+; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Xi0,K*+; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Xi*0,K+; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta++,pi-; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta++,rho-; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,pi0; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,eta; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,eta'; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,rho0; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,omega; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,phi; 0.00130 1 /Defaults/Decayers/Flat decaymode Lambda_c+->p+,f_0; 0.00180 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,pi0; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,eta; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,eta'; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,rho0; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta+,omega; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->n0,pi+; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->n0,rho+; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta0,pi+; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Delta0,rho+; 0.0030 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Lambda0,K+; 0.0050 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Lambda0,K*+; 0.0050 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma0,K+; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma0,K*+; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*0,K+; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*0,K*+; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,K0; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma+,K*0; 0.0020 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,K0; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->Sigma*+,K*0; 0.0010 1 /Defaults/Decayers/Flat decaymode Lambda_c+->u=dbar,s=ud_0; 0.24320 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=dbar,s=ud_1; 0.0570 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=sbar,s=ud_0; 0.0350 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=dbar,d=ud_0; 0.0350 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->s=uu_1; 0.150 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=su_0; 0.0750 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=su_1; 0.0750 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->d=uu_1; 0.030 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=ud_0; 0.0150 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_c+->u=ud_1; 0.0150 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Xi_c0->e+,nu_e,s=sd_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_c0->mu+,nu_mu,s=sd_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_c0->u=dbar,s=sd_0; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi_c0->u=sbar,s=sd_0; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Sigma_c+->Lambda_c+,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_c+->Lambda_c+,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma_c++->Lambda_c+,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_c++->Lambda_c+,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode Xi_c+->e+,nu_e,s=su_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_c+->mu+,nu_mu,s=su_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_c+->u=dbar,s=su_0; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi_c+->u=sbar,s=su_0; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Xi'_c0->Xi_c0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi*_c0->Xi_c0,pi0; 0.50 1 /Defaults/Decayers/Flat decaymode Xi*_c0->Xi_c0,gamma; 0.50 1 /Defaults/Decayers/Flat decaymode Xi'_c+->Xi_c+,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi*_c+->Xi_c+,pi0; 0.50 1 /Defaults/Decayers/Flat decaymode Xi*_c+->Xi_c+,gamma; 0.50 1 /Defaults/Decayers/Flat decaymode Omega_c0->e+,nu_e,s=ss_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_c0->mu+,nu_mu,s=ss_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_c0->u=dbar,s=ss_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Omega_c0->u=sbar,s=ss_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Omega*_c0->Omega_c0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi_cc+->e+,nu_e,s=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_cc+->mu+,nu_mu,s=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_cc+->u=dbar,s=cd_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi_cc+->u=sbar,s=cd_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Xi*_cc+->e+,nu_e,s=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_cc+->mu+,nu_mu,s=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_cc+->u=dbar,s=cd_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi*_cc+->u=sbar,s=cd_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Xi_cc++->e+,nu_e,s=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_cc++->mu+,nu_mu,s=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_cc++->u=dbar,s=cu_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi_cc++->u=sbar,s=cu_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Xi*_cc++->e+,nu_e,s=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_cc++->mu+,nu_mu,s=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_cc++->u=dbar,s=cu_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Xi*_cc++->u=sbar,s=cu_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Omega_cc+->e+,nu_e,s=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_cc+->mu+,nu_mu,s=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_cc+->u=dbar,s=cs_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Omega_cc+->u=sbar,s=cs_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Omega*_cc+->e+,nu_e,s=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_cc+->mu+,nu_mu,s=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_cc+->u=dbar,s=cs_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Omega*_cc+->u=sbar,s=cs_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Omega*_ccc++->e+,nu_e,s=cc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_ccc++->mu+,nu_mu,s=cc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_ccc++->u=dbar,s=cc_1; 0.760 1 /Defaults/Decayers/QsToHadrons decaymode Omega*_ccc++->u=sbar,s=cc_1; 0.080 1 /Defaults/Decayers/QsToHadrons decaymode Sigma_b-->Lambda_b0,pi-; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_b-->Lambda_b0,pi-; 1.0 1 /Defaults/Decayers/Flat decaymode Lambda_b0->nu_ebar,e-,Lambda_c+; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_b0->nu_mubar,mu-,Lambda_c+; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_b0->nu_taubar,tau-,Lambda_c+; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_b0->Lambda_c+,pi-; 0.00770 1 /Defaults/Decayers/Flat decaymode Lambda_b0->Lambda_c+,rho-; 0.020 1 /Defaults/Decayers/Flat decaymode Lambda_b0->Lambda_c+,a_1-; 0.02350 1 /Defaults/Decayers/Flat decaymode Lambda_b0->Lambda_c+,D_s-; 0.02850 1 /Defaults/Decayers/Flat decaymode Lambda_b0->Lambda_c+,D*_s-; 0.04350 1 /Defaults/Decayers/Flat decaymode Lambda_b0->eta_c,Lambda0; 0.00110 1 /Defaults/Decayers/Flat decaymode Lambda_b0->Jpsi,Lambda0; 0.00220 1 /Defaults/Decayers/Flat decaymode Lambda_b0->chi_1c,Lambda0; 0.00440 1 /Defaults/Decayers/Flat decaymode Lambda_b0->ubar=d,c=ud_0; 0.42910 1 /Defaults/Decayers/WeakTo3PlusHadrons decaymode Lambda_b0->ubar=c,d=ud_0; 0.080 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_b0->cbar=s,c=ud_0; 0.070 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_b0->cbar=c,s=ud_0; 0.020 1 /Defaults/Decayers/QsTo3PlusHadrons decaymode Lambda_b0->ubar=d,u=ud_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Lambda_b0->cbar=s,u=ud_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->nu_ebar,e-,c=sd_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->nu_mubar,mu-,c=sd_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->nu_taubar,tau-,c=sd_0; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->ubar=d,c=sd_0; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->ubar=c,d=sd_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->cbar=s,c=sd_0; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->cbar=c,s=sd_0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->ubar=d,u=sd_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b-->cbar=s,u=sd_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->nu_ebar,e-,c=cd_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->nu_mubar,mu-,c=cd_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->nu_taubar,tau-,c=cd_0; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->ubar=d,c=cd_0; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->ubar=c,d=cd_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->cbar=s,c=cd_0; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->cbar=c,s=cd_0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->ubar=d,u=cd_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc0->cbar=s,u=cd_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Sigma_b0->Lambda_b0,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_b0->Lambda_b0,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma_b+->Lambda_b0,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode Sigma*_b+->Lambda_b0,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode Xi_b0->nu_ebar,e-,c=su_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->nu_mubar,mu-,c=su_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->nu_taubar,tau-,c=su_0; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->ubar=d,c=su_0; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->ubar=c,d=su_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->cbar=s,c=su_0; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->cbar=c,s=su_0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->ubar=d,u=su_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_b0->cbar=s,u=su_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->nu_ebar,e-,c=cu_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->nu_mubar,mu-,c=cu_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->nu_taubar,tau-,c=cu_0; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->ubar=d,c=cu_0; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->ubar=c,d=cu_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->cbar=s,c=cu_0; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->cbar=c,s=cu_0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->ubar=d,u=cu_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bc+->cbar=s,u=cu_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_b-->Xi_b-,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi*_b-->Xi_b-,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi'_b0->Xi_b0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Xi*_b0->Xi_b0,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Omega_b-->nu_ebar,e-,c=ss_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->nu_mubar,mu-,c=ss_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->nu_taubar,tau-,c=ss_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->ubar=d,c=ss_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->ubar=c,d=ss_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->cbar=s,c=ss_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->cbar=c,s=ss_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->ubar=d,u=ss_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_b-->cbar=s,u=ss_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_b-->Omega_b-,gamma; 1.0 1 /Defaults/Decayers/Flat decaymode Omega_bc0->nu_ebar,e-,c=cs_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->nu_mubar,mu-,c=cs_0; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->nu_taubar,tau-,c=cs_0; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->ubar=d,c=cs_0; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->ubar=c,d=cs_0; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->cbar=s,c=cs_0; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->cbar=c,s=cs_0; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->ubar=d,u=cs_0; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bc0->cbar=s,u=cs_0; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->nu_ebar,e-,c=cd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->nu_mubar,mu-,c=cd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->nu_taubar,tau-,c=cd_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->ubar=d,c=cd_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->ubar=c,d=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->cbar=s,c=cd_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->cbar=c,s=cd_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->ubar=d,u=cd_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc0->cbar=s,u=cd_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->nu_ebar,e-,c=cd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->nu_mubar,mu-,c=cd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->nu_taubar,tau-,c=cd_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->ubar=d,c=cd_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->ubar=c,d=cd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->cbar=s,c=cd_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->cbar=c,s=cd_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->ubar=d,u=cd_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc0->cbar=s,u=cd_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->nu_ebar,e-,c=cu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->nu_mubar,mu-,c=cu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->nu_taubar,tau-,c=cu_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->ubar=d,c=cu_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->ubar=c,d=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->cbar=s,c=cu_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->cbar=c,s=cu_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->ubar=d,u=cu_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi'_bc+->cbar=s,u=cu_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->nu_ebar,e-,c=cu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->nu_mubar,mu-,c=cu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->nu_taubar,tau-,c=cu_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->ubar=d,c=cu_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->ubar=c,d=cu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->cbar=s,c=cu_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->cbar=c,s=cu_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->ubar=d,u=cu_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bc+->cbar=s,u=cu_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->nu_ebar,e-,c=cs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->nu_mubar,mu-,c=cs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->nu_taubar,tau-,c=cs_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->ubar=d,c=cs_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->ubar=c,d=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->cbar=s,c=cs_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->cbar=c,s=cs_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->ubar=d,u=cs_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega'_bc0->cbar=s,u=cs_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->nu_ebar,e-,c=cs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->nu_mubar,mu-,c=cs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->nu_taubar,tau-,c=cs_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->ubar=d,c=cs_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->ubar=c,d=cs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->cbar=s,c=cs_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->cbar=c,s=cs_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->ubar=d,u=cs_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bc0->cbar=s,u=cs_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->nu_ebar,e-,c=cc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->nu_mubar,mu-,c=cc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->nu_taubar,tau-,c=cc_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->ubar=d,c=cc_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->ubar=c,d=cc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->cbar=s,c=cc_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->cbar=c,s=cc_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->ubar=d,u=cc_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bcc+->cbar=s,u=cc_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->nu_ebar,e-,c=cc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->nu_mubar,mu-,c=cc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->nu_taubar,tau-,c=cc_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->ubar=d,c=cc_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->ubar=c,d=cc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->cbar=s,c=cc_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->cbar=c,s=cc_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->ubar=d,u=cc_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bcc+->cbar=s,u=cc_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->nu_ebar,e-,c=bd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->nu_mubar,mu-,c=bd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->nu_taubar,tau-,c=bd_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->ubar=d,c=bd_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->ubar=c,d=bd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->cbar=s,c=bd_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->cbar=c,s=bd_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->ubar=d,u=bd_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb-->cbar=s,u=bd_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->nu_ebar,e-,c=bd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->nu_mubar,mu-,c=bd_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->nu_taubar,tau-,c=bd_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->ubar=d,c=bd_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->ubar=c,d=bd_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->cbar=s,c=bd_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->cbar=c,s=bd_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->ubar=d,u=bd_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb-->cbar=s,u=bd_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->nu_ebar,e-,c=bu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->nu_mubar,mu-,c=bu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->nu_taubar,tau-,c=bu_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->ubar=d,c=bu_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->ubar=c,d=bu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->cbar=s,c=bu_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->cbar=c,s=bu_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->ubar=d,u=bu_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi_bb0->cbar=s,u=bu_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->nu_ebar,e-,c=bu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->nu_mubar,mu-,c=bu_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->nu_taubar,tau-,c=bu_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->ubar=d,c=bu_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->ubar=c,d=bu_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->cbar=s,c=bu_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->cbar=c,s=bu_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->ubar=d,u=bu_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Xi*_bb0->cbar=s,u=bu_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->nu_ebar,e-,c=bs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->nu_mubar,mu-,c=bs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->nu_taubar,tau-,c=bs_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->ubar=d,c=bs_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->ubar=c,d=bs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->cbar=s,c=bs_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->cbar=c,s=bs_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->ubar=d,u=bs_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bb-->cbar=s,u=bs_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->nu_ebar,e-,c=bs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->nu_mubar,mu-,c=bs_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->nu_taubar,tau-,c=bs_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->ubar=d,c=bs_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->ubar=c,d=bs_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->cbar=s,c=bs_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->cbar=c,s=bs_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->ubar=d,u=bs_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bb-->cbar=s,u=bs_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->nu_ebar,e-,c=bc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->nu_mubar,mu-,c=bc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->nu_taubar,tau-,c=bc_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->ubar=d,c=bc_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->ubar=c,d=bc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->cbar=s,c=bc_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->cbar=c,s=bc_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->ubar=d,u=bc_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega_bbc0->cbar=s,u=bc_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->nu_ebar,e-,c=bc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->nu_mubar,mu-,c=bc_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->nu_taubar,tau-,c=bc_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->ubar=d,c=bc_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->ubar=c,d=bc_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->cbar=s,c=bc_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->cbar=c,s=bc_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->ubar=d,u=bc_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbc0->cbar=s,u=bc_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->nu_ebar,e-,c=bb_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->nu_mubar,mu-,c=bb_1; 0.1050 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->nu_taubar,tau-,c=bb_1; 0.040 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->ubar=d,c=bb_1; 0.50 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->ubar=c,d=bb_1; 0.080 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->cbar=s,c=bb_1; 0.140 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->cbar=c,s=bb_1; 0.010 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->ubar=d,u=bb_1; 0.0150 1 /Defaults/Decayers/WeakToHadrons decaymode Omega*_bbb-->cbar=s,u=bb_1; 0.0050 1 /Defaults/Decayers/WeakToHadrons decaymode a_00->eta,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode b_10->omega,pi0; 1.0 1 /Defaults/Decayers/Flat decaymode a_0+->eta,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode b_1+->omega,pi+; 1.0 1 /Defaults/Decayers/Flat decaymode f_0->pi+,pi-; 0.520 1 /Defaults/Decayers/Flat decaymode f_0->pi0,pi0; 0.260 1 /Defaults/Decayers/Flat decaymode f_0->K+,K-; 0.110 1 /Defaults/Decayers/Flat decaymode f_0->K_L0,K_L0; 0.0550 1 /Defaults/Decayers/Flat decaymode f_0->K_S0,K_S0; 0.0550 1 /Defaults/Decayers/Flat decaymode h_1->rho+,pi-; 0.3330 1 /Defaults/Decayers/Flat decaymode h_1->rho0,pi0; 0.3340 1 /Defaults/Decayers/Flat decaymode h_1->rho-,pi+; 0.3330 1 /Defaults/Decayers/Flat decaymode K*_00->K+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode K*_00->K0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode K_10->K+,rho-; 0.280 1 /Defaults/Decayers/Flat decaymode K_10->K0,rho0; 0.140 1 /Defaults/Decayers/Flat decaymode K_10->K*+,pi-; 0.3130 1 /Defaults/Decayers/Flat decaymode K_10->K*0,pi0; 0.1570 1 /Defaults/Decayers/Flat decaymode K_10->K0,omega; 0.110 1 /Defaults/Decayers/Flat decaymode K*_0+->K0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode K*_0+->K+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode K_1+->K0,rho+; 0.280 1 /Defaults/Decayers/Flat decaymode K_1+->K+,rho0; 0.140 1 /Defaults/Decayers/Flat decaymode K_1+->K*0,pi+; 0.3130 1 /Defaults/Decayers/Flat decaymode K_1+->K*+,pi0; 0.1570 1 /Defaults/Decayers/Flat decaymode K_1+->K+,omega; 0.110 1 /Defaults/Decayers/Flat decaymode eta1440->pi+,pi-; 0.360 1 /Defaults/Decayers/Flat decaymode eta1440->pi0,pi0; 0.180 1 /Defaults/Decayers/Flat decaymode eta1440->K+,K-; 0.030 1 /Defaults/Decayers/Flat decaymode eta1440->K_L0,K_L0; 0.0150 1 /Defaults/Decayers/Flat decaymode eta1440->K_S0,K_S0; 0.0150 1 /Defaults/Decayers/Flat decaymode eta1440->pi+,pi-,pi+,pi-; 0.20 1 /Defaults/Decayers/Flat decaymode eta1440->pi+,pi-,pi0,pi0; 0.20 1 /Defaults/Decayers/Flat decaymode h'_1->K*0,Kbar0; 0.250 1 /Defaults/Decayers/Flat decaymode h'_1->K*bar0,K0; 0.250 1 /Defaults/Decayers/Flat decaymode h'_1->K*+,K-; 0.250 1 /Defaults/Decayers/Flat decaymode h'_1->K*-,K+; 0.250 1 /Defaults/Decayers/Flat decaymode D*_0+->D0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode D*_0+->D+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D_1+->D*0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode D_1+->D*+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D*_00->D+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode D*_00->D0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D_10->D*+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode D_10->D*0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D*_0s+->D+,K0; 0.50 1 /Defaults/Decayers/Flat decaymode D*_0s+->D0,K+; 0.50 1 /Defaults/Decayers/Flat decaymode D_1s+->D*0,K+; 0.50 1 /Defaults/Decayers/Flat decaymode D_1s+->D*+,K0; 0.50 1 /Defaults/Decayers/Flat decaymode chi_0c->Jpsi,gamma; 0.0070 1 /Defaults/Decayers/Flat decaymode chi_0c->?MatchLightQuark,?MatchLightAntiQuark; 0.9930 1 /Defaults/Decayers/OniumToHadrons decaymode h_1c->?MatchLightQuark,?MatchLightAntiQuark; 1.0 1 /Defaults/Decayers/OniumToHadrons decaymode B*_00->B+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode B*_00->B0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B_10->B*+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode B_10->B*0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B*_0+->B0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode B*_0+->B+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B_1+->B*0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode B_1+->B*+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B*_0s0->B+,K-; 0.50 1 /Defaults/Decayers/Flat decaymode B*_0s0->B0,Kbar0; 0.50 1 /Defaults/Decayers/Flat decaymode B_1s0->B*+,K-; 0.50 1 /Defaults/Decayers/Flat decaymode B_1s0->B*0,Kbar0; 0.50 1 /Defaults/Decayers/Flat decaymode B*_0c+->B0,D+; 0.50 1 /Defaults/Decayers/Flat decaymode B*_0c+->B+,D0; 0.50 1 /Defaults/Decayers/Flat decaymode B_1c+->B*0,D+; 0.50 1 /Defaults/Decayers/Flat decaymode B_1c+->B*+,D0; 0.50 1 /Defaults/Decayers/Flat decaymode chi_0b->Upsilon,gamma; 0.020 1 /Defaults/Decayers/Flat decaymode chi_0b->g,g; 0.980 1 /Defaults/Decayers/ColourPairs decaymode h_1b->g,g; 1.0 1 /Defaults/Decayers/ColourPairs decaymode a_10->rho+,pi-; 0.50 1 /Defaults/Decayers/Flat decaymode a_10->rho-,pi+; 0.50 1 /Defaults/Decayers/Flat decaymode a_1+->rho0,pi+; 0.50 1 /Defaults/Decayers/Flat decaymode a_1+->rho+,pi0; 0.50 1 /Defaults/Decayers/Flat decaymode f_1->a_0+,pi-; 0.1460 1 /Defaults/Decayers/Flat decaymode f_1->a_00,pi0; 0.1460 1 /Defaults/Decayers/Flat decaymode f_1->a_0-,pi+; 0.1460 1 /Defaults/Decayers/Flat decaymode f_1->eta,pi+,pi-; 0.050 1 /Defaults/Decayers/Flat decaymode f_1->eta,pi0,pi0; 0.050 1 /Defaults/Decayers/Flat decaymode f_1->rho+,pi-,pi0; 0.050 1 /Defaults/Decayers/Flat decaymode f_1->rho0,pi+,pi-; 0.150 1 /Defaults/Decayers/Flat decaymode f_1->rho0,pi0,pi0; 0.050 1 /Defaults/Decayers/Flat decaymode f_1->rho-,pi+,pi0; 0.050 1 /Defaults/Decayers/Flat decaymode f_1->K+,K-,pi0; 0.0240 1 /Defaults/Decayers/Flat decaymode f_1->K+,Kbar0,pi-; 0.0240 1 /Defaults/Decayers/Flat decaymode f_1->K0,Kbar0,pi0; 0.0240 1 /Defaults/Decayers/Flat decaymode f_1->K0,K-,pi+; 0.0240 1 /Defaults/Decayers/Flat decaymode f_1->rho0,gamma; 0.0660 1 /Defaults/Decayers/Flat decaymode K*_10->K*+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode K*_10->K*0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode K*_1+->K*0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode K*_1+->K*+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode f'_1->K*0,Kbar0; 0.250 1 /Defaults/Decayers/Flat decaymode f'_1->K*bar0,K0; 0.250 1 /Defaults/Decayers/Flat decaymode f'_1->K*+,K-; 0.250 1 /Defaults/Decayers/Flat decaymode f'_1->K*-,K+; 0.250 1 /Defaults/Decayers/Flat decaymode D*_1+->D*0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode D*_1+->D*+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D*_10->D*+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode D*_10->D*0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode D*_1s+->D*0,K+; 0.50 1 /Defaults/Decayers/Flat decaymode D*_1s+->D*+,K0; 0.50 1 /Defaults/Decayers/Flat decaymode chi_1c->Jpsi,gamma; 0.2730 1 /Defaults/Decayers/Flat decaymode chi_1c->?MatchLightQuark,?MatchLightAntiQuark; 0.7270 1 /Defaults/Decayers/OniumToHadrons decaymode B*_10->B*+,pi-; 0.6670 1 /Defaults/Decayers/Flat decaymode B*_10->B*0,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B*_1+->B*0,pi+; 0.6670 1 /Defaults/Decayers/Flat decaymode B*_1+->B*+,pi0; 0.3330 1 /Defaults/Decayers/Flat decaymode B*_1s0->B*+,K-; 0.50 1 /Defaults/Decayers/Flat decaymode B*_1s0->B*0,Kbar0; 0.50 1 /Defaults/Decayers/Flat decaymode B*_1c+->B*0,D+; 0.50 1 /Defaults/Decayers/Flat decaymode B*_1c+->B*+,D0; 0.50 1 /Defaults/Decayers/Flat decaymode chi_1b->Upsilon,gamma; 0.350 1 /Defaults/Decayers/Flat decaymode chi_1b->g,g; 0.650 1 /Defaults/Decayers/ColourPairs decaymode psi'->e-,e+; 0.00830 1 /Defaults/Decayers/Flat decaymode psi'->mu-,mu+; 0.00830 1 /Defaults/Decayers/Flat decaymode psi'->?MatchLightQuark,?MatchLightAntiQuark; 0.18660 1 /Defaults/Decayers/OniumToHadrons decaymode psi'->Jpsi,pi+,pi-; 0.3240 1 /Defaults/Decayers/Flat decaymode psi'->Jpsi,pi0,pi0; 0.1840 1 /Defaults/Decayers/Flat decaymode psi'->Jpsi,eta; 0.0270 1 /Defaults/Decayers/Flat decaymode psi'->Jpsi,pi0; 0.0010 1 /Defaults/Decayers/Flat decaymode psi'->chi_0c,gamma; 0.0930 1 /Defaults/Decayers/Flat decaymode psi'->chi_1c,gamma; 0.0870 1 /Defaults/Decayers/Flat decaymode psi'->chi_2c,gamma; 0.0780 1 /Defaults/Decayers/Flat decaymode psi'->eta_c,gamma; 0.00280 1 /Defaults/Decayers/Flat decaymode Upsilon'->e-,e+; 0.0140 1 /Defaults/Decayers/Flat decaymode Upsilon'->mu-,mu+; 0.0140 1 /Defaults/Decayers/Flat decaymode Upsilon'->tau-,tau+; 0.0140 1 /Defaults/Decayers/Flat decaymode Upsilon'->d=dbar; 0.0080 1 /Defaults/Decayers/ColourPairs decaymode Upsilon'->u=ubar; 0.0240 1 /Defaults/Decayers/ColourPairs decaymode Upsilon'->s=sbar; 0.0080 1 /Defaults/Decayers/ColourPairs decaymode Upsilon'->c=cbar; 0.0240 1 /Defaults/Decayers/ColourPairs decaymode Upsilon'->g,g,g; 0.4250 1 /Defaults/Decayers/Onium3G decaymode Upsilon'->gamma,g,g; 0.020 1 /Defaults/Decayers/Onium3G decaymode Upsilon'->Upsilon,pi+,pi-; 0.1850 1 /Defaults/Decayers/Flat decaymode Upsilon'->Upsilon,pi0,pi0; 0.0880 1 /Defaults/Decayers/Flat decaymode Upsilon'->chi_0b,gamma; 0.0430 1 /Defaults/Decayers/Flat decaymode Upsilon'->chi_1b,gamma; 0.0670 1 /Defaults/Decayers/Flat decaymode Upsilon'->chi_2b,gamma; 0.0660 1 /Defaults/Decayers/Flat decaymode ~d_L->~Gravitino,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_1-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_2-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_10,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_20,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_30,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~chi_40,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~u_L,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~u_R,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~u_L,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~u_R,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->~g=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->ubar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->ubar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->cbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->cbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->tbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_L->tbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~Gravitino,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_1+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_2+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_10,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_20,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_30,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~chi_40,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~d_L,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~d_R,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~d_L,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~d_R,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->~g=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_L->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~Gravitino,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_1-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_2-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_10,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_20,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_30,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~chi_40,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~c_L,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~c_R,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~c_L,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~c_R,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->~g=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->ubar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->ubar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->cbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->cbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->tbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_L->tbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~Gravitino,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_1+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_2+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_10,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_20,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_30,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~chi_40,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~s_L,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~s_R,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~s_L,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~s_R,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->~g=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_L->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~Gravitino,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_1-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_2-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_10,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_20,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_30,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~chi_40,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~t_1,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~t_2,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~t_1,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~t_2,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->~g=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->ubar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->ubar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->cbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->cbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->tbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_1->tbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~Gravitino,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_1+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_2+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_10,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_20,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_30,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_40,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~b_1,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~b_2,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~b_1,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~b_2,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~g=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~chi_10,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~nu_tauL,tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->~tau_1+,nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_1->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~Gravitino,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_1-,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_2-,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_10,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_20,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_30,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~chi_40,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~nu_eL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~nu_eR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->~nu_eL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_mubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_mubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_mubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_taubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_taubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->nu_taubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_L-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~Gravitino,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_1+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_2+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_10,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_20,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_30,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~chi_40,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~e_L-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~e_R-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~e_L-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->~e_R-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_eL->bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~Gravitino,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_1-,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_2-,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_10,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_20,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_30,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~chi_40,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~nu_muL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~nu_muR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~nu_muL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->~nu_muR,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_ebar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_ebar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_ebar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_taubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_taubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->nu_taubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_L-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~Gravitino,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_1+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_2+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_10,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_20,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_30,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~chi_40,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~mu_L-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~mu_R-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~mu_L-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->~mu_R-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_muL->bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~Gravitino,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_1-,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_2-,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_10,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_20,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_30,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~chi_40,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~nu_tauL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~nu_tauR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~nu_tauL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->~nu_tauR,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_ebar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_ebar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_ebar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_mubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_mubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->nu_mubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_1-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~Gravitino,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_1+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_2+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_10,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_20,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_30,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~chi_40,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~tau_1-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~tau_2-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~tau_1-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->~tau_2-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~nu_tauL->bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~Gravitino,g; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~d_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~d_Lbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~d_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~d_Rbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~u_L=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~u_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~u_R=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~u_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~s_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~s_Lbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~s_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~s_Rbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~c_L=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~c_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~c_R=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~c_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~b_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~b_1bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~b_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~b_2bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~t_1=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~t_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~t_2=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~t_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_10,t=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_20,t=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_30,t=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_40,t=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1+,b=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_1-,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2+,b=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->~chi_2-,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_ebar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_e,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->e-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_mu,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->mu-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_taubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->nu_tau,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tau-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->ubar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->u,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->ubar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->u,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->ubar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->u,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->cbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->c,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->cbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->c,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->cbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->c,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->t,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->t,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->tbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~g->t,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->~Gravitino,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->~Gravitino,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->~Gravitino,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->~Gravitino,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->~Gravitino,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->c=dbar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->d=sbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_ebar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_e,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->e-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_mu,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->mu-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_taubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->nu_tau,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tau-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->ubar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->u,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->ubar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->u,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->ubar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->u,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->cbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->c,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->cbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->c,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->cbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->c,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->t,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->t,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->tbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_10->t,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~Gravitino,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~Gravitino,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~Gravitino,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~Gravitino,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~Gravitino,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_10,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_1-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~chi_2-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~d_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~d_Lbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~d_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~d_Rbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~u_L=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~u_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~u_R=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~u_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~s_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~s_Lbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~s_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~s_Rbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~c_L=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~c_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~c_R=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~c_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~b_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~b_1bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~b_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~b_2bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~t_1=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~t_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~t_2=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~t_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~e_L-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~e_L+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~e_R-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~e_R+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_eL,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_eLbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_eR,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_eRbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~mu_L-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~mu_L+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~mu_R-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~mu_R+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_muL,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_muLbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_muR,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_muRbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~tau_1-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~tau_1+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~tau_2-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~tau_2+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_tauL,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_tauLbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_tauR,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~nu_tauRbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~g=d,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~g=s,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~g=b,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~g=u,ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->~g=c,cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_ebar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_e,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->e-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_mu,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->mu-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_taubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->nu_tau,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tau-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->ubar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->u,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->ubar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->u,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->ubar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->u,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->cbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->c,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->cbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->c,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->cbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->c,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->t,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->t,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->tbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_20->t,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~Gravitino,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~Gravitino,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_10,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_20,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_30,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~chi_40,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~u_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~u_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~d_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~d_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~c_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~c_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~s_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~s_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~t_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~t_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~b_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~b_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_eL,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_eR,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~e_L+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~e_R+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_muL,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_muR,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~mu_L+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~mu_R+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_tauL,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~nu_tauR,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~tau_1+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~tau_2+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~g=dbar,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->~g=sbar,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,mu+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_mu,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_mu,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,mu+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_mu,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,tau+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_tau,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,tau+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_tau,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,nu_tau,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,e+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,e+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,tau+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,nu_tau,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,tau+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,nu_tau,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,nu_tau,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,e+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,e+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,mu+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,mu+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_ebar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->e+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_e,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mubar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->mu+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_mu,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_taubar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->tau+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->nu_tau,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,u,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->dbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,u,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->dbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,c,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,c,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->dbar,sbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,c,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->dbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->u,t,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->dbar,bbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->c,c,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->c,c,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->sbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->c,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->c,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->c,t,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->sbar,bbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->t,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_1+->t,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~Gravitino,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~Gravitino,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~Gravitino,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~Gravitino,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~Gravitino,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_10,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_20,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_1-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~chi_2-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~d_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~d_Lbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~d_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~d_Rbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~u_L=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~u_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~u_R=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~u_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~s_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~s_Lbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~s_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~s_Rbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~c_L=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~c_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~c_R=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~c_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~b_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~b_1bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~b_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~b_2bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~t_1=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~t_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~t_2=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~t_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~e_L-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~e_L+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~e_R-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~e_R+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_eL,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_eLbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_eR,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_eRbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~mu_L-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~mu_L+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~mu_R-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~mu_R+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_muL,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_muLbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_muR,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_muRbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~tau_1-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~tau_1+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~tau_2-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~tau_2+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_tauL,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_tauLbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_tauR,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~nu_tauRbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~g=d,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~g=s,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~g=b,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~g=u,ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->~g=c,cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_ebar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_e,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->e-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_mu,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->mu-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_taubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->nu_tau,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tau-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->ubar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->u,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->ubar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->u,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->ubar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->u,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->cbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->c,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->cbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->c,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->cbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->c,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->t,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->t,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->tbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_30->t,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~Gravitino,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~Gravitino,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~Gravitino,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~Gravitino,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~Gravitino,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_10,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_20,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,gamma; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_30,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,e-,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,mu-,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,tau-,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,d=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,s=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_1-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2+,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~chi_2-,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~d_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~d_Lbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~d_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~d_Rbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~u_L=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~u_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~u_R=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~u_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~s_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~s_Lbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~s_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~s_Rbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~c_L=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~c_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~c_R=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~c_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~b_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~b_1bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~b_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~b_2bar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~t_1=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~t_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~t_2=tbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~t_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~e_L-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~e_L+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~e_R-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~e_R+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_eL,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_eLbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_eR,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_eRbar,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~mu_L-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~mu_L+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~mu_R-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~mu_R+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_muL,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_muLbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_muR,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_muRbar,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~tau_1-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~tau_1+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~tau_2-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~tau_2+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_tauL,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_tauLbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_tauR,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~nu_tauRbar,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~g=d,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~g=s,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~g=b,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~g=u,ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->~g=c,cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,tau-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,tau-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,e-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,e-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,mu-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,mu-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_ebar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_e,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->e-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_mu,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->mu-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,d=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,d=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,s=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,s=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,b=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,b=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_taubar,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->nu_tau,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau+,tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tau-,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->ubar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->u,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->ubar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->u,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->ubar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->u,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->cbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->c,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->cbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->c,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->cbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->c,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->t,d,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->t,d,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->tbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_40->t,s,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~Gravitino,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~Gravitino,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,e-,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,mu-,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,tau-,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,nu_e,nu_ebar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,nu_mu,nu_mubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,nu_tau,nu_taubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,d=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,s=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,b=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,u=ubar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,c=cbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_1+,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_10,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_20,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_30,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~chi_40,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~u_L=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~u_R=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~d_Lbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~d_Rbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~c_L=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~c_R=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~s_Lbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~s_Rbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~t_1=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~t_2=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~b_1bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~b_2bar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_eL,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_eR,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~e_L+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~e_R+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_muL,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_muR,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~mu_L+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~mu_R+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_tauL,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~nu_tauR,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~tau_1+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~tau_2+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~g=dbar,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->~g=sbar,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,mu+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_mu,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_mu,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,mu+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_mu,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,tau+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_tau,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,tau+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_tau,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,nu_tau,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_e,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,e+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_e,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,e+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_e,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,tau+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_tau,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tau+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,tau+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_tau,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tau+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,tau+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,nu_tau,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tau+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,e+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_e,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,e+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,e+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_e,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,e+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,e+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_e,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,e+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,mu+,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_mu,e+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,mu+,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,mu+,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_mu,mu+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,mu+,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,mu+,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,nu_mu,tau+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,mu+,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_ebar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->e+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_e,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mubar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->mu+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_mu,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,dbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,ubar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,dbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,u=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,dbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,ubar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,dbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,u=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,dbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,ubar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,dbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,u=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,sbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,cbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,sbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,c=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,sbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,cbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,sbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,c=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,sbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,cbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,sbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,c=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,bbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,tbar=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,bbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,t=dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,bbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,tbar=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,bbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,t=sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_taubar,bbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,tbar=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->tau+,bbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->nu_tau,t=bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,u,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->dbar,dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,u,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->dbar,dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,c,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,c,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->dbar,sbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,c,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->dbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->u,t,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->dbar,bbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->c,c,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->c,c,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->sbar,sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->c,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->c,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->c,t,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->sbar,bbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->t,t,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~chi_2+->t,t,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~Gravitino,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_1-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_2-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_10,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_20,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_30,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~chi_40,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~d_L,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~d_L,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~d_L,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~d_L,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~u_L,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~u_R,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~u_L,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~u_R,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->~g=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->ubar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->ubar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->cbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->cbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->tbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~d_R->tbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~Gravitino,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_1+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_2+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_10,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_20,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_30,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~chi_40,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~u_L,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~u_L,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~u_L,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~u_L,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~d_L,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~d_R,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~d_L,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~d_R,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->~g=u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~u_R->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~Gravitino,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_1-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_2-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_10,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_20,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_30,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~chi_40,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~s_L,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~s_L,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~s_L,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~s_L,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~c_L,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~c_R,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~c_L,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~c_R,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->~g=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->ubar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->ubar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->cbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->cbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->tbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~s_R->tbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~Gravitino,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_1+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_2+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_10,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_20,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_30,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~chi_40,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~c_L,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~c_L,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~c_L,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~c_L,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~s_L,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~s_R,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~s_L,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~s_R,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->~g=c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~c_R->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~Gravitino,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_1-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_2-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_10,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_20,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_30,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~chi_40,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~b_1,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~b_1,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~b_1,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~b_1,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~t_1,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~t_2,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~t_1,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~t_2,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->~g=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_ebar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_ebar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_ebar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_taubar,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_taubar,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_taubar,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_e,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->e-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_e,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->e-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_e,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->e-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mu,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->mu-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mu,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->mu-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_mu,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->mu-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_tau,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->tau-,u; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_tau,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->tau-,c; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->nu_tau,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->tau-,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->ubar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->ubar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->cbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->cbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->tbar,dbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~b_2->tbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~Gravitino,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_1+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_2+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_10,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_20,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_30,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~chi_40,t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~t_1,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~t_1,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~t_1,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~t_1,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~b_1,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~b_2,W+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~b_1,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~b_2,H+; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->~g=t; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->e+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->e+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->e+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->mu+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->mu+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->mu+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->tau+,d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->tau+,s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->tau+,b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->dbar,sbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->dbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~t_2->sbar,bbar; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~Gravitino,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_1-,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_2-,nu_e; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_10,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_20,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_30,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~chi_40,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~e_L-,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~e_L-,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~e_L-,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~e_L-,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~nu_eL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~nu_eR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~nu_eL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->~nu_eR,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_mubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_mubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_mubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_taubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_taubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->nu_taubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~e_R-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~Gravitino,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_1-,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_2-,nu_mu; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_10,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_20,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_30,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~chi_40,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~mu_L-,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~mu_L-,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~mu_L-,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~mu_L-,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~nu_muL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~nu_muR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~nu_muL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->~nu_muR,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_ebar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_ebar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_ebar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_taubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_taubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->nu_taubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~mu_R-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~Gravitino,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_1-,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_2-,nu_tau; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_10,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_20,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_30,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~chi_40,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~tau_1-,Z0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~tau_1-,h0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~tau_1-,H0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~tau_1-,A0; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~nu_tauL,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~nu_tauR,W-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~nu_tauL,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->~nu_tauR,H-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_e,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_e,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_mu,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_mu,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_tau,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_tau,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_ebar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_ebar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_ebar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_mubar,e-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_mubar,mu-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->nu_mubar,tau-; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->ubar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->ubar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->ubar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->cbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->cbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->cbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->tbar=d; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->tbar=s; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode ~tau_2-->tbar=b; 0.0 1 /Defaults/Decayers/ThresholdDummy decaymode pi_tc0->s=sbar; 0.0174310 1 /Defaults/Decayers/ColourPairs decaymode pi_tc0->c=cbar; 0.0540480 1 /Defaults/Decayers/ColourPairs decaymode pi_tc0->b=bbar; 0.8576940 1 /Defaults/Decayers/ColourPairs decaymode pi_tc0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_tc0->e-,e+; 0.0 1 /Defaults/Decayers/Flat decaymode pi_tc0->mu-,mu+; 0.000250 1 /Defaults/Decayers/Flat decaymode pi_tc0->tau-,tau+; 0.0705780 1 /Defaults/Decayers/Flat decaymode pi_tc0->g,g; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->c=dbar; 0.0227480 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->c=sbar; 0.0265760 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->u=bbar; 0.3594860 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->c=bbar; 0.5615810 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->W+,b=bbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_tc+->e+,nu_e; 0.0 1 /Defaults/Decayers/Flat decaymode pi_tc+->mu+,nu_mu; 0.0001040 1 /Defaults/Decayers/Flat decaymode pi_tc+->tau+,nu_tau; 0.0295040 1 /Defaults/Decayers/Flat decaymode pi'_tc0->s=sbar; 0.0111850 1 /Defaults/Decayers/ColourPairs decaymode pi'_tc0->c=cbar; 0.0346810 1 /Defaults/Decayers/ColourPairs decaymode pi'_tc0->b=bbar; 0.5503540 1 /Defaults/Decayers/ColourPairs decaymode pi'_tc0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi'_tc0->e-,e+; 0.0 1 /Defaults/Decayers/Flat decaymode pi'_tc0->mu-,mu+; 0.000160 1 /Defaults/Decayers/Flat decaymode pi'_tc0->tau-,tau+; 0.0452870 1 /Defaults/Decayers/Flat decaymode pi'_tc0->g,g; 0.3583330 1 /Defaults/Decayers/ColourPairs decaymode eta_tc0->b=bbar; 0.4457810 1 /Defaults/Decayers/ColourPairs decaymode eta_tc0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode eta_tc0->g,g; 0.5542190 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->W+,W-; 0.1440510 1 /Defaults/Decayers/Flat decaymode rho_tc0->W+,pi_tc-; 0.3519020 1 /Defaults/Decayers/Flat decaymode rho_tc0->pi_tc+,W-; 0.3519020 1 /Defaults/Decayers/Flat decaymode rho_tc0->pi_tc+,pi_tc-; 0.0 1 /Defaults/Decayers/Flat decaymode rho_tc0->gamma,pi_tc0; 0.0821070 1 /Defaults/Decayers/Flat decaymode rho_tc0->gamma,pi'_tc0; 0.0295660 1 /Defaults/Decayers/Flat decaymode rho_tc0->Z0,pi_tc0; 0.0015110 1 /Defaults/Decayers/Flat decaymode rho_tc0->Z0,pi'_tc0; 0.0007260 1 /Defaults/Decayers/Flat decaymode rho_tc0->d=dbar; 0.0045180 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->u=ubar; 0.0065220 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->s=sbar; 0.0045180 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->c=cbar; 0.0065220 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->b=bbar; 0.0045130 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc0->e-,e+; 0.0029080 1 /Defaults/Decayers/Flat decaymode rho_tc0->nu_e,nu_ebar; 0.0009730 1 /Defaults/Decayers/Flat decaymode rho_tc0->mu-,mu+; 0.0029080 1 /Defaults/Decayers/Flat decaymode rho_tc0->nu_mu,nu_mubar; 0.0009730 1 /Defaults/Decayers/Flat decaymode rho_tc0->tau-,tau+; 0.0029080 1 /Defaults/Decayers/Flat decaymode rho_tc0->nu_tau,nu_taubar; 0.0009730 1 /Defaults/Decayers/Flat decaymode rho_tc0->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode rho_tc0->nu'_tau,nu'_taubar; 0.0 1 /Defaults/Decayers/Flat decaymode rho_tc+->W+,Z0; 0.1439820 1 /Defaults/Decayers/Flat decaymode rho_tc+->W+,pi_tc0; 0.4898880 1 /Defaults/Decayers/Flat decaymode rho_tc+->pi_tc+,Z0; 0.19510 1 /Defaults/Decayers/Flat decaymode rho_tc+->pi_tc+,pi_tc0; 0.0 1 /Defaults/Decayers/Flat decaymode rho_tc+->pi_tc+,gamma; 0.1143020 1 /Defaults/Decayers/Flat decaymode rho_tc+->W+,pi'_tc0; 0.0084260 1 /Defaults/Decayers/Flat decaymode rho_tc+->dbar=u; 0.0148680 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->dbar=c; 0.0007630 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->dbar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->dbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->sbar=u; 0.0007630 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->sbar=c; 0.014840 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->sbar=t; 0.0000030 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->sbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->bbar=u; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->bbar=c; 0.0000270 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->bbar=t; 0.0019450 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->bbar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->b'bar=u; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->b'bar=c; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->b'bar=t; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->b'bar=t'; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_tc+->e+,nu_e; 0.005030 1 /Defaults/Decayers/Flat decaymode rho_tc+->mu+,nu_mu; 0.005030 1 /Defaults/Decayers/Flat decaymode rho_tc+->tau+,nu_tau; 0.005030 1 /Defaults/Decayers/Flat decaymode rho_tc+->tau'+,nu'_tau; 0.0 1 /Defaults/Decayers/Flat decaymode omega_tc->gamma,pi_tc0; 0.1337760 1 /Defaults/Decayers/Flat decaymode omega_tc->Z0,pi_tc0; 0.0032840 1 /Defaults/Decayers/Flat decaymode omega_tc->gamma,pi'_tc0; 0.371690 1 /Defaults/Decayers/Flat decaymode omega_tc->Z0,pi'_tc0; 0.0068380 1 /Defaults/Decayers/Flat decaymode omega_tc->W+,pi_tc-; 0.0309540 1 /Defaults/Decayers/Flat decaymode omega_tc->pi_tc+,W-; 0.0309540 1 /Defaults/Decayers/Flat decaymode omega_tc->W+,W-; 0.001630 1 /Defaults/Decayers/Flat decaymode omega_tc->pi_tc+,pi_tc-; 0.0 1 /Defaults/Decayers/Flat decaymode omega_tc->d=dbar; 0.0472240 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->u=ubar; 0.0737370 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->s=sbar; 0.0472240 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->c=cbar; 0.0737320 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->b=bbar; 0.0471790 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode omega_tc->e-,e+; 0.0347610 1 /Defaults/Decayers/Flat decaymode omega_tc->nu_e,nu_ebar; 0.0091660 1 /Defaults/Decayers/Flat decaymode omega_tc->mu-,mu+; 0.0347610 1 /Defaults/Decayers/Flat decaymode omega_tc->nu_mu,nu_mubar; 0.0091660 1 /Defaults/Decayers/Flat decaymode omega_tc->tau-,tau+; 0.0347590 1 /Defaults/Decayers/Flat decaymode omega_tc->nu_tau,nu_taubar; 0.0091660 1 /Defaults/Decayers/Flat decaymode omega_tc->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode omega_tc->nu'_tau,nu'_taubar; 0.0 1 /Defaults/Decayers/Flat decaymode V8_tc->d=dbar; 0.0090690 1 /Defaults/Decayers/ColourPairs decaymode V8_tc->u=ubar; 0.0090690 1 /Defaults/Decayers/ColourPairs decaymode V8_tc->s=sbar; 0.0090690 1 /Defaults/Decayers/ColourPairs decaymode V8_tc->c=cbar; 0.0090690 1 /Defaults/Decayers/ColourPairs decaymode V8_tc->b=bbar; 0.5101470 1 /Defaults/Decayers/ColourPairs decaymode V8_tc->t=tbar; 0.4535760 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->d=dbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->u=ubar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->s=sbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->c=cbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->b=bbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_1_tc->g,g; 1.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->d=dbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->u=ubar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->s=sbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->c=cbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->b=bbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode pi_22_8_tc->g,g; 1.0 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->d=dbar; 0.0011280 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->u=ubar; 0.0011280 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->s=sbar; 0.0011280 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->c=cbar; 0.0011280 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->b=bbar; 0.5710470 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->t=tbar; 0.3822880 1 /Defaults/Decayers/ColourPairs decaymode rho_11_tc->g,g; 0.0421530 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->d=dbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->u=ubar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->s=sbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->c=cbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->b=bbar; 0.933610 1 /Defaults/Decayers/ColourPairs decaymode rho_12_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->d=dbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->u=ubar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->s=sbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->c=cbar; 0.0165970 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->b=bbar; 0.933610 1 /Defaults/Decayers/ColourPairs decaymode rho_21_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->d=dbar; 0.055150 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->u=ubar; 0.055150 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->s=sbar; 0.055150 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->c=cbar; 0.055150 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->b=bbar; 0.344690 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->t=tbar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->g,g; 0.2289980 1 /Defaults/Decayers/ColourPairs decaymode rho_22_tc->pi_22_1_tc,g; 0.1642080 1 /Defaults/Decayers/ThresholdDummy decaymode rho_22_tc->pi_22_8_tc,g; 0.0415030 1 /Defaults/Decayers/ThresholdDummy decaymode d*->g=d; 0.8509730 1 /Defaults/Decayers/ThresholdDummy decaymode d*->gamma,d; 0.0054110 1 /Defaults/Decayers/Flat decaymode d*->Z0,d; 0.0450250 1 /Defaults/Decayers/Flat decaymode d*->W-,u; 0.0985910 1 /Defaults/Decayers/Flat decaymode u*->g=u; 0.8498980 1 /Defaults/Decayers/Flat decaymode u*->gamma,u; 0.0216170 1 /Defaults/Decayers/Flat decaymode u*->Z0,u; 0.0300180 1 /Defaults/Decayers/Flat decaymode u*->W+,d; 0.0984660 1 /Defaults/Decayers/Flat decaymode e*-->gamma,e-; 0.2944480 1 /Defaults/Decayers/Flat decaymode e*-->Z0,e-; 0.109450 1 /Defaults/Decayers/Flat decaymode e*-->W-,nu_e; 0.5961020 1 /Defaults/Decayers/Flat decaymode nu*_e0->Z0,nu_e; 0.3899060 1 /Defaults/Decayers/Flat decaymode nu*_e0->W+,e-; 0.6100940 1 /Defaults/Decayers/Flat decaymode Graviton*->d=dbar; 0.06330 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->u=ubar; 0.06330 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->s=sbar; 0.06330 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->c=cbar; 0.0632990 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->b=bbar; 0.0632950 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->t=tbar; 0.0562810 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->b'=b'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->t'=t'bar; 0.0 1 /Defaults/Decayers/ColourPairs decaymode Graviton*->e-,e+; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->nu_e,nu_ebar; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->mu-,mu+; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->nu_mu,nu_mubar; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->tau-,tau+; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->nu_tau,nu_taubar; 0.0204950 1 /Defaults/Decayers/Flat decaymode Graviton*->tau'-,tau'+; 0.0 1 /Defaults/Decayers/Flat decaymode Graviton*->nu'_tau,nu'_taubar; 0.0 1 /Defaults/Decayers/Flat decaymode Graviton*->g,g; 0.3279190 1 /Defaults/Decayers/Flat decaymode Graviton*->gamma,gamma; 0.040990 1 /Defaults/Decayers/Flat decaymode Graviton*->Z0,Z0; 0.0452360 1 /Defaults/Decayers/Flat decaymode Graviton*->W+,W-; 0.0901120 1 /Defaults/Decayers/Flat decaymode nu_Re->e-,dbar=u; 0.198740 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,dbar=c; 0.0102040 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,dbar=t; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,sbar=u; 0.0102050 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,sbar=c; 0.1983560 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,sbar=t; 0.0001510 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,bbar=u; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,bbar=c; 0.0003670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,bbar=t; 0.0819670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,d=ubar; 0.198740 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,d=cbar; 0.0102040 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,d=tbar; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,s=ubar; 0.0102050 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,s=cbar; 0.1983560 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,s=tbar; 0.0001510 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,b=ubar; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,b=cbar; 0.0003670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,b=tbar; 0.0819670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,mu+,nu_Rmu; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e-,mu+,nu_Rmu; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,tau-,nu_Rtau; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Re->e+,tau-,nu_Rtau; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,dbar=u; 0.1987760 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,dbar=c; 0.0102060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,dbar=t; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,sbar=u; 0.0102070 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,sbar=c; 0.198390 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,sbar=t; 0.0001510 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,bbar=u; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,bbar=c; 0.0003670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,bbar=t; 0.0818930 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,d=ubar; 0.1987760 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,d=cbar; 0.0102060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,d=tbar; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,s=ubar; 0.0102070 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,s=cbar; 0.198390 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,s=tbar; 0.0001510 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,b=ubar; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,b=cbar; 0.0003670 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,b=tbar; 0.0818930 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,e+,nu_Re; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu-,e+,nu_Re; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,tau-,nu_Rtau; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rmu->mu+,tau-,nu_Rtau; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,dbar=u; 0.1993440 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,dbar=c; 0.0102340 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,dbar=t; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,sbar=u; 0.0102360 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,sbar=c; 0.1989280 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,sbar=t; 0.0001490 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,bbar=u; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,bbar=c; 0.0003680 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,bbar=t; 0.0807330 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,d=ubar; 0.1993440 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,d=cbar; 0.0102340 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,d=tbar; 0.0000030 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,s=ubar; 0.0102360 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,s=cbar; 0.1989280 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,s=tbar; 0.0001490 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,b=ubar; 0.0000060 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,b=cbar; 0.0003680 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,b=tbar; 0.0807330 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,e+,nu_Re; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau-,e+,nu_Re; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,mu-,nu_Rmu; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode nu_Rtau->tau+,mu-,nu_Rmu; 0.0 1 /Defaults/Decayers/NoThresholdDummy decaymode Z_R0->d=dbar; 0.1847380 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->u=ubar; 0.1045880 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->s=sbar; 0.1847380 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->c=cbar; 0.1045870 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->b=bbar; 0.1847310 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->t=tbar; 0.095820 1 /Defaults/Decayers/ColourPairs decaymode Z_R0->e-,e+; 0.0229020 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_e,nu_ebar; 0.0084290 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_Re,nu_Re; 0.0156020 1 /Defaults/Decayers/Flat decaymode Z_R0->mu-,mu+; 0.0229020 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_mu,nu_mubar; 0.0084290 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_Rmu,nu_Rmu; 0.0156020 1 /Defaults/Decayers/Flat decaymode Z_R0->tau-,tau+; 0.0229020 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_tau,nu_taubar; 0.0084290 1 /Defaults/Decayers/Flat decaymode Z_R0->nu_Rtau,nu_Rtau; 0.0156020 1 /Defaults/Decayers/Flat decaymode W_R+->dbar=u; 0.289590 1 /Defaults/Decayers/ColourPairs decaymode W_R+->dbar=c; 0.014870 1 /Defaults/Decayers/ColourPairs decaymode W_R+->dbar=t; 0.0000080 1 /Defaults/Decayers/ColourPairs decaymode W_R+->sbar=u; 0.014870 1 /Defaults/Decayers/ColourPairs decaymode W_R+->sbar=c; 0.2890610 1 /Defaults/Decayers/ColourPairs decaymode W_R+->sbar=t; 0.0004920 1 /Defaults/Decayers/ColourPairs decaymode W_R+->bbar=u; 0.0000090 1 /Defaults/Decayers/ColourPairs decaymode W_R+->bbar=c; 0.0005360 1 /Defaults/Decayers/ColourPairs decaymode W_R+->bbar=t; 0.279110 1 /Defaults/Decayers/ColourPairs decaymode W_R+->e+,nu_Re; 0.0371510 1 /Defaults/Decayers/Flat decaymode W_R+->mu+,nu_Rmu; 0.0371510 1 /Defaults/Decayers/Flat decaymode W_R+->tau+,nu_Rtau; 0.037150 1 /Defaults/Decayers/Flat decaymode H_L++->e+,e+; 0.0902660 1 /Defaults/Decayers/Flat decaymode H_L++->e+,mu+; 0.0018050 1 /Defaults/Decayers/Flat decaymode H_L++->e+,tau+; 0.0018050 1 /Defaults/Decayers/Flat decaymode H_L++->mu+,mu+; 0.0902660 1 /Defaults/Decayers/Flat decaymode H_L++->mu+,tau+; 0.0018050 1 /Defaults/Decayers/Flat decaymode H_L++->tau+,tau+; 0.8122630 1 /Defaults/Decayers/Flat decaymode H_L++->W+,W+; 0.001790 1 /Defaults/Decayers/Flat decaymode H_R++->e+,e+; 0.0904280 1 /Defaults/Decayers/Flat decaymode H_R++->e+,mu+; 0.0018090 1 /Defaults/Decayers/Flat decaymode H_R++->e+,tau+; 0.0018080 1 /Defaults/Decayers/Flat decaymode H_R++->mu+,mu+; 0.0904280 1 /Defaults/Decayers/Flat decaymode H_R++->mu+,tau+; 0.0018080 1 /Defaults/Decayers/Flat decaymode H_R++->tau+,tau+; 0.813720 1 /Defaults/Decayers/Flat decaymode H_R++->W_R+,W_R+; 0.0 1 /Defaults/Decayers/Flat thepeg-1.8.0.orig/src/runThePEG.cc0000644000175000017500000000730411747772425015052 0ustar sunsun// -*- C++ -*- // // runThePEG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/DebugItem.h" #include "ThePEG/Utilities/DynamicLoader.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Repository/Main.h" #include int main(int argc, char * argv[]) { using namespace ThePEG; string run; long N = -1; long seed = 0; string mainclass; bool tics = false; bool resume = false; bool keepid = false; string tag = ""; for ( int iarg = 1; iarg < argc; ++iarg ) { string arg = argv[iarg]; if ( arg == "-r" ) run = argv[++iarg]; else if ( arg == "-x" ) mainclass = argv[++iarg]; else if ( arg == "-s" ) DynamicLoader::load(argv[++iarg]); else if ( arg.substr(0,2) == "-s" ) DynamicLoader::load(arg.substr(2)); else if ( arg == "-l" ) DynamicLoader::appendPath(argv[++iarg]); else if ( arg.substr(0,2) == "-l" ) DynamicLoader::appendPath(arg.substr(2)); else if ( arg == "-L" ) DynamicLoader::prependPath(argv[++iarg]); else if ( arg.substr(0,2) == "-L" ) DynamicLoader::prependPath(arg.substr(2)); else if ( arg == "-d" ) Debug::setDebug(atoi(argv[++iarg])); else if ( arg.substr(0,2) == "-d" ) Debug::setDebug(atoi(arg.substr(2).c_str())); else if ( arg.substr(0,2) == "-D" ) DebugItem::setDebugItem(arg.substr(2)); else if ( arg == "-N" ) N = atoi(argv[++iarg]); else if ( arg.substr(0,2) == "-N" ) N = atoi(arg.substr(2).c_str()); else if ( arg == "--seed" || arg == "-seed" ) seed = atol(argv[++iarg]); else if ( arg == "--tics" || arg == "-tics" ) tics = true; else if ( arg == "--resume" ) resume = true; else if ( arg == "--keepid" ) keepid = true; else if ( arg == "-t" ) tag = argv[++iarg]; else if ( arg.substr(0,2) == "-t" ) tag = arg.substr(2); else if ( arg.substr(0,6) == "--tag=" ) tag = arg.substr(6); else if ( arg == "--help" || arg == "-h" ) { cerr << "Usage: " << argv[0] << " [-d {debuglevel|-debugitem}] " << "[-l load-path] [-L first-load-path] run-file" << endl; return 3; } else if ( arg == "-v" || arg == "--version" ) { cout << PACKAGE_VERSION << endl; return 0; } else run = arg; } if ( Debug::level ) Debug::unmaskFpuErrors(); if ( run.empty() ) { cerr << "No run-file specified." << endl; return 1; } try { EGPtr eg; if ( run == "-" ) { PersistentIStream is(cin, keepid); is >> eg; } else { PersistentIStream is(run, keepid); is >> eg; } breakThePEG(); if ( !eg ) { cout << "Could not find or read the requested EventGenerator." << endl; return 1; } if ( seed > 0 ) eg->setSeed(seed); if ( !tag.empty() ) eg->addTag(tag); if ( !mainclass.empty() ) { Main::arguments(vector(argv + 1, argv + argc)); Main::N(N); if ( !eg->loadMain(mainclass) ) std::cout << "Main class file '" << mainclass << "' not found." << endl; } else { eg->go(resume? -1: 1, N, tics); } } catch ( Exception & e ) { cerr << "Unexpected exception caught: " << e.what() << endl; e.handle(); return 1; } catch ( std::exception & e ) { cerr << "Unexpected exception caught: " << e.what() << endl; return 1; } catch ( ... ) { breakThePEG(); cerr << "Unknown Exception\n"; return 2; } return 0; } thepeg-1.8.0.orig/src/setupThePEG.cc0000644000175000017500000000760111747772425015406 0ustar sunsun// -*- C++ -*- // // setupThePEG.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // macro is passed in from -D compile flag #ifndef THEPEG_PKGLIBDIR #error Makefile.am needs to define THEPEG_PKGLIBDIR #endif #include "ThePEG/Repository/Repository.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Utilities/DynamicLoader.h" #include int main(int argc, char * argv[]) { using namespace ThePEG; Debug::level = 1; // macro is passed in from -D compile flag string repo = string(THEPEG_PKGLIBDIR) + "/ThePEGDefaults.rpo"; string repout; string file; bool init = false; Repository repository; for ( int iarg = 1; iarg < argc; ++iarg ) { string arg = argv[iarg]; if ( arg == "-d" ) Debug::setDebug(atoi(argv[++iarg])); else if ( arg.substr(0,2) == "-d" ) Debug::setDebug(atoi(arg.substr(2).c_str())); else if ( arg == "-r" ) repo = argv[++iarg]; else if ( arg == "-o" ) repout = argv[++iarg]; else if ( arg == "--init" || arg == "-init" ) { init = true; Debug::level = 0; } else if ( arg == "--exitonerror" ) repository.exitOnError() = 1; else if ( arg == "-s" ) { DynamicLoader::load(argv[++iarg]); repository.globalLibraries().push_back(argv[iarg]); } else if ( arg.substr(0,2) == "-s" ) { DynamicLoader::load(arg.substr(2)); repository.globalLibraries().push_back(arg.substr(2)); } else if ( arg == "-l" ) DynamicLoader::appendPath(argv[++iarg]); else if ( arg.substr(0,2) == "-l" ) DynamicLoader::appendPath(arg.substr(2)); else if ( arg == "-L" ) DynamicLoader::prependPath(argv[++iarg]); else if ( arg.substr(0,2) == "-L" ) DynamicLoader::prependPath(arg.substr(2)); else if ( arg == "-i" ) Repository::appendReadDir(argv[++iarg]); else if ( arg.substr(0,2) == "-i" ) Repository::appendReadDir(arg.substr(2)); else if ( arg == "-I" ) Repository::prependReadDir(argv[++iarg]); else if ( arg.substr(0,2) == "-I" ) Repository::prependReadDir(arg.substr(2)); else if ( arg == "-h" || arg == "--help" ) { cerr << "Usage: " << argv[0] << " {cmdfile} [-d {debuglevel|-debugitem}] [-r input-repository-file]" << " [-l load-path] [-L first-load-path]" << endl; return 3; } else if ( arg == "-v" || arg == "--version" ) { cout << PACKAGE_VERSION << endl; return 0; } else file = arg; } if ( Debug::level ) Debug::unmaskFpuErrors(); try { if ( init ) { breakThePEG(); if ( repout.empty() ) repout = repo; else { string msg = repository.load(repo); if ( ! msg.empty() ) cerr << msg << '\n'; } { HoldFlag<> setup(InterfaceBase::NoReadOnly); if ( file.empty() ) file = "ThePEGDefaults.in"; string msg = repository.read(file, cout); if ( ! msg.empty() ) cerr << msg << '\n'; repository.update(); } repository.save(repout); } else { string msg = repository.load(repo); if ( ! msg.empty() ) cerr << msg << '\n'; breakThePEG(); if ( file.size() && file != "-" ) { if ( file == "--java" || file == "-java" ) repository.read(cin, cout, "-*-ready-*-\n"); else { string msg = repository.read(file, cout); if ( ! msg.empty() ) cerr << msg << '\n'; } } else { repository.read(cin, cout, "ThePEG> "); } } } catch ( Exception & e ) { cerr << "Unexpected exception caught: " << e.what() << endl; e.handle(); return 1; } catch ( std::exception & e ) { cerr << "Unexpected exception caught: " << e.what() << endl; return 1; } catch ( ... ) { cerr << "Unknown Exception\n"; return 2; } return 0; } thepeg-1.8.0.orig/src/TestLHAPDF.cc0000644000175000017500000001452311747772425015050 0ustar sunsun// -*- C++ -*- // // TestLHAPDF.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the TestLHAPDF class. // #include "TestLHAPDF.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDF/PDFBase.h" using namespace ThePEG; NoPIOClassDescription TestLHAPDF::initTestLHAPDF; // Definition of the static class description member. bool approx(double x1, double x2, double eps = 1.0e-6) { eps *= abs(x1) + abs(x2); if ( eps == 0.0 ) return true; return abs(x1 - x2) < eps; } void TestLHAPDF::Init() { double PDF1P[] = { 0.000000000, 0.254411259, 0.551724644, 0.679716202, 0.871195736, 0.872211343, 23.791350673, 0.919026004, 0.947097315, 0.679716202, 0.551724644, 0.254411259, 0.00000000 }; double PDF1PB[] = { 0.000000000, 0.254411259, 0.551724644, 0.679716202, 0.947097315, 0.919026004, 23.791350673, 0.872211343, 0.871195736, 0.679716202, 0.551724644, 0.254411259, 0.00000000 }; double PDF1N[] = { 0.000000000, 0.254411259, 0.551724644, 0.679716202, 0.872211343, 0.871195736, 23.791350673, 0.947097315, 0.919026004, 0.679716202, 0.551724644, 0.254411259, 0.00000000 }; double PDF1NB[] = { 0.000000000, 0.254411259, 0.551724644, 0.679716202, 0.919026004, 0.947097315, 23.791350673, 0.871195736, 0.872211343, 0.679716202, 0.551724644, 0.254411259, 0.00000000 }; double PDFVP[] = { 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.919026004 - 0.872211343, 0.947097315 - 0.871195736, 0.000000000, 0.000000000, 0.000000000, 0.00000000 }; double PDFVPB[] = { 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.947097315 - 0.871195736, 0.919026004 - 0.872211343, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000 }; double PDFVN[] = { 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.947097315 - 0.871195736, 0.919026004 - 0.87221134, 0.000000000, 0.000000000, 0.000000000, 0.00000000 }; double PDFVNB[] = { 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.919026004 - 0.872211343, 0.947097315 - 0.871195736, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.000000000, 0.00000000 }; double PDF2N[] = { 0.000000000, 0.257975947, 0.587746971, 0.721033546, 0.854339980, 0.846959376, 25.076105325, 0.917197288, 0.897843258, 0.721033546, 0.587746971, 0.257975947, 0.000000000}; double PDF3NB[] = { 0.000000000, 0.000000000, 0.000000000, 0.774400011, 0.974219484, 0.992920483, 19.020000839, 0.926350485, 0.934649485, 0.774400011, 0.000000000, 0.000000000, 0.000000000}; double PDF4PB[] = { 0.000000000, 0.248559995, 0.547109991, 0.747969989, 0.935659989, 0.912409989, 16.138889725, 0.879039988, 0.877149988, 0.747969989, 0.547109991, 0.248559995, 0.000000000}; PDPtr proton = eventGenerator()->getParticleData(ParticleID::pplus); PDPtr neutron = eventGenerator()->getParticleData(ParticleID::n0); PDPtr pbar = eventGenerator()->getParticleData(ParticleID::pbarminus); PDPtr nbar = eventGenerator()->getParticleData(ParticleID::nbar0); PDPtr pi0 = eventGenerator()->getParticleData(ParticleID::pi0); PDVector partons; partons.push_back(eventGenerator()->getParticleData(ParticleID::tbar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::bbar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::cbar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::sbar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::ubar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::dbar)); partons.push_back(eventGenerator()->getParticleData(ParticleID::g)); partons.push_back(eventGenerator()->getParticleData(ParticleID::d)); partons.push_back(eventGenerator()->getParticleData(ParticleID::u)); partons.push_back(eventGenerator()->getParticleData(ParticleID::s)); partons.push_back(eventGenerator()->getParticleData(ParticleID::c)); partons.push_back(eventGenerator()->getParticleData(ParticleID::b)); partons.push_back(eventGenerator()->getParticleData(ParticleID::t)); PDFPtr pdf1 = eventGenerator()->getObject("/LHAPDF/CTEQ6ll"); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfx(proton, partons[i], 100.0*GeV2, 0.001), PDF1P[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfx(pbar, partons[i], 100.0*GeV2, 0.001), PDF1PB[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfx(neutron, partons[i], 100.0*GeV2, 0.001), PDF1N[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfx(nbar, partons[i], 100.0*GeV2, 0.001), PDF1NB[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfvx(proton, partons[i], 100.0*GeV2, 0.001), PDFVP[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfvx(pbar, partons[i], 100.0*GeV2, 0.001), PDFVPB[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfvx(neutron, partons[i], 100.0*GeV2, 0.001), PDFVN[i]) ) exit(1); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf1->xfvx(nbar, partons[i], 100.0*GeV2, 0.001), PDFVNB[i]) ) exit(1); PDFPtr pdf2 = eventGenerator()->getObject("/LHAPDF/CTEQ5L"); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf2->xfx(neutron, partons[i], 100.0*GeV2, 0.001), PDF2N[i]) ) exit(1); PDFPtr pdf3 = eventGenerator()->getObject("/LHAPDF/GRV98nlo"); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf3->xfx(nbar, partons[i], 100.0*GeV2, 0.001), PDF3NB[i]) ) exit(1); PDFPtr pdf4 = eventGenerator()->getObject("/LHAPDF/MRST2001nlo"); for ( int i = 0; i < 13; ++i ) if ( !approx(pdf4->xfx(pbar, partons[i], 100.0*GeV2, 0.001), PDF4PB[i]) ) exit(1); } thepeg-1.8.0.orig/src/runEventLoop.cc0000644000175000017500000000671411747772425015715 0ustar sunsun// -*- C++ -*- // // runEventLoop.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/DynamicLoader.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Vectors/HepMCConverter.h" #include "HepMC/GenEvent.h" namespace ThePEG { template<> struct HepMCTraits: public HepMCTraitsBase {}; } int main(int argc, char * argv[]) { using namespace ThePEG; // First we get some command-line arguments string run; long N = -1; long seed = 0; for ( int iarg = 1; iarg < argc; ++iarg ) { string arg = argv[iarg]; // Specifying a run file if ( arg == "-r" ) run = argv[++iarg]; // Append a path for the dynamic loader else if ( arg == "-l" ) DynamicLoader::appendPath(argv[++iarg]); else if ( arg.substr(0,2) == "-l" ) DynamicLoader::appendPath(arg.substr(2)); // Prepend a path for the dynamic loader else if ( arg == "-L" ) DynamicLoader::prependPath(argv[++iarg]); else if ( arg.substr(0,2) == "-L" ) DynamicLoader::prependPath(arg.substr(2)); // Set debug level else if ( arg == "-d" ) Debug::setDebug(atoi(argv[++iarg])); else if ( arg.substr(0,2) == "-d" ) Debug::setDebug(atoi(arg.substr(2).c_str())); // Set number of events else if ( arg == "-N" ) N = atoi(argv[++iarg]); else if ( arg.substr(0,2) == "-N" ) N = atoi(arg.substr(2).c_str()); // Set random seed else if ( arg == "-seed" ) seed = atoi(argv[++iarg]); // Print (out of date) help message else if ( arg == "-h" ) { cerr << "Usage: " << argv[0] << " [-d {debuglevel|-debugitem}] " << "[-l load-path] [-L first-load-path] run-file" << endl; return 3; } else // Any other argument is treated as a run file run = arg; } if ( Debug::level ) Debug::unmaskFpuErrors(); if ( run.empty() ) { cerr << "No run-file specified." << endl; return 1; } try { // Create a persistent stream and read in an OldEventGenerator from // the run file PersistentIStream is(run); EGPtr eg; is >> eg; breakThePEG(); if ( eg ) { if ( seed > 0 ) eg->setSeed(seed); // Initialize the Event generator eg->initialize(); // Get number of events if ( N < 0 ) N = eg->N(); // HERE IS THE MAIN EVENT LOOP for ( int ieve = 0; ieve < N; ++ieve ) { // Generate an event EventPtr event = eg->shoot(); // Convert to a HepMC::GenEvent HepMC::GenEvent * geneve = HepMCConverter::convert(*event); // Do whatever you want with the event here if ( ieve < 10 ) geneve->print(cout); // Don't forget to delete the HepMC::GenEvent (The // ThePEG::Event is automatically garbage collected) delete geneve; } // End the run eg->finalize(); } else std::cout << "eg = nil" << endl; } catch ( std::exception & e ) { cerr << e.what() << endl; return 1; } catch ( ... ) { breakThePEG(); cerr << "Unknown Exception\n"; return 2; } return 0; } thepeg-1.8.0.orig/src/SimpleLEP.in0000644000175000017500000000061211747772425015057 0ustar sunsuncd /Defaults/Generators set SimpleLEPGenerator:NumberOfEvents 10000 set SimpleLEPGenerator:DebugLevel 1 set SimpleLEPGenerator:PrintEvent 10 set SimpleLEPGenerator:EventHandler:LuminosityFunction:Energy 91.2 set SimpleLEPGenerator:EventHandler:DecayHandler NULL set SimpleLEPGenerator:DumpPeriod 7000 set /Defaults/Particles/Z0:NominalMass 92 saverun SimpleLEP SimpleLEPGenerator run SimpleLEP thepeg-1.8.0.orig/src/debugItems.txt0000644000175000017500000000074411747772425015574 0ustar sunsunitem description 1 Print every event after sub process has been generated. 2 Print every new step directly agter it has been generated. 3 Print extra information from (Base)Repository 4 Print all new chunks allocated by the FixedSizeAllocators 5 Print all pointers allocated or freed by the FixedSizeAllocators 6 Print statistics of all PDFBase approximations. 7 Print progress of PS2to2Generic Matrix element approximations 8 Print final PS2to2Generic Matrix element approximations thepeg-1.8.0.orig/src/LHAPDFDefaults.in0000644000175000017500000000025011747772425015711 0ustar sunsunmkdir /LHAPDF cd /LHAPDF create ThePEG::LHAPDF CTEQ6ll ThePEGLHAPDF.so set CTEQ6ll:RemnantHandler /Defaults/Partons/SoftRemnants set CTEQ6ll:PDFName cteq6ll.LHpdf cd / thepeg-1.8.0.orig/src/Makefile.in0000644000175000017500000010453611756366735015017 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = setupThePEG$(EXEEXT) runThePEG$(EXEEXT) EXTRA_PROGRAMS = runEventLoop$(EXEEXT) subdir = src DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)" \ "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(rpodir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) TestLHAPDF_la_LIBADD = am__TestLHAPDF_la_SOURCES_DIST = TestLHAPDF.cc TestLHAPDF.h @USELHAPDF_TRUE@am_TestLHAPDF_la_OBJECTS = TestLHAPDF.lo TestLHAPDF_la_OBJECTS = $(am_TestLHAPDF_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent TestLHAPDF_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(TestLHAPDF_la_LDFLAGS) $(LDFLAGS) \ -o $@ @USELHAPDF_TRUE@am_TestLHAPDF_la_rpath = -rpath $(pkglibdir) PROGRAMS = $(bin_PROGRAMS) am_runEventLoop_OBJECTS = runEventLoop.$(OBJEXT) runEventLoop_OBJECTS = $(am_runEventLoop_OBJECTS) am__DEPENDENCIES_1 = runEventLoop_DEPENDENCIES = $(myLDADD) $(am__DEPENDENCIES_1) runEventLoop_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(runEventLoop_LDFLAGS) $(LDFLAGS) -o $@ am_runThePEG_OBJECTS = runThePEG.$(OBJEXT) runThePEG_OBJECTS = $(am_runThePEG_OBJECTS) runThePEG_DEPENDENCIES = $(myLDADD) $(am__DEPENDENCIES_1) runThePEG_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(runThePEG_LDFLAGS) $(LDFLAGS) -o $@ am_setupThePEG_OBJECTS = setupThePEG-setupThePEG.$(OBJEXT) setupThePEG_OBJECTS = $(am_setupThePEG_OBJECTS) setupThePEG_DEPENDENCIES = $(myLDADD) $(am__DEPENDENCIES_1) setupThePEG_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(setupThePEG_LDFLAGS) $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(TestLHAPDF_la_SOURCES) $(runEventLoop_SOURCES) \ $(runThePEG_SOURCES) $(setupThePEG_SOURCES) DIST_SOURCES = $(am__TestLHAPDF_la_SOURCES_DIST) \ $(runEventLoop_SOURCES) $(runThePEG_SOURCES) \ $(setupThePEG_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_pkgdata_DATA) $(nodist_rpo_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = -Wno-portability myLDADD = $(top_builddir)/lib/libThePEG.la myLDFLAGS = -export-dynamic runThePEG_SOURCES = runThePEG.cc runThePEG_LDADD = $(myLDADD) $(GSLLIBS) runThePEG_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) runEventLoop_SOURCES = runEventLoop.cc runEventLoop_LDADD = -lHepMC $(myLDADD) $(GSLLIBS) runEventLoop_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) setupThePEG_SOURCES = setupThePEG.cc setupThePEG_LDADD = $(myLDADD) $(GSLLIBS) setupThePEG_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) setupThePEG_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" @USELHAPDF_TRUE@pkglib_LTLIBRARIES = TestLHAPDF.la @USELHAPDF_TRUE@TestLHAPDF_la_SOURCES = TestLHAPDF.cc TestLHAPDF.h @USELHAPDF_TRUE@TestLHAPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) dist_pkgdata_DATA = SimpleLEP.in ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in debugItems.txt TestLHAPDF.in MultiLEP.in rpodir = $(pkglibdir) nodist_rpo_DATA = ThePEGDefaults.rpo CLEANFILES = SimpleLEP.log SimpleLEP.out SimpleLEP.run SimpleLEP.tex \ MultiLEP.log MultiLEP.out MultiLEP.run MultiLEP.tex \ ThePEGDefaults.rpo done-all-links \ TestLHAPDF.log TestLHAPDF.out TestLHAPDF.run TestLHAPDF.tex \ .runThePEG.timer.TestLHAPDF.run SimpleLEP.dump MultiLEP.dump INPUTFILES = ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in \ SimpleLEP.in MultiLEP.in TestLHAPDF.in all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } TestLHAPDF.la: $(TestLHAPDF_la_OBJECTS) $(TestLHAPDF_la_DEPENDENCIES) $(EXTRA_TestLHAPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(TestLHAPDF_la_LINK) $(am_TestLHAPDF_la_rpath) $(TestLHAPDF_la_OBJECTS) $(TestLHAPDF_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p || test -f $$p1; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list runEventLoop$(EXEEXT): $(runEventLoop_OBJECTS) $(runEventLoop_DEPENDENCIES) $(EXTRA_runEventLoop_DEPENDENCIES) @rm -f runEventLoop$(EXEEXT) $(AM_V_CXXLD)$(runEventLoop_LINK) $(runEventLoop_OBJECTS) $(runEventLoop_LDADD) $(LIBS) runThePEG$(EXEEXT): $(runThePEG_OBJECTS) $(runThePEG_DEPENDENCIES) $(EXTRA_runThePEG_DEPENDENCIES) @rm -f runThePEG$(EXEEXT) $(AM_V_CXXLD)$(runThePEG_LINK) $(runThePEG_OBJECTS) $(runThePEG_LDADD) $(LIBS) setupThePEG$(EXEEXT): $(setupThePEG_OBJECTS) $(setupThePEG_DEPENDENCIES) $(EXTRA_setupThePEG_DEPENDENCIES) @rm -f setupThePEG$(EXEEXT) $(AM_V_CXXLD)$(setupThePEG_LINK) $(setupThePEG_OBJECTS) $(setupThePEG_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TestLHAPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runEventLoop.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runThePEG.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setupThePEG-setupThePEG.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< setupThePEG-setupThePEG.o: setupThePEG.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setupThePEG_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT setupThePEG-setupThePEG.o -MD -MP -MF $(DEPDIR)/setupThePEG-setupThePEG.Tpo -c -o setupThePEG-setupThePEG.o `test -f 'setupThePEG.cc' || echo '$(srcdir)/'`setupThePEG.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/setupThePEG-setupThePEG.Tpo $(DEPDIR)/setupThePEG-setupThePEG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupThePEG.cc' object='setupThePEG-setupThePEG.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setupThePEG_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o setupThePEG-setupThePEG.o `test -f 'setupThePEG.cc' || echo '$(srcdir)/'`setupThePEG.cc setupThePEG-setupThePEG.obj: setupThePEG.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setupThePEG_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT setupThePEG-setupThePEG.obj -MD -MP -MF $(DEPDIR)/setupThePEG-setupThePEG.Tpo -c -o setupThePEG-setupThePEG.obj `if test -f 'setupThePEG.cc'; then $(CYGPATH_W) 'setupThePEG.cc'; else $(CYGPATH_W) '$(srcdir)/setupThePEG.cc'; fi` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/setupThePEG-setupThePEG.Tpo $(DEPDIR)/setupThePEG-setupThePEG.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='setupThePEG.cc' object='setupThePEG-setupThePEG.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(setupThePEG_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o setupThePEG-setupThePEG.obj `if test -f 'setupThePEG.cc'; then $(CYGPATH_W) 'setupThePEG.cc'; else $(CYGPATH_W) '$(srcdir)/setupThePEG.cc'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) install-nodist_rpoDATA: $(nodist_rpo_DATA) @$(NORMAL_INSTALL) @list='$(nodist_rpo_DATA)'; test -n "$(rpodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(rpodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(rpodir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(rpodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(rpodir)" || exit $$?; \ done uninstall-nodist_rpoDATA: @$(NORMAL_UNINSTALL) @list='$(nodist_rpo_DATA)'; test -n "$(rpodir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(rpodir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-local check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" "$(DESTDIR)$(rpodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-nodist_rpoDATA @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-data-hook install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-pkglibLTLIBRARIES @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-local maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_pkgdataDATA \ uninstall-local uninstall-nodist_rpoDATA \ uninstall-pkglibLTLIBRARIES .MAKE: check-am install-am install-data-am install-exec-am \ install-strip .PHONY: CTAGS GTAGS all all-am check check-am check-local clean \ clean-binPROGRAMS clean-generic clean-libtool \ clean-pkglibLTLIBRARIES cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-data-hook install-dist_pkgdataDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-exec-hook install-html install-html-am install-info \ install-info-am install-man install-nodist_rpoDATA install-pdf \ install-pdf-am install-pkglibLTLIBRARIES install-ps \ install-ps-am install-strip installcheck installcheck-am \ installcheck-local installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-dist_pkgdataDATA uninstall-local \ uninstall-nodist_rpoDATA uninstall-pkglibLTLIBRARIES save: mkdir -p save cp *.log *.out *.run *.tex *.rpo save valgrind: valgrind --leak-check=full --num-callers=25 --track-fds=yes --freelist-vol=100000000 --leak-resolution=med --trace-children=yes ./setupThePEG -r ThePEGDefaults.rpo SimpleLEP.in &> /tmp/valgrind.out valgrind --leak-check=full --num-callers=25 --track-fds=yes --freelist-vol=100000000 --leak-resolution=med --trace-children=yes ./runThePEG SimpleLEP.run >> /tmp/valgrind.out 2>&1 done-all-links: @EMPTY@ifdef SHOWCOMMAND for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "sym-linking input files files..." @for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done @echo "stamp" > done-all-links @EMPTY@endif ThePEGDefaults.rpo: done-all-links setupThePEG ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in ./setupThePEG --init --exitonerror -L../lib -r ThePEGDefaults.rpo ThePEGDefaults.in cd ../lib; rm -f ThePEGDefaults.rpo; $(LN_S) -f ../src/ThePEGDefaults.rpo . @USELHAPDF_TRUE@ ./setupThePEG --init --exitonerror -r ThePEGDefaults.rpo -o ThePEGDefaults.rpo LHAPDFDefaults.in check-local: ThePEGDefaults.rpo ./setupThePEG --exitonerror -r ThePEGDefaults.rpo SimpleLEP.in mv SimpleLEP.out SimpleLEP.cmp time ./runThePEG -d 0 SimpleLEP.run diff SimpleLEP.out SimpleLEP.cmp mv SimpleLEP.out SimpleLEP.cmp time ./runThePEG --resume -d 0 SimpleLEP.dump diff SimpleLEP.out SimpleLEP.cmp rm SimpleLEP.cmp ./setupThePEG --exitonerror -r ThePEGDefaults.rpo MultiLEP.in time ./runThePEG -d 0 MultiLEP.run @USELHAPDF_TRUE@ ./setupThePEG --exitonerror -r ThePEGDefaults.rpo TestLHAPDF.in @USELHAPDF_TRUE@ time ./runThePEG -d 1 -x .libs/TestLHAPDF.so TestLHAPDF.run SimpleLEP.run: done-all-links setupThePEG ThePEGDefaults.rpo SimpleLEP.in ./setupThePEG --exitonerror -r ThePEGDefaults.rpo SimpleLEP.in SimpleLEP.out: runThePEG SimpleLEP.run time ./runThePEG -d 0 SimpleLEP.run MultiLEP.run: done-all-links setupThePEG ThePEGDefaults.rpo MultiLEP.in ./setupThePEG --exitonerror -r ThePEGDefaults.rpo MultiLEP.in MultiLEP.out: runThePEG MultiLEP.run time ./runThePEG -d 0 MultiLEP.run @USELHAPDF_TRUE@TestLHAPDF.run: done-all-links setupThePEG ThePEGDefaults.rpo TestLHAPDF.in TestLHAPDF.la @USELHAPDF_TRUE@ ./setupThePEG --exitonerror -r ThePEGDefaults.rpo TestLHAPDF.in @USELHAPDF_TRUE@TestLHAPDF.out: runThePEG TestLHAPDF.run @USELHAPDF_TRUE@ time ./runThePEG -d 1 -x .libs/TestLHAPDF.so TestLHAPDF.run install-exec-hook: cd $(DESTDIR)$(pkglibdir); \ rm -f setupThePEG-$(VERSION) runThePEG-$(VERSION); \ cp $(DESTDIR)$(bindir)/setupThePEG setupThePEG-$(VERSION); \ cp $(DESTDIR)$(bindir)/runThePEG runThePEG-$(VERSION) install-data-hook: ./setupThePEG --init --exitonerror -L$(DESTDIR)$(pkglibdir) -r $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo $(DESTDIR)$(pkgdatadir)/ThePEGDefaults.in @USELHAPDF_TRUE@ ./setupThePEG --init --exitonerror -r $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo -o $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo $(DESTDIR)$(pkgdatadir)/LHAPDFDefaults.in cd $(DESTDIR)$(pkglibdir); \ cp ThePEGDefaults.rpo ThePEGDefaults-$(VERSION).rpo uninstall-local: cd $(DESTDIR)$(pkglibdir); \ rm -f setupThePEG-$(VERSION) runThePEG-$(VERSION) ThePEGDefaults-$(VERSION).rpo installcheck-local: $(mkdir_p) _test_thepeg_installation_ cd _test_thepeg_installation_; \ $(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/SimpleLEP.in; \ mv SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/runThePEG SimpleLEP.run; \ diff SimpleLEP.out SimpleLEP.cmp; \ mv SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/runThePEG --resume SimpleLEP.dump; \ diff SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/MultiLEP.in; \ $(DESTDIR)$(bindir)/runThePEG MultiLEP.run; @USELHAPDF_TRUE@ cd _test_thepeg_installation_; \ @USELHAPDF_TRUE@$(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/TestLHAPDF.in; \ @USELHAPDF_TRUE@$(DESTDIR)$(bindir)/runThePEG -x $(DESTDIR)$(pkglibdir)/TestLHAPDF.so TestLHAPDF.run rm -rf _test_thepeg_installation_ %.run: %.in done-all-links ThePEGDefaults.rpo ./setupThePEG --exitonerror -L .libs -r ../lib/ThePEGDefaults.rpo $< %.out: %.run time ./runThePEG -d 0 $< # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/src/TestLHAPDF.h0000644000175000017500000000376111747772425014714 0ustar sunsun// -*- C++ -*- // // TestLHAPDF.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_TestLHAPDF_H #define ThePEG_TestLHAPDF_H // // This is the declaration of the TestLHAPDF class. // // CLASSDOC SUBSECTION Description: // // // // CLASSDOC SUBSECTION See also: // // .h, // .h. // #include "ThePEG/Repository/Main.h" namespace ThePEG { /** * Class derived from Main to do simple tests of the LHAPDF class. */ class TestLHAPDF: public Main { public: /** * Standard Init function used to initialize the interfaces. This is * where all the tests are done. */ static void Init(); private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initTestLHAPDF; /** * Private and non-existent assignment operator. */ TestLHAPDF & operator=(const TestLHAPDF &); }; } // CLASSDOC OFF #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ // The following template specialization informs ThePEG about the // base class of TestLHAPDF. template <> struct BaseClassTrait: public ClassTraitsType { typedef Main NthBase; }; // The following template specialization informs ThePEG about the // name of this class and the shared object where it is defined. template <> struct ClassTraits : public ClassTraitsBase { static string className() { return "ThePEG::TestLHAPDF"; } // Return the class name. static string library() { return "TestLHAPDF.so"; } // Return the name of the shared library to be loaded to get // access to this class and every other class it uses // (except the base class). }; /** @endcond */ } #endif /* ThePEG_TestLHAPDF_H */ thepeg-1.8.0.orig/src/Makefile.am0000644000175000017500000001313511747772425014775 0ustar sunsunAUTOMAKE_OPTIONS = -Wno-portability bin_PROGRAMS = setupThePEG runThePEG EXTRA_PROGRAMS = runEventLoop myLDADD = $(top_builddir)/lib/libThePEG.la myLDFLAGS = -export-dynamic runThePEG_SOURCES = runThePEG.cc runThePEG_LDADD = $(myLDADD) $(GSLLIBS) runThePEG_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) runEventLoop_SOURCES = runEventLoop.cc runEventLoop_LDADD = -lHepMC $(myLDADD) $(GSLLIBS) runEventLoop_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) setupThePEG_SOURCES = setupThePEG.cc setupThePEG_LDADD = $(myLDADD) $(GSLLIBS) setupThePEG_LDFLAGS = $(AM_LDFLAGS) $(myLDFLAGS) setupThePEG_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" if USELHAPDF pkglib_LTLIBRARIES = TestLHAPDF.la TestLHAPDF_la_SOURCES = TestLHAPDF.cc TestLHAPDF.h TestLHAPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) endif dist_pkgdata_DATA = SimpleLEP.in ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in debugItems.txt TestLHAPDF.in MultiLEP.in rpodir = $(pkglibdir) nodist_rpo_DATA = ThePEGDefaults.rpo CLEANFILES = SimpleLEP.log SimpleLEP.out SimpleLEP.run SimpleLEP.tex \ MultiLEP.log MultiLEP.out MultiLEP.run MultiLEP.tex \ ThePEGDefaults.rpo done-all-links \ TestLHAPDF.log TestLHAPDF.out TestLHAPDF.run TestLHAPDF.tex \ .runThePEG.timer.TestLHAPDF.run SimpleLEP.dump MultiLEP.dump save: mkdir -p save cp *.log *.out *.run *.tex *.rpo save valgrind: valgrind --leak-check=full --num-callers=25 --track-fds=yes --freelist-vol=100000000 --leak-resolution=med --trace-children=yes ./setupThePEG -r ThePEGDefaults.rpo SimpleLEP.in &> /tmp/valgrind.out valgrind --leak-check=full --num-callers=25 --track-fds=yes --freelist-vol=100000000 --leak-resolution=med --trace-children=yes ./runThePEG SimpleLEP.run >> /tmp/valgrind.out 2>&1 INPUTFILES = ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in \ SimpleLEP.in MultiLEP.in TestLHAPDF.in done-all-links: @EMPTY@ifdef SHOWCOMMAND for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "sym-linking input files files..." @for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done @echo "stamp" > done-all-links @EMPTY@endif ThePEGDefaults.rpo: done-all-links setupThePEG ThePEGDefaults.in LHAPDFDefaults.in ThePEGParticles.in ./setupThePEG --init --exitonerror -L../lib -r ThePEGDefaults.rpo ThePEGDefaults.in cd ../lib; rm -f ThePEGDefaults.rpo; $(LN_S) -f ../src/ThePEGDefaults.rpo . if USELHAPDF ./setupThePEG --init --exitonerror -r ThePEGDefaults.rpo -o ThePEGDefaults.rpo LHAPDFDefaults.in endif check-local: ThePEGDefaults.rpo ./setupThePEG --exitonerror -r ThePEGDefaults.rpo SimpleLEP.in mv SimpleLEP.out SimpleLEP.cmp time ./runThePEG -d 0 SimpleLEP.run diff SimpleLEP.out SimpleLEP.cmp mv SimpleLEP.out SimpleLEP.cmp time ./runThePEG --resume -d 0 SimpleLEP.dump diff SimpleLEP.out SimpleLEP.cmp rm SimpleLEP.cmp ./setupThePEG --exitonerror -r ThePEGDefaults.rpo MultiLEP.in time ./runThePEG -d 0 MultiLEP.run if USELHAPDF ./setupThePEG --exitonerror -r ThePEGDefaults.rpo TestLHAPDF.in time ./runThePEG -d 1 -x .libs/TestLHAPDF.so TestLHAPDF.run endif SimpleLEP.run: done-all-links setupThePEG ThePEGDefaults.rpo SimpleLEP.in ./setupThePEG --exitonerror -r ThePEGDefaults.rpo SimpleLEP.in SimpleLEP.out: runThePEG SimpleLEP.run time ./runThePEG -d 0 SimpleLEP.run MultiLEP.run: done-all-links setupThePEG ThePEGDefaults.rpo MultiLEP.in ./setupThePEG --exitonerror -r ThePEGDefaults.rpo MultiLEP.in MultiLEP.out: runThePEG MultiLEP.run time ./runThePEG -d 0 MultiLEP.run if USELHAPDF TestLHAPDF.run: done-all-links setupThePEG ThePEGDefaults.rpo TestLHAPDF.in TestLHAPDF.la ./setupThePEG --exitonerror -r ThePEGDefaults.rpo TestLHAPDF.in TestLHAPDF.out: runThePEG TestLHAPDF.run time ./runThePEG -d 1 -x .libs/TestLHAPDF.so TestLHAPDF.run endif install-exec-hook: cd $(DESTDIR)$(pkglibdir); \ rm -f setupThePEG-$(VERSION) runThePEG-$(VERSION); \ cp $(DESTDIR)$(bindir)/setupThePEG setupThePEG-$(VERSION); \ cp $(DESTDIR)$(bindir)/runThePEG runThePEG-$(VERSION) install-data-hook: ./setupThePEG --init --exitonerror -L$(DESTDIR)$(pkglibdir) -r $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo $(DESTDIR)$(pkgdatadir)/ThePEGDefaults.in if USELHAPDF ./setupThePEG --init --exitonerror -r $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo -o $(DESTDIR)$(pkglibdir)/ThePEGDefaults.rpo $(DESTDIR)$(pkgdatadir)/LHAPDFDefaults.in endif cd $(DESTDIR)$(pkglibdir); \ cp ThePEGDefaults.rpo ThePEGDefaults-$(VERSION).rpo uninstall-local: cd $(DESTDIR)$(pkglibdir); \ rm -f setupThePEG-$(VERSION) runThePEG-$(VERSION) ThePEGDefaults-$(VERSION).rpo installcheck-local: $(mkdir_p) _test_thepeg_installation_ cd _test_thepeg_installation_; \ $(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/SimpleLEP.in; \ mv SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/runThePEG SimpleLEP.run; \ diff SimpleLEP.out SimpleLEP.cmp; \ mv SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/runThePEG --resume SimpleLEP.dump; \ diff SimpleLEP.out SimpleLEP.cmp; \ $(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/MultiLEP.in; \ $(DESTDIR)$(bindir)/runThePEG MultiLEP.run; if USELHAPDF cd _test_thepeg_installation_; \ $(DESTDIR)$(bindir)/setupThePEG --exitonerror $(DESTDIR)$(pkgdatadir)/TestLHAPDF.in; \ $(DESTDIR)$(bindir)/runThePEG -x $(DESTDIR)$(pkglibdir)/TestLHAPDF.so TestLHAPDF.run endif rm -rf _test_thepeg_installation_ %.run: %.in done-all-links ThePEGDefaults.rpo ./setupThePEG --exitonerror -L .libs -r ../lib/ThePEGDefaults.rpo $< %.out: %.run time ./runThePEG -d 0 $< thepeg-1.8.0.orig/GUIDELINES0000644000175000017500000001105211747772425013521 0ustar sunsun MCNET GUIDELINES for Event Generator Authors and Users PREAMBLE This generator has been developed as part of an academic research project and is the result of many years of work by the authors. Proper academic recognition is a requirement for its continued development. The components of the program have been developed to work together as a coherent physics framework. We believe that the creation of separately maintained forks or piecewise distribution of individual parts would diminish their scientific value. The authors are convinced that software development in a scientific context requires full availability of all source code, to further progress and to allow local modifications to meet the specific requirements of the individual user. Therefore we have decided to release this program under the GNU General Public License (GPL) version 2. This ensures that the source code will be available to you and grants you the freedom to use and modify the program. You can redistribute your modified versions as long as you retain the GPL and respect existing copyright notices (see the file 'COPYING' for details). By using the GPL, we entrust you with considerable freedom and expect you to use it wisely, since the GPL does not address the issues in the first two paragraphs. To remedy this shortcoming, we have formulated the following guidelines relevant for the distribution and usage of event generator software in an academic setting. GUIDELINES 1) The integrity of the program should be respected. ------------------------------------------------- 1.1) Suspected bugs and proposed fixes should be reported back to the original authors to be considered for inclusion in the standard distribution. No independently developed and maintained forks should be created as long as the original authors actively work on the program. 1.2) The program should normally be redistributed in its entirety. When there are special reasons, an agreement should be sought with the original authors to redistribute only specific parts. This should be arranged such that the redistributed parts remain updated in step with the standard distribution. 1.3) Any changes in the code must be clearly marked in the source (reason, author, date) and documented. If any modified version is redistributed it should be stated at the point of distribution (download link) that it has been modified and why. 1.4) If a significant part of the code is used by another program, this should be clearly specified in that program's documentation and stated at its point of distribution. 1.5) Copyright information and references may not be removed. Copyright-related program messages may not be altered and must be printed even if only a part of the program is used. Adding further messages specifying any modifications is encouraged. 2) The program and its physics should be properly cited when used for academic publications ------------------------------------------------------------------ 2.1) The main software reference as designated by the program authors should always be cited. 2.2) In addition, the original literature on which the program is based should be cited to the extent that it is of relevance for a study, applying the same threshold criteria as for other literature. 2.3) When several programs are combined, they should all be mentioned, commensurate with their importance for the physics study at hand. 2.4) To make published results reproducible, the exact versions of the codes that were used and any relevant program and parameter modifications should be spelled out. POSTSCRIPT The copyright license of the software is the GPL v2 alone, therefore the above guidelines are not legally binding. However, we reserve the right to criticize offenders. The guidelines should always be combined with common sense, for interpretation and for issues not covered. Enquiries regarding the guidelines and related issues are encouraged and should be directed to the authors of the program. Please note that the program, including all its code and documentation, is intended for academic use and is delivered "as is" to be used at your own risk, without any guarantees. ---------------------------------------------------------------------- These guidelines were edited by Nils Lavesson and David Grellscheid for the MCnet collaboration, which has approved and agreed to respect them. MCnet is a Marie Curie Research Training Network funded under Framework Programme 6 contract MRTN-CT-2006-035606. thepeg-1.8.0.orig/ChangeLog0000644000175000017500000054510311747772425013731 0ustar sunsun2011-12-06 David Grellscheid * EventRecord/ColourLine.cc, EventRecord/ColourLine.h, EventRecord/MultiColour.cc, EventRecord/Particle.h, EventRecord/MultiColour.h, PDT/ParticleData.cc, PDT/PDT.h, PDT/ParticleData.h, LesHouches/LesHouchesFileReader.cc, LesHouches/LesHouchesReader.cc, MatrixElement/ColourLines.h, MatrixElement/ColourLines.xh, MatrixElement/ColourLines.cc: Merged sextet branch from hg up to 728953b6f091. * Utilities/Exception.h (ThePEG): Fixed out-of-scope error in what(). 2011-08-26 Leif Lönnblad * Utilities/MaxCmp.h (ThePEG): Put explicit std:: on greater function. 2011-07-15 David Grellscheid * Helicity/Vertex/VertexBase.cc: Explicit checking for charge consistency in addToList(). For now, electric charge only. 2011-07-08 Leif Lönnblad * Repository/EventGenerator.*, Persistency/PersistentIStream.* : A persistent input stream now remembers the globally loaded libraries in the initilalization. This is used by The EventGenerator to ensure that a dumped generator state gets the right libraries. In response to herwig:ticket:355 2011-06-28 David Grellscheid * Analysis/HepMCFile.cc, m4/hepmc.m4 : Clarified HepMC version support in configure step. Removed superfluous dynamic_cast. 2011-06-20 David Grellscheid * Analysis/HepMCFile.cc: Added Interface for HepMC precision setting. * Repository/Repository.{h,cc}, src/setupThePEG.cc: Instead of printing an error message to cerr, the Repository::load() and Repository::read(filename) commands now behave like the other repo commands and return an error string. This allows --exitonerror to work correctly for load() and read(). 2011-06-03 Leif Lönnblad * Utilities/StringUtils.h: Added function to write out class names from type_info in a readable form. Used in EventGenerator for the exception classes. 2011-05-12 Leif Lönnblad * Utilities/SimplePhaseSpace.cc (getMagnitude): Made the function safer against throwing exceptions due to rounding errors. 2011-04-14 Leif Lönnblad * Repository/CurrentGenerator.h: Slight functionality enhancement to be more similar to Current<>. 2011-04-13 David Grellscheid * Repository/EventGenerator.cc: Allow MaxErrors to be negative in the interface definition. The handling already allows it. 2011-04-09 Leif Lönnblad * Utilities/MaxCmp.h: Fixed ininitialized index value in constructor. 2011-03-30 Leif Lönnblad * Utilities/DebugItem.*: Introduced new class to enable selective debugging. It is activated for runThePEG, but should be considered experimental. 2011-03-27 Leif Lönnblad * Vectors/LorentzVector.h: Fixed bug where dirPlus, dirMinus and dirZ returned double rather than templated value type. 2011-03-26 Leif Lönnblad * src/runThePEG.cc, Repository/EventGenerator.h: Aded possibility to add a tag when running so that one .run file can be run eg. with different seeds which then also can result in different output files. 2011-03-25 Leif Lönnblad * Utilities/MaxCmp.h: Added value() function for situations where implicit cast does not work. * Repository/CurrentGenerator.h: CurrentGenerator::Redirect now does not redirect to to the internal stream in EventGenerator if the useStdout flag has been set. 2011-03-08 David Grellscheid * Utilities/DynamicLoader.cc, PDF/LHAPDF.cc: Workaround for correct FPE handling when Fortran libraries are present (herwig:ticket:338). 2011-03-06 Leif Lönnblad * PDT/ParticleData.h (cTau): Fixed problem where cTau() reported infinite lifetime in case both width and lifetime were set to zero. This is normally the case for stable particles, but it was also the case for some default ThePEG default particles such as D*0. The result was that these were not decayed if Decayer:maxLifeTime was non-zero. The new behavior is that if both width and lifetime are zero, cTau() returns zero for unstable particles and MaxLength for stable ones. 2011-03-05 Leif Lönnblad * Config/std.h (inserter): Specialized the inserter function for vector and deque as the normal inserter function was not safe for such containters. 2011-01-21 Leif Lönnblad * Repository/BaseRepository.cc: "." can now be used as a directory in 'mset' and friends. 2011-01-20 Leif Lönnblad * Utilities/MaxCmp.h: Extended the functionality to include index caching and a comparison class. Also added a MinCmp class as a specialization. 2011-01-17 Leif Lönnblad * Repository/*EventGenerator.* (flushOutputFile): The .out file is now only opened and written in finish(), before that any output is cached in a ostringstream. In response to herwig:ticket:329 2011-01-17 David Grellscheid * m4/thepeg.m4: Fixed test for fenv.h to check for feenableexcept(), which doesn't exist on OS X. Fixes herwig:ticket:328 2011-01-07 Leif Lönnblad * Repository/EventGenerator.* Repository/BaseRepository.* Interface/InterfacedBase.* Interface/InterfaceBase.* (and several sub-classes): Added option LogNonDefault in EventGenerator to print out all interfaces which are not at their default value. Also added possibility in InterfaceBase to flag an interface as having no default value (and will therefore not be checked in LogNonDefault). Furthermore, added possibility to specify a default value on a per-object basis in BaseRepository (the 'newdef' command). 2010-12-16 Leif Lönnblad * Repository/Repository.h: Added member to return version number and a banner. 2010-12-15 Leif Lönnblad * m4/rivet.m4: Fixed check if Rivet is in system libraries. 2010-11-18 David Grellscheid * Analysis/RivetAnalysis.cc: Runerror if not all analyses are found. 2010-11-01 Leif Lönnblad * Utilities/Debug.cc: For some reason, the old procedure for enabling the signalling of floating-point exceptions, does not work anymore. I have included an alternative based on the fenv.h system header which seems to work. 2010-10-22 Leif Lönnblad * Utilities/Debug.h: There was an inconsistency before where whatever you say about debugging at the command-line of runThePEG and setupThePEG was ignored in favour of the debug level set in the EventGenerator. Now the EventGenerator will only set its own debug level if none has been set before by Debug::setDebug(). 2010-10-21 Leif Lönnblad * Utilities/Exception.h: Added noabort flag. When set, all abortnow and maybeabort severities are converted to runerror. The flag is set by the EventGenerator after the initrun phase if Debug::level is zero. In response to herwig:ticket:325. 2010-10-19 David Grellscheid * PDF/PolarizedBeamParticleData.h: Added default initializers in constructor. * m4/rivet.m4: Require Rivet >= 1.3 2010-10-17 Leif Lönnblad * Utilities/DescribeClass.h: Added a simplified interface to the type information system in ThePEG. For simle classes there is no need to specialize the ClassTraits and BaseClassTrait classes and to have a static member variable of ClassDescription in the class (as in the full ThePEG type info system). Instead it is enough to have one statically initialized variable of one of the DescraibeClass classes for each class. The Abstract and NoPIO versions of this class should be used for abstract classes and classes without persistent I/O functions respectively. 2010-10-15 Leif Lönnblad * Handlers/LastXCombInfo.h (and friends): Included implementation of pdf<> function again in the headerfile and removed it from PartonExtractor.h. Now uses a new access function has been included in XComb to avoid incomplete type. 2010-10-14 David Grellscheid * configure.ac, m4/ax_compiler_vendor.m4: Initial support for Intel warning flags. Adjust the ignore set over time. * various: Fixes for intel compiler warnings * Config/PhysicalQtyOps.h, PDT/PID.h: Simplified template overloading 2010-10-06 David Grellscheid * Repository/EventGenerator.cc (persistentInput): After reading the misc stream from persistent input, we need to seek to the end of the stream explicitly. Otherwise, new content will overwrite existing lines. 2010-10-05 Leif Lönnblad * Analysis/Histogram2D.h (LWH): Added two-dimensional histograms in LWH. * Handlers/AnalysisHandler.*: Changed default virtual functions so that analyze(vector,double) and analyze(tPPtr,double) takes an event weight as argument. The old functions are still there but are deprecated. Also the transform functions was flawed. It could in principle transform the whole event and then the final-state particles would br transformed again. Added transform(tcEventPtr) which is used insted of transform(tEventPtr) which is now deprecated. This could break some code, but since that code woud be flawed anyway, it is not a big deal. 2010-10-05 David Grellscheid * Repository/EventGenerator.cc: tic prints out 'init' message 2010-10-01 David Grellscheid * EventRecord/Event.cc: Added energy non-conservation indicators to Graphviz output. 2010-09-29 David Grellscheid * Utilities/CFile.*: Early throw of exception in case of fopen() error. Avoid fclose() on NULL files. 2010-09-28 David Grellscheid * EventRecord/*, Helicity/*: Merged SpinBase and SpinInfo. Base classes SpinInfo, HelicityVertex and RhoDMatrix now live in EventRecord. This removes the need for frequent dynamic_casts from the base to the derived class. 2010-09-09 Leif Lönnblad * Vectors/HepMCConverter.tcc: Converted David fix for herwig:ticket:323 to properly use the traits class. 2010-09-09 David Grellscheid * Vectors/HepMCConverter.tcc: Bugfix for herwig:ticket:323: HepMC converter ignores event weight when using pre-existing event objects. * PDF/*: Added support for diffractive physics: WeizsackerWilliamsPDF extended; LeptonLeptonRemnant renamed to UnResolvedRemnant; PDF override options added to PartonExtractor; BudnevPDF added. 2010-08-12 Leif Lönnblad * PDT/ParticleData.*: Added interface to switch on a given set of decay modes, while switching off all others. In response to herwig:ticket:319 2010-07-28 Leif Lönnblad * Cuts/TwoCutBase.cc (passCuts): Fixed bug noticed by Simon where t instead of -t was checked against 2010-06-09 David Grellscheid * Helicity/Vertex/{AbstractSSSSVertex.*,Scalar/SSSSVertex.*}: Fixed SSSS Vertex inheritance * Vectors/LorentzVector.h: Implemented rotate(angle,axis) for LorentzVector, too. 2010-05-26 Leif Lönnblad * Persistency/PersistentOStream.*: Output of real numbers now throws an exception if a NaN or an Inf is encountered. The resulting file would anyway be useless. 2010-05-11 David Grellscheid * Utilities/StringUtils.*: Fixed whitespace definition to include CR in addition to LF. Fixes herwig:ticket:302. 2010-04-20 Leif Lönnblad * PDF/LeptonLeptonPDF.cc (xfl): Fixed numerical issue when x->1 (see herwig:ticket:224 and herwig:ticket:310). 2010-03-08 Leif Lönnblad * Utilities/CFile.*: Added class to be able to use zlib (and in the future bzlib) for C-style i/o, especially in CFileLineReader and LesHouchesReader. Checking for zlib.h is still switched off in configure script. 2010-03-01 Leif Lönnblad * StandardModel/O1AlphaS.*: Changed the behavior of the thresholds in case quarks are exactly massless. Also changed the theLambdaFlavour and theMaxFlav variables to be signed to avoid warnings when compared to PID objects. (in response to herwig:ticket:303) 2010-01-27 David Grellscheid * Vectors/ThreeVector.h: Fixed rotate() function to be units-aware. 2009-12-11 David Grellscheid * PDT/PID.h, PDT/ParticleData, Interface/Interfaced, Repository/EventGenerator, Repository/Repository: Started using particle ID type. At the moment it is almost transparent and will convert from 'int' and 'long', and to 'long'. Only the problematic conversion from unsigned types will lead to a compile error. * StandardModel/O1AlphaS.cc: Fixed unsigned PID compile error. 2009-12-10 David Grellscheid * Repository/EventGenerator.cc: Third version of the ExceptionMap declaration, since we need the severity to be part of the sort order. Otherwise warnings will count towards the MaxErrors cutoff. * Repository/EventGenerator.cc: Small change to the misc printout: the introductory line is only printed when there is any content. 2009-12-01 Leif Lönnblad * Repository/EventGenerator.cc (EventGenerator::count): Changed the declaration of ExceptionMap, since the previous version couldn't actually tell the difference between exception classes. * Repository/CurrentGenerator.h: Allow for redirecting a stream to an internal buffer (instead of to EventGenerator::misc()) in CurrentGenerator::Redirect. 2009-11-16 David Grellscheid * Repository/Repository.cc: Better message text if input file is not found. We've never signalled an error, but always tried to continue reading. * java/Makefile.am: Fixed OS X problem with case-insensitive filenames that I reintroduced earlier. 2009-11-12 David Grellscheid * Utilities/DynamicLoader.cc, src/setupThePEG.cc, PDF/LHAPDF.cc, Repository/{Base,}Repository.cc, java/thepeg.install: Removed all runtime usage of environment variables. The pkglibdir is now passed via a macro definition at compile time. 'setupThePEG' and 'runThePEG' are not wrapped in scripts anymore and execute directly. 2009-11-06 Leif Lönnblad * Analysis/HistogramFactory.h: When checking that two histograms have the same bins, only check individual bins if the axis are non-uniform. 2009-11-06 David Grellscheid * Repository/EventGenerator.cc: Small changes to ordering of LaTeX citation strings: Decayers and Analyses come last. * Repository/EventGenerator.cc: log() stream now points at std::cout instead of std::clog when no filename is given. * Repository/EventGenerator.h: Added function to get the 'useStdout' boolean from the Generator. 2009-11-06 Leif Lönnblad * Analysis/RivetAnalysis.cc: Redirect standard output from Rivet to the end of the log file. * Repository/EventGenerator.*, Repository/CurrentGenerator.h: Added public inner class CurrentGenerator::Redirect, which can be used to redirect standard output from modules to the log file. In fact it is redirected to a temporary stringstream in the EventGenerator, which is appended to the log file after the run is finished. 2009-11-06 David Grellscheid * m4/vl_readline.m4: Readline support can be switched off at configure time with '--disable-readline'. 2009-11-05 David Grellscheid * Vectors/LorentzVector.h: Replaced nan with assert in LorentzVector::cosTheta() 2009-11-03 David Grellscheid * Helicity/*: Fixed helicity direction bug and cleaned up lots of redundant code. 2009-10-28 Leif Lönnblad * EventRecord/ColourSinglet.cc (ColourSinglet::addJunction): Fixed bug in connecting junctions. * EventRecord/ColourLine.*: Added create function to connect four colour lines with a fifth, giving a source and a sink junction. 2009-10-26 Leif Lönnblad * PDT/RemnantData.*: Allow access to the decayer object. * PDF/SoftRemnantHandler.cc: Set remnantWeight() to zero if a parton could not be extracted. * PDT/SimpleBaryonRemnantDecayer.*, PDT/RemnantDecayer.*, EventRecord/RemnantParticle.*: The RemnantParticle now asks if the RemnantDecayer feels it is OK to extract a given parton instance. 2009-10-23 Leif Lönnblad * PDT/RemnantDecayer.*: Added option to respect DIS kinematics but to silently change scattered lepton if it doesn't work. * src/ThePEGParticles.in: Set fourth generation neutrinos massive by default. 2009-10-22 Leif Lönnblad * Utilities/ObjectIndexer.h: Added find function synonymous to 'operator()(IntT) const'. 2009-10-21 Leif Lönnblad * Handlers/EventHandler.*, Handlers/StandardEventHandler.*, Repository/Repository.cc (Repository::makeRun): Fixed problems arising when different particles with the same id was included in the same run. 2009-10-19 Leif Lönnblad * PDT/ParticleData.*: Allow for negative values of upper and lower cut on the width. Negative values represents no cut. 2009-10-16 David Grellscheid * Vectors/*Vector.h: Assertion in cosTheta() and perp2() to catch zero-length vectors. LorentzVector::mag() and mag2() have been removed; use m() and m2() instead. The Vector3 class has been renamed ThreeVector, in line with the other vector classes and its file name. 2009-10-09 David Grellscheid * Cuts/Cuts.{h,cc}: Added small epsilon to maxSHat comparisons to avoid numerical instability when NoPDF is chosen. 2009-10-05 Leif Lönnblad * Handlers/ACDCSampler.cc, Handlers/StandardEventHandler.cc, Handlers/SubProcessHandler.*, Repository/EventGenerator.cc (doinitrun): Made the initrun() initialization of ACDICSampler require prior initrun() of the StandardEventHandler and, via the SubProcessHandler, also the MEBase objects (in response to herwig:ticket:275). * Repository/Repository.cc (Repository::help): Added help command which hopefully will write out helpful info (in response to herwig:ticket:277). 2009-09-30 Leif Lönnblad * Repository/Strategy.*, Repository/Repository.cc: Strategy now has a DefaultParticlesDirs interface (ParVector of strings). If not empty, the scanning of all particles in the repository to include particles in a run is disabled and only the directories listed are scanned. 2009-09-28 Leif Lönnblad * Analysis/RivetAnalysis.h: Added filename parameter which defaults to the run name. 2009-09-10 Leif Lönnblad * Repository/Repository.cc (findParticle): If the name is not found among the default particles, look through also all other particles. 2009-09-09 Leif Lönnblad * EventRecord/Event.cc (printGraphviz): Added member function to call ThePEG::printGraphviz to facilitate usage in debugger. 2009-09-09 David Grellscheid * EventRecord/Event.* (printGraphviz): Moved Graphviz generation into Event. Added coloured lines for colour lines. tcc file absorbed in header. * Analysis/GraphvizPlot.*: Uses new printGraphviz functionality, now independent of HepMC. 2009-09-07 Leif Lönnblad * LesHouches/LesHouchesReader.cc (LesHouchesReader::createBeams): If there are no PDFs used (and NoPDF's are assigned to the reader), the incoming particles are the same as the beams. This should fix herwig:ticket:273. * PDT/DecayMode.cc (DecayMode::constructDecayMode), Repository/BaseRepository.cc (BaseRepository::TraceObject): (In response to herwig:ticket:271) if an object is not found and the name looks like a decay mode, a dummy decay mode is constructed and the corresponding, decay tag is generated, and it is checked if there is a corresponding DevayMode in the given directory. If this is the case, that object is used instead and a warning is emitted. 2009-09-04 David Grellscheid * Vectors/HepMCConverter.tcc: Relaxed units exception for older HepMC versions. 2009-09-01 David Grellscheid * LesHouches/LesHouchesEventHandler.cc (initialize), LesHouches/LesHouchesReader.cc (createPartonBinInstances): Improved error message in LesHouches reader. 2009-08-28 Leif Lönnblad * MatrixElement/MEBase.*, Handlers/StandardXComb.*, Handlers/StandardEventHandler.*: Fixed problem with (p)reweighting of matrix elements: the sub-process object for the XComb was not properly set which caused segfault. Then the reweighting was not properly taken into account in the statistics function in the StandardEventHandler. 2009-08-19 Leif Lönnblad * Repository/EventGenerator.cc (EventGenerator::generateReferences): Order the items in the LaTeX file with references according to importance (in response to herwig:ticket:270). 2009-08-18 Leif Lönnblad * Handlers/AnalysisHandler.h: Added include for Event.h for convenience (herwig:ticket:269). 2009-08-18 David Grellscheid * Repository/EventGenerator.{h,cc}: Added new Switch: UseStdout. ATLAS requested to receive all output on stdout instead of .out .log and .tex files. (herwig:ticket:213) Reduced frequent usage of 'endl'. * EventRecord/ColourLine.cc (startParticle, endParticle): Leif has fixed the determination of start and end particles to only consider ones without coloured children. 2009-08-06 Leif Lönnblad * Analysis/GraphvizPlot.cc (dofinish): Made the message sent to cout optional. * lib/inputerror.pm (inputerror): Added small PERL module for reading numbers with errors as written out bu ThePEG. * Vectors/HepMCTraits.h, Vectors/HepMCConverter.tcc, Vectors/HepMCConverter.h: Included support for cross sectio information and made the traits class implement cross sections, pdf's and units depending on what is set in HepMCDefs.h. Also reordered the particles according to their numbering as an alternative to CMS's suggested "topological" sorting. This will hopefully fix herwig:ticket:153 * include/Makefile.am (CONFIGHEADERS): Make sure Config/HepMCHelper is properly symlinked. * Analysis/GraphvizPlot.cc (particleName): Added helper function for getting the name of a particle to be able to handle remnant particles (which have code 82). 2009-08-05 David Grellscheid * EventRecord/ColourLine.h: Handle possible segfault in start/endParticle() more gracefully. Also, source and sink were the wrong way round. 2009-07-06 David Grellscheid * PDF/LHAPDF.cc, PDF/Makefile.am: Also look in ThePEG's pkgdatadir for the PDFsets.index file. 2009-06-18 Simon Plätzer * StandardModel/*Alpha*, StandardModel/RunningCoupling.*, StandardModel/Makefile.am: Changes to unify the treatment of running couplings, providing scale factors, helpers to veto algorithms and information about the number of loops entering the beta function to perform consistency checks. 2009-06-15 Leif Lönnblad * Handlers/EventHandler.*, Handlers/StandardEventHandler.*, Repository/EventGenerator.*, LesHouches/LesHouchesEventHandler.* (integratedXSecErr): Added integratedXSecErr() function returning the estimated error on integratedXSec() at the request of Fred Stober. 2009-06-10 David Grellscheid * configure.ac, m4/thepeg.m4: Added summary output after configure is run. 2009-06-09 Leif Lönnblad * LesHouches/LesHouchesReader.cc (initStat): Fixed bug where the sum of the maximum weights was calculated instead of the maximum. This will hopefully finally fix herwig:ticket:248 2009-05-22 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc: The cross section for different processes in the same LesHouches reader was not reported correctly (herwig:ticket:248). This is now fixed. 2009-05-21 Leif Lönnblad * Utilities/UnitIO.h: herwig:ticket:254 Fixed ouniterr() so that nan's and inf's are written out as such and don't throw nasty exceptions. 2009-05-18 Leif Lönnblad * Handlers/StandardEventHandler.cc (addME): herwig:ticket:253 Fixed so that before determining whether or not a diagram should be mirrored to match the incoming partons, the diagram partons are temporarily ordered so that the first never has a id lower than the second. 2009-05-11 Leif Lönnblad * Analysis/HistogramFactory.h: Fixed bug in divide and multiply so that the weighted bin center does not goes wild. 2009-05-01 David Grellscheid * Helicity/WaveFunction/*.h: Removed lots of redundant, unused constructors. 2009-04-30 David Grellscheid * Helicity/RhoDMatrix.h: Worked around gcc 4.1.2 compiler bug on x86_64. The 'norm = 1/norm' line was omitted if optimization was higher than -O1. 2009-04-16 David Grellscheid * Cuts/*: Added describe() functionality. Called during initrun() if Debug::level is set, it will print the ranges of the active cuts to the logfile. 2009-04-02 David Grellscheid * Repository/EventGenerator.*: Setting dumpPeriod to -1 will now disable dumping completely, even in the case of errors. * Repository/Repository.*, configure.ac, m4/vl_readline.m4, lib/Makefile.am: Implemented basic readline support for the interactive mode. Will fall back to previous method if not reading from std::cin, or readline is not available. 2009-03-10 David Grellscheid * m4/*: Updated libtool files to version 2.2.6 2009-03-02 Mike Seymour * Vectors/HepMCConverter.tcc: Fixed minor bug leading to incorrect PDFInfo when the two beam particles are different. 2009-02-26 Leif Lönnblad * Config/Pointers.h (ThePEG_DECLARE_POINTERS): Changed macro so that they can be used to easily typedef pointers outside the ThePEG namespace. 2009-02-11 Leif Lönnblad * Persistency/PersistentOStream.h: Added output operator for c-style strings as requested in ticket #231. * LesHouches/LesHouchesReader.*: Added interfaced flag WeightWarnings to avoid warnings about inconsisten weight warnings. The default is still to issue warnings. * include/ThePEG/Vectors/Transverse.h: Removed operator/(Transverse a, double b) as it caused ambiguous overloads when unitchecks were turned off, and as it wasn't really needed. 2008-12-10 David Grellscheid * LesHouches/LesHouchesReader.cc: Fixed several segfaults when LHE file is inconsistent with repository settings. 2008-12-07 Leif Lönnblad * Utilities/Current.h (ThePEG): Added general class for accessing a static default object of a certain class. 2008-12-05 Leif Lönnblad * LesHouches/MadGraphReader.cc (MadGraphReader::open): Now issues warning if LHE file does not include proper MadGraph header. 2008-11-20 Leif Lönnblad * Repository/MultiEventGenerator.* (MultiEventGenerator::doGo): Header with sub-run information is now written also to the log file. 2008-09-24 Leif Lönnblad * Vectors/Transverse.h: Fixed bug where named arguments were omitted when moving the implementation from the .icc files. 2008-09-23 David Grellscheid * *: Global icc cleanup. Tested with several Herwig long runs. 2008-09-15 David Grellscheid * EventRecord/*, PDT/*: icc removal. * EventRecord/Particle.*: Reduction of needless rep() constructions for 'get' type member functions. 'theRep' no longer needs to be mutable. Checked with several long Herwig++ runs, 1.5% runtime improvement. * PDT/ParticleData.*, PDT/PDT.*, PDT/MatcherBase.* : Inconsistent colo(u)r spelling unified to British only. Previously, MatcherBase used American only, Particle used British only and PDT and ParticleData offered both. * PDT/ParticleData.* : Strings now passed by reference. 2008-09-12 Leif Lönnblad * Vectors/HepMCTraits.h, Vectors/HepMCConverter.*: Introduced units for HepMC. By includeing GenEvent.h and checking if the Units.h file also was included, the default behavior of the traits class should be correct. (herwig:ticket:202) * Config/Unitsystem.h: Added centimeter which may be used as a unit in HepMC. * Analysis/FactoryBase.h, configure.ac, Config/LWH.h.in, m4/thepeg.m4: Configure now checks for AIDA header files and includes them instead of the stubs in LWH. This will hopefully fix some of the problems in herwig:ticket:198 2008-09-10 Peter Richardson Vectors/LorentzVector.h: Added a member to mass squared of two vectors to avoid additional memory allocation and made strings for error messages constant to avoid allocation/deletion overhead was using 1.5% of time when generating LEP events with Herwig++. 2008-09-09 Leif Lönnblad * Vectors/Transverse.*: Added function to multiply and divide with scalar. * PDT/ParticleData.icc: Fixed cTau() function to return hbarc/theWidth it theCTau is zero. 2008-08-29 Peter Richardson * PDF/*: Added a member to calculate the sea pdf as this is needed in Herwig++ and can often be computed faster than by just taking the difference of the full PDF and the valence only piece. 2008-08-29 David Grellscheid * Helicity/*: Cleaned up RhoDMatrix and SpinInfo after profiling showed inefficiencies. 2008-07-04 Leif Lönnblad * Handlers/DecayHandler.cc (performDecay): Introduced MaxLifeTime parameter and corresponding variable to prevent particles with longer lifetime than this to decay (herwig:ticket:199). 2008-06-16 Leif Lönnblad * Analysis/LWHFactory.cc: The LWH namespace is renamed to ThePEGLWH to avoid problems with using the Rivet versions of the LWH classes (herwig:ticket:198). 2008-06-09 David Grellscheid * PDF/LHAPDF.cc, m4/thepeg.m4: Removed usage of lhapdf-config. The same information can be obtained at configure-time, and is passed in with a '-D' compile flag. 2008-05-29 David Grellscheid * PDT/DecayMode.*: Made theOrderedProducts a tPDVector to break possible dependency loops. 2008-05-26 Leif Lönnblad * src/setupThePEG.cc, Repository/(Base)Repository.*: Added possibility to specify include directories for looking for .in files. setupThePEG now takes flags -I and -i to prepend and append search paths. BaseRepository has functions prependReadDir and appendReadDir for the same purpose. 2008-05-25 Leif Lönnblad * Repository/RandomGenerator.*, Repository/StandardRandom.* (StandardRandom::setSeed): The documentation of the Seed interface did not match the documentation and behavior of the setSeed function. Changed so that setting Seed to 0 will not give a new seed to the generator, while -1 will give a standard seed. 2008-05-24 Leif Lönnblad * src/Makefile.am, src/MultiLEP.in: Added test of MultiEventGenerator. * Repository/MultiEventGenerator.cc (MultiEventGenerator::doGo): Fixed various bugs relating to resetting and finalizings. * Repository/EventGenerator.* (EventGenerator::finally): Divided up dofinish and added finally() to do things at the ultimate end. * Handlers/ACDCSampler.cc (ACDCSampler::initialize): Added call to clear() before initializing in case of multiple runs. 2008-05-20 David Grellscheid * Utilities/FixedSizeAllocator.*, EventRecord/{Collision,Particle, Event,Step,RemnantParticle,SubProcess,EventConfig}.{h,icc}: Removed FixedSizeAllocator. Timing 10000 default Herwig++ LHC events shows a speedup of 5%: 720 s now vs. 756 s before. * m4/, src/Makefile.am, configure.ac, Config/ltmain.sh, include/Makefile.am, Makefile.am: Included libtool 2.2.4 in the tarball. Moved acinclude into m4/thepeg.m4. 2008-05-19 Leif Lönnblad * Handlers/StandardEventHandler.cc (StandardEventHandler::statistics): Fixed so that the statistical error on the total cross section is still well approximated if some events are vetoed. (herwig:ticket:174) * ACDC/ACDCGen.icc: Fixed? bug in calculating the statistical error. (herwig:ticket:174). 2008-05-17 Leif Lönnblad * Utilities/UnitIO.h: Introduced IUnitErr and iuniterr to read in numbers with error estimates written out by OUnitErr. Also introduced specializations of ouniterr and iuniterr for double without unit argument. In response to herwig:ticket:174. 2008-05-16 Leif Lönnblad * Repository/Repository.cc (Repository::exec): Fixed bug in creating decay modes for non-synchronized particles (herwig:ticket:182). 2008-05-13 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc (LesHouchesEventHandler::statistics): Now writes out cross sections with statistical error estimates. In response to herwig:ticket:174. * Handlers/StandardEventHandler.cc (StandardEventHandler::statistics): Now writes out cross sections with statistical error estimates. In response to herwig:ticket:174. * Utilities/UnitIO.h: Introduced OUnitErr and ouniterr to nicely write out (unitful) numbers with error estimates. * Handlers/ACDCSampler.*, Handlers/SamplerBase.h: Also keeps track of the statistical error. * ACDC/ACDCGen.* (ACDCGenerator): ACDCGen now gives a better estimate of the integral and in addition estimates the statistical error. 2008-05-05 Leif Lönnblad * MatrixElement/ME2to2Base.cc (ME2to2Base::getCosTheta): Fixed precision problem according to Peters suggestions in herwig:ticket:172. 2008-05-02 Leif Lönnblad * Handlers/StandardEventHandler.cc: Preparing for having errors on the statistice output. * Cuts/Cuts.cc (Cuts::passCuts): Stupid bug fixed, and herwig:ticket:172 seems now to be solved. * Handlers/StandardXComb.cc, Cuts/Cuts.* (Cuts::initSubProcess): Make Cuts aware that a matrix element may be generating sub-processes which are mirrored along the z-axis. This will hopefully fix herwig:ticket:172. 2008-04-30 Leif Lönnblad * Utilities/CompSelector.*, LesHouches/LesHouchesEventHandler.*: CompSelector will now only start compensating if a weight is larger than unity by some tolerance factor. This is used by the LesHouchesEventHandler. * PDT/ParticleData.cc, Repository/Repository.cc (Repository::exec): After "setup" a particle is now added to default particles and also to matchers by the Repository rather than in the ParticleData::readSetup function. * PDT/ParticleData.cc: Changed readSetup() so that if '-' is given as the PDGName the object name will be used instead. 2008-04-29 Leif Lönnblad * Repository/Strategy.cc (Strategy::setLocalParticlesDir): Allow setting an empty string, to indicate that no directory should be searched. 2008-04-28 Leif Lönnblad * LesHouches/MadGraphReader.cc (MadGraphReader::open): The MadEvent file format has changed (AGAIN!) so things that were previously outside the
is now inside. 2008-04-27 Leif Lönnblad * Repository/Repository.*, PDT/DecayMode.cc: Removed Repository::findParticleByPath, findParticle now has the same behavior. Removed the obsolete special treatment of decay modes in the Repository. * src/ThePEGParticles.in, PDT/ParticleData.cc: In readSetup a particle will add itself to the default particles if no particle with the same id was not present before. The "defaultparticle" commands was therefore removed from ThePEGParticles.in. * Repository/Repository.cc (Repository::findParticleByPath): Added function to first seach a particle according path, before resorting to finding default particle. The behavior of the "decaymode" command uses the new DecayMode::constructDecayMode behavior. * PDT/DecayMode.* (DecayMode::constructDecayMode): Redesigned recent changes. If the decaying particle is a valid path to a particle object the decay mode will be added to that particle. Otherwise the decay mode will be added to the corresponding default particle. 2008-04-26 Leif Lönnblad * Repository/Repository.cc (Repository::exec): Changed the behavior of "decaymode" again. Now, if what preceedes the "->" in the decay mode tag corresponds to a valid path to a particle, the decay mode will be added to that particle, otherwise the previous behavior is maintained. 2008-04-25 Leif Lönnblad * Repository/Repository.cc, PDT/DecayMode.* (DecayMode::constructDecayMode): If "decaymode" specifies an object name which is in a subdirectory of a particle, the created decay mode will be added to the corresponding particle. If only a decay tag is specified the decay mode will be added to the corresponding default particle (the old behavior). * Repository/Repository.cc (Repository::makeRun): Use the LocalParticlesDir in the Strategy object to find default particles. * Repository/Strategy.* (Strategy::setLocalParticlesDir): Added interface to specify a directory which is scanned for particles which are treated as default particles for the given strategy. * Interface/*: Now uses 'setuperror' severity in exceptions. Also catches InterfacedException's by reference to avoid duplicated output. * Utilities/Exception.*: Added new severity level 'setuperror' to be used during the setup phase. * LesHouches/LesHouchesReader.cc (LesHouchesReader::createParticles): Fixed bug in checking for colour-line consistency. 2008-04-23 Leif Lönnblad * LesHouches/LesHouchesReader.cc (LesHouchesReader::scan): Removed unused variable 'xlast'. 2008-04-18 Leif Lönnblad * PDF/LHAPDF.cc: Fixed spelling in error message. 2008-04-15 Leif Lönnblad * Repository/Repository.cc (Repository::exec): Implemented "rm", "rmdir" and "rrmdir" commands to override the ones in BaseRepository This fixed the bug that particles and decay modes were not properly removed and that rrmdir was absurdly slow when removing large directories. * Repository/BaseRepository.cc: Fixed bug where error message from remove() was not checked in "rrmdir" command. ("rrmdir" still unecessesarily slow.) 2008-03-30 Leif Lönnblad * src/SimpleLEP.in, src/Makefile.am: Include a test that the run inside setupThePEG gives exactly the same result as the runs in runThePEG, both when run from the beginning and when resumed. * src/runThePEG.cc, Repository/EventGenerator.*, Repository/MultiEventGenerator.* ((Multi)EventGenerator::doShoot): Enable the possibility to resume the execution from an interrupted (and possibly dumped) run. * Pointer/ReferenceCounted.h, Persistency/PersistentOStream.*, Persistency/PersistentIStream.*: The uniqueId used to sort pointers in the ReferenceCounted class is written to the file and can optionally be read back in. For this reason the PersistentIStream was made a friend of ReferenceCounted. * Persistency/PersistentOStream.icc: Increased the number of significant digits when writing out floating point numbers to avoid divergent random number sequences. 2008-03-29 Leif Lönnblad * Utilities/XSecStat.cc: Fixed bug in input function. 2008-03-28 Leif Lönnblad * PDF/LeptonLeptonPDF.cc (xfl): Modified the order of exps and pows to enable l-values closer to zero without overflow. 2008-03-24 Leif Lönnblad * Utilities/ClassDescription.fh: Added forward declarations for all description classes. 2008-03-20 Leif Lönnblad * Utilities/Debug.cc (Debug::unmaskFpuErrors): Removed the unmasking of denormalization exceptions, as these are not really errors. * LesHouches/LesHouchesEventHandler.cc: Changed call to rndPoisson to match new implementation. * Repository/UseRandom.*, Repository/RandomGenerator.*: RandomGenerator can now be used with gsl random number distributions. In particular rndPoisson now uses gsl_ran_poisson, and no longer need the maximum argument. * src/Makefile.am, configure.ac, acinclude.m4: Included check for gsl, on which ThePEG now depends. 2008-03-17 Leif Lönnblad * *** GLOBAL ***: Merged in changes from LHEF-rewrite branch including a major rewrite of the LesHouches interface and some bug-fixes and improvements. 2008-03-17 Leif Lönnblad * Repository/Repository.cc: Fixed missing return statements in copyParticle error messages. 2008-03-14 Leif Lönnblad * Analysis/XSecCheck.cc: Fixed to work also on weighted events. 2008-03-13 Leif Lönnblad * Repository/RandomGenerator.* (RandomGenerator::rndPoisson): Made rndPoisson non-inlined and improved behavior for large averages. * Utilities/CompSelector.icc: Fixed bug in compensating for weights larger than unity. 2008-03-11 Leif Lönnblad * Analysis/XSecCheck.*: Added simple analysis which emits an error if the cross section was not what was expected. 2008-03-08 Leif Lönnblad * Utilities/XSecStat.*, Handlers/StandardXComb.*, Handlers/StandardEventHandler.*, LesHouches/*: Fixed bug in previous fix of XSecStat affecting generation of weighted events. 2008-03-07 Leif Lönnblad * Vectors/HepMCConverter.*: Added convert function which fills a given GenEvent rather than creating one internally. This fixes herwig:ticket:160. 2008-03-07 Leif Lönnblad * Utilities/XSecStat.*: Fixed bug in reject function which could give incorrect statistics. 2008-02-14 Leif Lönnblad * Repository/Repository.*, src/setupThePEG.cc: Introduce constructor and destructor in the Repository to allow for cleanup. Create a Repository object in setupThePEG to allow for cleanup. * Handlers/XComb.cc (XComb::clean): Do not create new partonBinInstances, just set the pointers to NULL. Instead create new partonBinInstances in prepare(). 2008-01-24 Leif Lönnblad * Handlers/StandardXComb.cc (dSigDR): Moved call to MEBase::dSigHatDR to after call to PDFs and made it contitional to PDFs being non zero. This fixes herwig:ticket:136 2008-01-23 Leif Lönnblad * Vectors/HepMCTraits.h, Vectors/HepMCConverter.tcc, Vectors/HepMCConverter.h: Added possibility to choose in which units lengths and energies should be stored in GenEvent. 2008-01-15 Leif Lönnblad * LesHouches/LesHouchesFileReader.*: Made class concrete. 2008-01-13 Leif Lönnblad * src/setupThePEG.cc, Repository/Repository.cc Repository/BaseRepository.*: Added commands to specify global libraries. * Persistency/PersistentOStream.cc: global libraries are now outputted with main version number. 2008-01-12 Leif Lönnblad * Persistency/PersistentIStream.cc, Persistency/PersistentOStream.*: Added possibility to specify shared libraries to be loaded before of persistent objects. 2007-12-22 Leif Lönnblad * Interface/Deleted.*, Interface/Makefile.am: Introduced new Interface class to be used when an interface is removed to provide a user-friendly message indicating why it was removed and possibly which interface should be used instead. (ticket #124) 2007-12-14 Leif Lönnblad * Handlers/StandardEventHandler.cc: Fixed integratedXSec() so that it really returns the overestimated xsec if no events have been generated. * Handlers/ACDCSampler.cc, Handlers/ACDCSampler.h, Handlers/SamplerBase.h: Added access function to get overestimated cross section. 2007-11-30 Leif Lönnblad * Pointer/RCPtr.icc: For consistency also pointer comparison with bare pointer uses uniqueId. 2007-11-27 David Grellscheid * Utilities/UtilityBase.tcc: Avoid rotation around a zero vector. 2007-11-26 Leif Lönnblad * lib/Makefile.am: Make sure dynamic libraries in ThePEG/Analysis are properly soft-linked. 2007-11-26 David Grellscheid * configure.ac, acinclude.m4: Detection and workaround for gcc abs bug. * Analysis/LWHFactory.h, Analysis/Makefile.am: Factored out LWHFactory into its own dynamic library. 2007-11-23 David Grellscheid * Pointer/ReferenceCounted.*, Pointer/RCPtr.icc: Added uniqueId to all reference-counted objects, to be able to sort RCPtrs in a platform-independent manner. Fixes Herwig ticket #46. 2007-11-14 David Grellscheid * PDT/DecayMode.cc: Fixed directory handling in 'decaymode' command. 2007-11-09 Leif Lönnblad * PDF/PartonExtractor.cc: Disable flatSHatY strategy for generating phase space if PDFs has poles in x=1. Fixes ticket #119 * PDF/PartonBinInstance.* PDF/PDFBase.* PDF/NoPDF.* PDF/LeptonLeptonPDF.*: Introduced hasPoleIn1() functions to check if a given PDF or parton bin has a pole at x=1. Fixes ticket #119 2007-11-07 Leif Lönnblad * Utilities/XSecStat.icc: xSec() and xSecErr() now returns maxXSec() if no attempts have been made. * Handlers/StandardEventHandler.cc: integratedXSec() now returns the overestimated cross section if no events have been generated. * Utilities/XSecStat.h, LesHouches/LesHouchesEventHandler.h, Handlers/StandardEventHandler.h, Handlers/EventHandler.h: Changed documentation. 2007-10-23 Leif Lönnblad * PDF/LHAPDF.h, PDF/LHAPDF.cc, PDF/PDFsets.index, PDF/Makefile.am, PDF/LHAIndex.txt: Removed old index file and added new one. Also changed LHAPDF class to look for the new one in the LHAPDF install directory. 2007-10-18 David Grellscheid * src/ThePEGDefaults.in, Doc/refman.conf.in, Doc/Makefile.am, Doc/MakeDocs.in, Makefile.am: AllInterfaces.h now generated from its own input file. 2007-09-13 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc: Remember to set theIncoming particles in the EventHandler base class. 2007-09-06 Leif Lönnblad * Handlers/StandardEventHandler.cc: Only clean() the previous XComb in select() if it is not the newly selected one. 2007-09-05 David Grellscheid * Handlers/StandardEventHandler.cc: In select(), clean up theLastXComb before switching to a different one. This fixes Herwig bug #89, where stale XComb objects still contained information about past events that had long been cleared. * Handlers/XComb.cc: Reset PartonBinInstances as part of clean(). 2007-08-30 David Grellscheid * Vectors/SpinOneLorentzRotation.h, .icc: Fixed self-assignment problem with valarray. 2007-08-28 David Grellscheid * ***GLOBAL***: General cleanup: removed most .icc files smaller than 1kB, cleaned up definitions of redundant copy constructors, destructors, doinit, etc. 2007-07-25 David Grellscheid * Helicity/Vertex/Scalar/GeneralSVVVertex.*: cherstn added evaluate member turning two vector wave functions into scalar wave function * Helicity/Vertex/VertexBase.icc: cherstn added additional option for propagator * Helicity/WaveFunction/*WaveFunction.*: efficiency fix: wave() now returns a const reference instead of copying * Config/Units_*checked.h: Added InvArea and InvLength 2007-07-11 David Grellscheid * Config/Units_*checked.h: Added more predefined units, renamed mm to millimeter, to avoid clash with common variable name. * Config/ThePEG.h, PDF/LHAPDF.cc, Utilities/Math.h, Utilities/DynamicLoader.cc, Utilities/CFileLineReader.cc, Utilities/Math.cc, Utilities/Debug.cc, Utilities/Math.icc, include/Makefile.am, LesHouches/LesHouchesReader.icc, LesHouches/LesHouchesReader.cc, LesHouches/LesHouchesReader.h: Removed dependecy of installed headers on config.h, to avoid conflicts with other Autotools code. config.h is no longer installed. 2007-07-09 David Grellscheid * Vectors/ThreeVector.h: fixed inline specifier * Vectors/LorentzVector.h, Config/PhysicalQtyComplex.h: workarounds for g++-3.3 bugs * Utilities/UnitIO.h: Fixed iunitstream for complex dimensioned quantities. 2007-07-05 David Grellscheid * CLHEPWrap/*, Vectors/*: Renamed CLHEPWrap to Vectors * Helicity/*: Migrated WaveFunctions and Scalar/Vector/Tensor vertices from Herwig++. 2007-07-03 David Grellscheid * Config/std.h, Config/Units_unchecked.h: Fixed ambiguous overload problem which shows up with g++-3.4.3 2007-07-02 David Grellscheid * *** GLOBAL ***: Merged in relevant changes from the STRICT_UNITS_BRANCH. Dimensionful quantities need to have correct types, CLHEP dependencies have been removed completely. Unit checking can be disabled with --disable-unitchecks, note that the code will NOT be backwards compatible either way! 2007-06-28 Leif Lönnblad * Handlers/CascadeHandler.*: Added possibility to assign new PDF objects instead of those set in handle(). * PDF/PDF.*: Added constructor and access to the PDFBase and ParticleData objects explicitly. * LesHouches/LesHouchesReader.*: Check that the colour flow in the Les Houches common block is consistent. * EventRecord/Event.*: Fixed the numbering of particles. Before the numbering could get screwed up if particles were removed from the event (which did not happen very often). * EventRecord/Step.*, EventRecord/Event.*, EventRecord/Collision.*: Added removeSubProcess function. * PDT/RemnantData.*, EventRecord/RemnantParticle.*: Added remove function. 2007-06-27 Leif Lönnblad * src/setupThePEG.cc, src/runThePEG.cc: Added command line option to dynamically load specified libraries before reading persistent files. * EventRecord/Particle.cc: Fixed printout to also report multiple colour lines. * EventRecord/MultiColour.*, EventRecord/ColourBase.*: Added virtual functions to retreive multiple colour lines. Also fixed clone function for MultiColour. * EventRecord/Step.cc: Fixed bug in removeEntry where a particle was being erased from theParticles even though it was not in there. 2007-06-26 Leif Lönnblad * EventRecord/SubProcess.*, EventRecord/Step.*: Added debugme() function. * EventRecord/RemnantParticle.*: extract() and reextract() now optionally does colour connections. Not quite sure it works yet. 2007-06-25 Leif Lönnblad * PDT/RemnantData.cc: Changed the PDGId of the remnant from being the number of the parent particle to 82, which is the convention in Herwig++. 2007-05-31 Leif Lönnblad * PDF/LHAPDF.*: Added interface to limit the number of flavours which are reported to avoid problems where the remnant handler refuses to handle extracted top quarks. The default maximum is set to 5, which means no top quark densities are given. 2007-05-26 Leif Lönnblad * Persistency/PersistentIStream.*: The stream now throws an exeption if something goes wrong (if Debug::level != 0). The exceptions messages were somewhat enhanced. * Interface/InterfacedBase.*, Interface/Interfaced.*, EventRecord/Particle.*, EventRecord/Event.*: Introduced debugme() functions. * Config/Makefile.am, Config/ThePEG.*: Introduced a non-virtual debug() function which calls a virtual debugme() function for any polymorphic object in ThePEG 2007-05-25 David Grellscheid * Config/Containers.h: Fixed bad stream output for ounit(std::map<>) 2007-05-21 Leif Lönnblad * CLHEPWrap/HepMCConverter.tcc: Fixed memory leak, where several GenParticle's were created for the same ThePEG::Particle instance. 2007-05-18 David Grellscheid * Config/*: introduced configure switch to turn off template unit checking. Currently needs full rebuild of code by hand whenever this configure flag is changed. * (various files): removed obsolete CLHEP references 2007-05-18 Leif Lönnblad * Persistency/PersistentIStream.cc: Added error information from dynamic loader if creating an object fails. 2007-05-15 Leif Lönnblad * Repository/UseRandom.*, Repository/StandardRandom.*, Repository/RandomGenerator.*: Modified to no longer use CLHEP::RandomEngine. StandardRandom now directly implements the JamesRandom engine. * PDT/WidthGenerator.cc, PDT/ParticleData.cc, PDT/BreitWignerMass.cc, LesHouches/LesHouchesEventHandler.cc: Fixed to use new RandomGenerator. 2007-05-02 Leif Lönnblad * LesHouches/MadGraphTwoCut.cc, Cuts/TwoCutBase.cc, Cuts/KTClus.cc: Fixed bug in calculating delta-R where the phi-difference was always zero. 2007-04-17 Leif Lönnblad * src/TestLHAPDF.cc: Also test that valens densities works properly. * PDF/PDFBase.h, PDF/PDFBase.cc: xfvx and xfvl now gives sensible values for baryons even if not overridden in base classes. * PDF/LHAPDF.h, PDF/LHAPDF.cc: Make sure xfvl calls xfvx rather than the base class xfvl. 2007-03-23 Leif Lönnblad * Repository/EventGenerator.cc: Make sure theCurrentEventHandler is set for the initrun() calls. * Handlers/CascadeHandler.*: Removed theEventHandler variable and associated code as this is handled in the StepHandler base class. 2007-03-22 Leif Lönnblad * Handlers/StandardEventHandler.h: Removed unused and unimplemented 'compensating()' member function. * Handlers/StandardEventHandler.*: Removed unused member variable theNDim. * lib/ThePEG.el: Corrected argument types for template for StepHandler::handle(). 2007-03-17 Leif Lönnblad * Cuts/SimpleKTCut.*: Added a maximum kt cut on popular demand. 2007-02-27 Leif Lönnblad * LesHouches/LesHouchesReader.cc: Added extra checks to make sure momentum fractions were not larger than unity. 2007-02-18 Leif Lönnblad * LesHouches/MadGraphReader.cc: If the number of events in a file could not be determined, the XMAXUP was set to zero which prevented running with weighted events. This is now fixed, but the reported cross section will probably not come out right. 2007-02-06 Leif Lönnblad * Analysis/HistogramFactory.h: Fixed divide-by-zero in divide function. Also fixed bug in error calculation in divide function. Introduced checkBin function to make sure two histograms are equal even if they have variable bib widths. * Cuts/Cuts.icc: Fixed typo-bug where the cuts in x1 were used for cuts in x2. * PDF/PartonBinInstance.cc: Call reset() in prepare() to avoid dangling pointers. * Analysis/Histogram1D.h: In normalize(double), do not do anything if the sum of the bins are zero to avoid dividing by zero. 2007-02-03 Leif Lönnblad * PDF/PartonExtractor.cc: In addNewRemnants, fix so that previous remnants are still the children of the incoming particle, but also the parent to the new remnants (the new remnants are also the children of the incoming particle). * EventRecord/Particle.cc: In printout, order the parents and children to make it more readable. 2007-01-31 Leif Lönnblad * Handlers/AnalysisHandler.cc, Handlers/AnalysisHandler.h: The documentation of the main analyze() function was inconsistent with what was actually done. In particular, the event was not transformed as promised. This transformation is now implemented and the documentation is updated. 2007-01-29 Nils Lavesson * MatrixElement/MENCDIS.cc: Fixed a bug in the coupling of the Z to antiparticles. 2007-01-25 David Grellscheid * Handlers/EventHandler.h: removed default argument of newStep(). It now explicitly requires a pointer to the responsible handler. 2007-01-16 Nils Lavesson * MatrixElement/MENCDIS.cc: Included Z exchange and gamma Z interference in the neutral current DIS matrix element. 2007-01-12 Leif Lönnblad * PDF/GRVBase.cc: Remove Timer call. * PDF/SoftRemnantHandler.cc: Rotate the remnant momentum directly rather than going via the particle and a LorentzRotation. * PDF/LeptonLeptonRemnant.cc: Rotate the photon momentum directly rather than going via the particle and a LorentzRotation. This saves 10% in execution time, mainly by avoiding the SpinHalfLorentzRotation, which is not used anyway. 2007-01-08 Pete's account * Helicity/LorentzSpinorBar.cc (Repository): change to give same sign for conjugated spinors as if directly calculated and fix compiler warning1 2007-01-05 Peter Richardson * Helicity/LorentzSpinor.cc (Repository): Changes to return correct spinor type after charge conjugation and make bar() method const 2006-12-20 Leif Lönnblad * PDT/SimpleBaryonRemnantDecayer.h, PDT/SimpleBaryonRemnantDecayer.cc: If momentum shuffling was not possible, and respectDIS is true, try redoing it without respectDIS (emitting a warning) before giving up and throwing an exception. * PDT/RemnantDecayer.icc, PDT/RemnantDecayer.h: Added exception class and made respectDIS mutable and protected. * PDT/RemnantDecayer.cc: Make sure that exceptions thrown by CLHEP when taking the rapidity fails are caught and a proper Exception is thrown instead. Also make sure that remnants of colliding particles are not included when shuffling momentum. * PDF/PartonExtractor.cc: Fixed bug in boostRemnants which only showed up in DIS events where the incoming electron has no pdf. * Cuts/SimpleDISCut.icc, Cuts/SimpleDISCut.h, Cuts/SimpleDISCut.cc: Added a (post) cut in W^2. * Cuts/Cuts.cc: Make sure that the TwoCutBase::passCuts is called with the incoming partons in the right places. 2006-12-16 Leif Lönnblad * Utilities/MaxCmp.h, Utilities/MaxCmp.icc, Utilities/Makefile.am: Added new utility class to be used in loops where one would like to keep track of the largest value so far of a certain expression. 2006-12-15 Leif Lönnblad * acinclude.m4: Ticket #78. Changed LHAPDF options from 'enable' to 'with'. Also, configure will now produce an error if --with-LHAPDF is requested but no library was found. 2006-12-13 Leif Lönnblad * PDT/SimpleBaryonRemnantDecayer.cc: Fixed problem where only one particle is used to shuffle momentum. Its momentum was before boosted to its desired value which could cause problems. Now the momentum is simply set. * src/ThePEGDefaults.in, src/TestLHAPDF.in, src/LHAPDFDefaults.in: Now uses new remnant treatment. * PDF/PartonBinInstance.cc: Fixed bug where x-values could come out wrong if created from already generated partons. * PDF/BaryonRemnants.h: Changed documentation. This class is now deprecated. * LesHouches/LesHouchesReader.h, LesHouches/LesHouchesReader.cc: Removed the ScanPDFs interface and related function. * EventRecord/Particle.cc: If a particle is copied, the parents of the new copy is cleared. 2006-12-12 Leif Lönnblad * Analysis/FactoryBase.cc: Fixed bug where theTree was not properly deleted. 2006-12-11 Leif Lönnblad * MatrixElement/ME2to2Base.cc: Fixed bug in jacobian for the new options in getCosTheta. 2006-12-10 Leif Lönnblad * Cuts/Cuts.cc: Fixed bug in passCuts(const Collision &). The documantation states that the collision should be given in its rest frame, but the code assumed it was given in the lab frame. * PDF/LeptonLeptonPDF.cc: Modified flattenL to use the minimum rather than the maximum scale if available. 2006-12-09 Leif Lönnblad * MatrixElement/ME2to2Base.cc: Added option in getCosTheta to more efficiently generate DIS-like diagrams. 2006-12-08 Leif Lönnblad * Handlers/StandardXComb.cc: Fixed minor inconsistency in dSigDR where the shat was not updated for the Cuts object. * Cuts/SimpleDISCut.cc: Fixed bug in passCuts where Q^2 was calculated incorrectly. * Cuts/Cuts.cc: Fixed bug in passCuts where the momentum of the incoming particles was set incorrectly. 2006-12-07 Leif Lönnblad * PDT/Decayer.cc: Fixed error message in DecayParticle. * PDF/PartonExtractor.cc: If a single remnant, set its momentum rather than boosting it to the desired value. * EventRecord/Event.icc, EventRecord/Event.h: Fixed bug in argument to getFinalState. 2006-12-07 Nils Lavesson * MatrixElement/MENCDIS.cc: Implemented the neutral current DIS matrix element. 2006-12-02 Leif Lönnblad * Handlers/EventHandler.cc: Fixed so that checkConsistency() does not dump events if the warning is not printed. 2006-12-01 Leif Lönnblad * PDT/Decayer.h PDT/Decayer.cc: Introduced static DecayParticle function to administer the decay of a particle. * Handlers/DecayHandler.xh, Handlers/DecayHandler.h, Handlers/DecayHandler.cc: Moved much of the machinery to administer the decay a particle to Decayer::DecayParticle. * Repository/BaseRepository.cc, Repository/Repository.cc, Utilities/DynamicLoader.cc: Increased error information when dynamic loading fails. 2006-11-30 Leif Lönnblad * Utilities/UtilityBase.icc Utilities/UtilityBase.h: Introduced getTransformtoMomentum to replace old (and unreliable) transformToMomentum function. The new functions require an auxiliary vector to make the transformation unique. * Handlers/DecayHandler.cc: Fixed typo in error message. 2006-11-29 Peter Richardson * Helicity/LorentzSpinor(Bar).{h,icc,cc}: Added new method to apply the the charge conjugation matrix to turn u spinors into v spinors for use with Majorana fermions 2006-11-28 Leif Lönnblad * CLHEPWrap/HepMCConverter.tcc, CLHEPWrap/HepMCConverter.h: Added option to convert() function to not include particles with next() pointers in the HepMC::GenEvent. This will hopefully avoid nasty looking vertices in HepMC. * acinclude.m4: Added macro to check if stand-alone HepMC is installed. 2006-11-24 Leif Lönnblad * Utilities/XSecStat.icc: Fixed bug where the sumWeights2() function returned theSumWeights rather than theSumWeights2. 2006-11-18 Leif Lönnblad * EventRecord/Particle.icc, EventRecord/Particle.h, EventRecord/Particle.cc: Made sure that connected ColourLine is informed when a Particle is deleted to avoid dangling pointers. * src/TestRemnants.in, src/Makefile.am: Added test run for new remnant handling. * Repository/EventGenerator.icc, Repository/EventGenerator.h, Repository/EventGenerator.cc: Implemented variable and function to return the sumed weights of all generated events. Also added function to return the total cross section. * LesHouches/LesHouchesEventHandler.h, LesHouches/LesHouchesEventHandler.cc, Handlers/StandardEventHandler.h, Handlers/StandardEventHandler.cc: Implemented function to return total cross section. Fixed histogramScale function to work properly for weighted events. * Handlers/EventHandler.h, Handlers/EventHandler.cc: Added function to return the total Monte-Carlo integrated cross section. * Handlers/AnalysisHandler.h, Handlers/AnalysisHandler.cc: Added const access function to histogram factory. Added normalize functions. * Analysis/FactoryBase.h, Analysis/LWHFactory.h: Renamed misspelt normalize function. * Analysis/LWHFactory.cc: Implemented the normalize* functions. * Analysis/Histogram1D.h: Implemented the normalize function. 2006-11-16 Leif Lönnblad * Analysis/LWHFactory.h, Analysis/LWHFactory.cc, Analysis/FactoryBase.h: Added abstract normalize* functions to be implemented in subclasses. Implementation in LWHFactory not ready. * Analysis/Histogram1D.h: Added normalize function. Not implemented. 2006-11-15 Leif Lönnblad * LesHouches/LesHouchesReader.*: Added member variable maxFactor to keep track of how much the maximum cross section has been increased by increaseMaxXSec(). * LesHouches/LesHouchesReader.cc: Fixed memory leak where a SubProcess object was created with new instead of new_ptr. * LesHouches/LesHouchesEventHandler.cc: If weighted events, do not generate events with weight 0. * LesHouches/MadGraphReader.cc: Added tags for mixed minimum mass cuts anticipating a future change in the MadGraph event files. 2006-11-14 Leif Lönnblad * LesHouches/LesHouchesReader.*: Added member variable lastweight to be used when a LesHouchesReader produces unweighted events, but these are reweighted. Before all these events reported unit weight even if they were reweighted. The lastweight variable is now added to the cache file together with the standard Les Houches common block. Added member variable skipping to be set when skip() is running to avoid unnecessary reweighting of events which will never be used. When writing an event to a cache file the CKKW reweighting is not performed, instead theis reweighting is done when an event is read in again. 2006-11-10 Leif Lönnblad * LesHouches/MadGraphReader.cc: Trying to keep up with the constantly changing fileformat of MadGraph. * PDT/Makefile.am, PDT/SimpleBaryonRemnantDecayer.*: Added class to handle the decay of simple baryon remnants. Not yet implemented. 2006-11-09 Leif Lönnblad * MatrixElement/MEBase.icc, MatrixElement/MEBase.h, MatrixElement/MEBase.cc, LesHouches/LesHouchesReader.cc, LesHouches/LesHouchesReader.icc, LesHouches/LesHouchesReader.h: Added variables and interfaces for the minimum and maximum multiplicity to be considered in a CKKW reweighting procedure. * LesHouches/LesHouchesReader.cc, Handlers/StandardXComb.cc, Handlers/CascadeHandler.h, Handlers/CascadeHandler.cc: Changed signature of reweightCKKW. It now takes arguments giving the minimum and maximum multiplicity to be considered in the CKKW reweighting procedure. * Handlers/ClusterCollapser.cc: Fixed bug where no colour-singlet particles were considered for momentum compensation if no coloured particles where present. * PDT/Onium3GDecayer.cc, PDT/ColourPairDecayer.cc: Fixed bug where the scale of the produced coloured particles were not set. * Handlers/EventHandler.*: Added options in ConsistencyLevel switch to print out an event if inconsistencies are found. * EventRecord/SubProcess.*: Added flag to determine if a sub-process has been decayed (handled by a CascadeHandler) to avoid that the same sub-process is handled twice. * Interface/Switch.cc: Ticket #58. Made error message more clear when non-existent option is given. 2006-11-08 Leif Lönnblad * src/Makefile.am: Removed unnecessary -L options. * acinclude.m4: Modified the AC_ADD_THEPEG_PATH to always set the path to the lib directory. * Utilities/DynamicLoader.cc: Do not insert default paths 2006-11-08 David Grellscheid * src/Makefile.am: missing -L../lib added, this replaces $(theENV) 2006-11-08 Leif Lönnblad * src/Makefile.am, src/ThePEGDefaults.in, src/LHAPDFDefaults.in: Moved the LHAPDF struff from ThePEGDefaults.in to a separate file which is included in the repository only if LHAPDF is properly installed. * PDF/Makefile.am, PDF/LHAPDF.cc: Removed the compilation flag ThePEG_HAS_LHAPDF. Instead the LHAPDF class is simply not included if LHAPDF is not properly installed. * configure.ac, acinclude.m4: Removed the fortran chacking from the AC_SEARCH_LHAPDF and made sure LHAPDF is not linked int every object file. Also moved the AC_CONDITIONAL USELHAPDF from configure.ac to the AC_SEARCH_LHAPDF macro. * Analysis/Histogram1D.h, Analysis/DataPointSet.h: Fixed bug in the output to flat text files in DataPointSet. 2006-11-07 Leif Lönnblad * LesHouches/LesHouchesReader.cc: Removed conditional compilation depending on ThePEG_HAS_LHAPDF. 2006-11-06 Leif Lönnblad * PDF/SoftRemnantHandler.*: New remnant handler which will use the new soft RemnantParticle and related classes. * PDF/LeptonLeptonRemnant.cc: Fixed bug where the minX variable was not properly persistent. * PDF/RemnantHandler.h: made isMultiCapable protected. 2006-11-05 Leif Lönnblad * Analysis/FactoryBase.icc, Analysis/FactoryBase.h: Added facility to easily create and fill IDataPointSets. * Analysis/DataPointSet.h: Fixed bug in dimension in addPoint(). 2006-11-04 Leif Lönnblad * Analysis/FactoryBase.*: Added functions to handle IDataPointSetFactory object. * Analysis/AnalysisFactory.h, Analysis/Measurement.h, Analysis/HistogramFactory.h, Analysis/DataPointSetFactory.h, Analysis/DataPointSet.h, Analysis/DataPoint.h, Analysis/AIDataPointSetFactory.h, Analysis/AIDataPoint.h: Added classes to implement sets of datapoints according to the AIDA interface. 2006-11-03 Leif Lönnblad * Config/Units.h: Removed MultiplicationTraits and renamed BinaryMultiplicationTraits to BinaryOpTraits with typedefs for MulT and DivT. Simplified the specializations for complex. * Utilities/Math.icc: Make the sign function compare to T() instead of 0. * Config/ThePEG.h, Helicity/LorentzSpinor.*, Helicity/LorentzRSSpinorBar.*, Helicity/LorentzRSSpinor.*, CLHEPWrap/Transverse.h, CLHEPWrap/Lorentz5Vector.h, CLHEPWrap/ThreeVector.h: Removed MultiplicationTraits and changed to BinaryOpTraits. * CLHEPWrap/LorentzVector.h: Removed MultiplicationTraits and changed to BinaryOpTraits. Added assignment from other, but equivalent, classes. Changed +=, -=, + and - operators to allow for different but equivalent classes. Changed lightCone functions to allow for different but equivalent classes. * Config/PhysicalQty.h: Changed -= and comparison operators to allow different, but equivalent, classes on either side. 2006-11-01 David Grellscheid * include/Makefile.am : cleaned up include file linking and installation. This fixes a problem with using parallel make 2006-11-01 Peter Richardson * Helicity/LorentzSpinor.icc : changes to constnesss of various members 2006-10-19 Leif Lönnblad * EventRecord/ColourLine.cc: Added join function to join two colour lines. *** Not tested *** 2006-10-17 Leif Lönnblad * Handlers/DecayHandler.cc: Now uses new Decayer::decay function for decayers for which needsFullStep() returns true. * Config/algorithm.h: Fixed bug in rrange(const Cont &) function. * PDT/Decayer.cc: Added virtual needsFullStep and new decay functions to be used by remnant decayers and others which need access to the current step for the decay. 2006-10-11 Leif Lönnblad * PDF/PartonExtractor.cc, PDF/PartonBinInstance.cc, PDF/PDFBase.*: Changed the unit of PDFBase::flattenScale and its jacobian argument from Energy to double. Fixed related bug in PDFBase::flattenScale. 2006-10-10 Leif Lönnblad * EventRecord/ColourLine.cc: Now uses ColourBase::remove(Anti)ColourLine functions insted of explicitly setting colour lines to null. * EventRecord/ColourBase.*: Made setting of (anti)colourLine virtual. Also introduced virtual remove(Anti)ColourLine functions. * PDT/ParticleData.h: Made addDecayMode and removeDecayMode protected. * PDT/DecayMode.h: Temprorarily made RemnantData a friend. 2006-10-09 Leif Lönnblad * EventRecord/Step.cc, EventRecord/ColourSinglet.cc, EventRecord/ColourLine.icc: Now uses Particle::hasColourLine() to check if particle is connected to a colour line. * EventRecord/Particle.h: Added virtual hasColourLine() and hasAntiColourLine() to check if a given colour line is present. These are now also used instead of 'colourLine() == liné constructs. * EventRecord/ColourBase.h: Added virtual hasColourLine() and hasAntiColourLine() to check if a given colour line is present. * EventRecord/MultiColour.*: Added sub-class of ColourBase to be used by RemnantParticle and other Particle classes with more complicated colour structure which may be connected by several (anti-) colour lines. 2006-10-07 Leif Lönnblad * EventRecord/RemnantParticle.*, PDT/RemnantDecayer.*, PDT/RemnantData.*: Started adding RemnantData and RemnantDecayer classes which will be used by the Remnant particle class. 2006-10-06 Leif Lönnblad * LesHouches/LesHouchesEventHandler.*: Ticket #58. Set new LuminosityFunction in the initialization to be able to report on energies of incoming beams. If a LuminosityFucntion has already been set it will be disregarded (as it in principle has been previously). * Handlers/LuminosityFunction.*: Ticket #58. Added arguments to default constructor to set beam energies. To be used by LesHouchesEventHandler. * Handlers/EventHandler.h: Ticket #58. Made set function lumiFn protected to be used by LesHouchesEventHandler. 2006-10-04 Leif Lönnblad * Handlers/EventHandler.cc: Added consistencyCheck function which checks charge and energy-momentum conservation. Also added interfaces ConsistencyLevel and ConsistencyEpsilon to controll the check. 2006-10-04 Nils Lavesson * Utilities/Selector.icc: Fixed a bug in swap 2006-10-04 Leif Lönnblad * acinclude.m4: Fixed output from AC_SEARCH_CLHEP about which environments were set to avoid confusion. * Handlers/ClusterCollapser.cc: fixed signed/unsigned warning. 2006-10-03 Leif Lönnblad * EventRecord/Step.cc, EventRecord/Particle.*: Added arguments to the colourNeighbour(bool) and antiColourNeighbour() functions in Particle. They now also require an iterator range in which the (anti-) colour neighbour is searched for. (Previously the neighbor was only searched for in the particles birthStep(). * Handlers/ClusterCollapser.cc: Don't give up so easily if no compensating particles was found in the standard way. Try several combinations. * *** GLOBAL ***: Merged in relevant changes from the RELEASE_BRANCH_1_0. 2006-09-28 Leif Lönnblad * Handlers/SimpleFlavour.cc: Fixed bug in meson codes. * PDT/QuarksToHadronsDecayer.cc: Fixed bug giving infinite loop in getN() if too little energy available. Instead return minN(). 2006-09-26 Leif Lönnblad * Handlers/ClusterCollapser.cc: Fixed bug in momentum reshuffling when there was only one particle to shuffle with. * MatrixElement/MENCDIS.*: Added MENCDIS class to handle neutral-current DIS matrix elements. Not yet usable. 2006-09-26 Leif Lönnblad * Analysis/HistogramFactory.h, Analysis/Axis.h: Minor documentation changes. * MatrixElement/Tree2toNDiagram.h: The documentation was just plain wrong... 2006-09-21 Peter Richardson * Helicity/SpinInfo.h (Repository): change to order of static and const to fix gcc3.2.3 warning 2006-09-18 David Grellscheid * src/Makefile.am: fix for #43, CLHEP now added to RPATH 2006-09-15 David Grellscheid * configure.ac: added -W to default warning level * *** GLOBAL ***: fixed remaining -W warnings (mostly unused function arguments and some copy constructors that needed the base classes initialized) 2006-09-14 Leif Lönnblad * Repository/Repository.cc, Persistency/PersistentIStream.cc: Fixed iterators outside bounds found by David. 2006-09-11 Leif Lönnblad * Utilities/Throw.h, StandardModel/StandardModelBase.h, MatrixElement/ME2to2QCD.h, MatrixElement/ME2to2Base.h, MatrixElement/Amplitude.h, Interface/Switch.h, Interface/Parameter.h, Interface/ParVector.h, Helicity/SpinInfo.h, Handlers/XComb.h, Handlers/LastXCombInfo.h, Doc/refman.h.in, CLHEPWrap/HepMCTraits.h, CLHEPWrap/HepMCConverter.h, Analysis/VariAxis.h, Analysis/Tree.h, acinclude.m4, README: Updated documentation. Mainly to avoid warnings with Doxygen v 1.4.6. 2006-09-11 David Grellscheid * Helicity/*.h : Removed library() lines for non-module classes 2006-09-07 Leif Lönnblad * Utilities/UtilityBase.*: Added boostToCM(), getBoostToCM() and getBoostFromCM() taking Triplet arguments. * EventRecord/ParticleTraits.h: Added partial specialization for pointer to anything. 2006-09-06 Leif Lönnblad * Handlers/Makefile.am: Removed FixedCMSLuminosity from the main library, since this class is now in a separate module. * Handlers/ClusterCollapser.h: Removed the library() function from the ClassTraits, since this class is included in the main library. 2006-09-06 David Grellscheid * LesHouches/MadGraphReader.cc, Handlers/SimpleFlavour.h: fixes for compile warnings 2006-09-05 Leif Lönnblad * acinclude.m4, configure.ac, */Makefile.am, Config/Makefile.aminclude: The libtool -version-info numbers are now controlled from the configure.ac. Also added an include file with common targets for the Makefiles. 2006-09-04 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc: Fixed bug when compensating for underestimated maximum. * PDF/LHAPDF.cc: Changing setting of nset so that two LHAPDF objects which use the same set will get the same nset. This avoids unnecessary and time consuming reinitialization. * LesHouches/LesHouchesReader.cc: When creating LHAPDF pdf to get the generated pdf values, make sure the values are frozen outside the x,Q2 limits to avoid problems if reweighting is requested.. * LesHouches/LesHouchesFileReader.cc: Fixed setting of XPDWUP to zero for each event. * PDF/LHAPDF.cc: Fixed units of Q2Min and Q2Max in persistent I/O. 2006-09-03 Leif Lönnblad * Repository/EventGenerator.cc: Fixed bug when writing out progrss with tic() function. * PDF/PartonExtractor.cc: Fixed bug in constructRemnants() functions introduced when changing the boosts (se 2006-09-01). * LesHouches/MadGraphReader.*: I think MadGraph uses XMAXUP and XWGTUP wrongly. Now increase both by a suitable factor to make the cross section add up the way I think it should. * LesHouches/LesHouchesReader.*: Modified the setup of statistics in case of several processes in one reader. Consequently also modified the increaseMaxXSec() function. Still not sure this will do exactly the right thing. * LesHouches/LesHouchesFileReader.cc: Now sets weighting strategy depending on the standard IDWTUP variable. * Config/Makefile.aminclude: Added include file to Makefile.am's to simplify recompiling certain files with debugging, but without optimization. 2006-09-01 Leif Lönnblad * src/ThePEGDefaults.in: Added /LesHouches directory with a half built EventGenerator with a LesHouchesEventHandler. * src/TestLHAPDF.h, Utilities/UtilityBase.h, PDF/LHAPDF.h, LesHouches/LesHouchesReader.h: Fixed some documentation bugs. * PDF/PartonExtractor.cc: When boosting the hard sub-system to transfer a small pt-kick from the remnants, an unphysical theta-rotation in case the hard subsystem had rapidity close to zero. This is due to a problem with the Utilities::transformToMomentum function. PartonExtractor now no longer use the transformToMomentum function. Although transformToMomentum correctly does what it claims to do, it should probably not be used, and it will be removed in the future. * Utilities/UtilityBase.tcc: Using the rotations returned from the transform to/from CMS functions could before introduce random phi-rotations when the vector to be rotated to/from the z-axis was already along the z-axis but lack of precision gave a random phi-angle. This has now been fixed. 2006-08-30 Leif Lönnblad * src/Makefile.am: Make sure the ../lib/ThePEGDefaults.rpo link is touched so that other packaged are remade if needed. 2006-08-29 Leif Lönnblad * Handlers/FixedCMSLuminosity.*, Handlers/LuminosityFunction.*: To facilitate the implementation of HEPML steering in RivetGun the base class now handle the setting of individual (maximum) beam energies and is able to produce the corresponing beams. This makes the FixedCMSLuminosity superfluous and will be completely soon removed. * Interface/Switch.cc: Fixed "set" method so that giving the name of the switch option works. Also "true" and "false" are allowed as synonyms for 1 and 0. * LesHouches/MadGraphReader.cc, LesHouches/LesHouchesFileReader.cc: LesHouchesFileReader now implements open() and doReadEvent() to check if the file is a standard Les Houches event file format in which case it is read accordingly. MadGraphReader is changed accordingly. This is not yet tested. * LesHouches/LesHouches.*: Added resize functions. * Utilities/StringUtils.*: Added function xmlAttributes to scan a string for attributes of a given tag assuming we have valid XML code in the string. 2006-08-28 Leif Lönnblad * PDF/LHAPDF.*, PDF/LHAIndex.txt: Index file now also includes (a very limited set of) PDFLIB numbers. Added interface to set according to PDFLIB numbers. Also removed the variable giving the LHAGlue number - the corresponding parameter interface now uses set/get methods instead. * LesHouches/MadGraphReader.cc: Now uses the LHAGlue numbering to specify the PDFs used. Not all sets are implemented though. * LesHouches/LesHouchesReader.*: Changed init procedure. More checks are done in doinit() rather than initialize(). doinit() now optionally rund initPDFs() which created LHAPDF object corresponding to the heprup.PDFSUP and heprup.PDFGUP numbers. 2006-08-24 Leif Lönnblad * Utilities/UtilityBase.tcc: Fixed bug in getBoostFromCM() where the phi-rotation was erroneously performed before the theta-rotation. 2006-08-23 Leif Lönnblad * src/runEventLoop.cc, src/Makefile.am, CLHEPWrap/Makefile.am, CLHEPWrap/GenEventConverter.*: The new HepMCConverter class now seems to work both with HepMC in CLHEP and the new stand-alone HepMC version 2. The runEventLoop.cc example now uses the stand-alone HepMC. The old GenEventConverter class is now permanently removed. 2006-08-16 Leif Lönnblad * Repository/EventGenerator.cc, Interface/Interfaced.h: Fixed preinitRegister() function so that theGenerator is properly set. This required EventGenerator to be a friend of Interfaced. 2006-08-16 Peter Richardson * Cuts/V2LeptonsCut.cc (Repository): change so that maxS() returns a large value if not a lepton pair rather than zero 2006-08-15 Leif Lönnblad * Repository/EventGenerator.cc: Fixed getParticleData() so that it works also if theQuickParticles has not been initialized. * Interface/Reference.cc, Interface/RefVector.cc: Changed exec methods so that set and insert now looks for the object to be set/inserted in the current EventGenerator rather than in the Repository in the pre-init phase of the initialization of an EventGenerator. * Repository/EventGenerator.cc: Properly register decay modes in the current EventGenerator in constructDecayMode(). 2006-08-14 Leif Lönnblad * Analysis/Tree.h, Analysis/FactoryBase.cc: Fixed segfault when creating two histograms with the same path. Now throws an exception instead (should be made cleaner in the future). 2006-08-10 Leif Lönnblad * PDF/LHAPDF.cc: Now calls setMinMax() in the doinit() function. Also clears the stream in openLHAIndex() if a call to open fails. 2006-08-09 Leif Lönnblad * Repository/Repository.cc, Repository/EventGenerator.cc: Moved the forced update() of all objects from Repository::makeRun() to EventGenerator::setup() to make sure that all objects are available in the EventGenerator when thay are updated. Before the MatcherBase objects were not properly initialized. 2006-08-09 Pete's account * Repository/Repository.cc (Repository): fix to ensure Matchers correctly setup 2006-08-09 Leif Lönnblad * Cuts/Cuts.cc: Ticket #48: Fixed bug where maxS always returned zero. 2006-08-08 Peter Richardson * Cuts/Cuts.cc: Fix to correctly used the MultiCuts objects when testing if a phase-space point passes the cuts. 2006-08-07 Leif Lönnblad * PDF/PDFBase.xh: PDFRange exception class now inherits from Exception rather than from InterfaceException. + * PDF/LHAPDF.*: It is now possible to set the PDF by number rather than by file name and member. Using the index file it is now also possible to check x and Q2 ranges before calling the LHAPDF library, so that we can use our own strategy. * PDF/LHAIndex.txt: Added index file to correlate PDF numbers, members and file names in LHAPDF. Hopefully this will be obsoleted in future versions of LHAPDF. * LesHouches/MadGraphReader.*: Modified slightly the creation of cut objects in the intialization. * LesHouches/LesHouchesReader.cc: Fixed check if theCuts was set to avoid segmentation fault. * LesHouches/LesHouchesReader.*: Started adding functions to create PDFin objects in the initialization (variable doInitPFDs, functions preInitialize() and initPDFs() and doini()). * LesHouches/MadGraphReader.cc, LesHouches/LesHouchesReader.cc, LesHouches/LesHouchesEventHandler.cc, LesHouches/LesHouches.*: Fixed typo NRUP -> NPRUP * acinclude.m4: Changed AC_FC_LIBRARY_LDFLAGS to AC_F77_LIBRARY_LDFLAGS and FCLIBS to FLIBS since the former had problems with linking the 'main' function several times if gfortran was installed. 2006-07-28 Leif Lönnblad * LesHouches/MadGraphReader.*: Introduced InitCuts Switch. If set the MadGraphReader will be pre-initialized and will extract cut information from the event file and construct and add the relevant cuts objects. Not tested. * LesHouches/LesHouchesEventHandler.cc: Now uses Throw class for some exceptions. * Repository/EventGenerator.cc: Modified printout of exception if something was thrown in the initialization. * Repository/EventGenerator.*: Added preprintRegister() to introduce new objects in the pre-init phase (similar to preinitCreate(), but the calling function creates the object itself. * Utilities/Throw.h, Utilities/Makefile.am, Utilities/Exception.h: Added Throw class to facilitate the thowing of Exception objects. An embryo of this class was before in Utilities/Exception.h but has been removed. * src/Makefile.am: Added valgrind target to do memory checks. 2006-07-27 Leif Lönnblad * java/RunFrame.java: Now uses '--tics' option for runThePEG. * src/runThePEG.cc: Added '--seed' and '--tics' options which eventually will replace the '-seed' and '-tics' ones. * PDT/MatcherBase.h: Made pointers in sets of ParticleData and ParticleMatcher transient to avoid circular dependence on reference counted pointers. * PDF/LeptonLeptonRemnant.h: Made pointer to photon object transient to avoid possible circular dependence on reference counted pointers. * Handlers/XComb.h: Made pointers to PartonExtractor and Cuts transient to avoid circular dependence on reference counted pointers. * Handlers/StandardXComb.h: Made pointer to SubProcessHandler transient to avoid circular dependence on reference counted pointers. 2006-07-26 Leif Lönnblad * Repository/EventGenerator.h: Changed the behavior of the doinit() function so that objects which returns true from their preInitialize() function are initialized first in a special pre-initialization phase. In this phase the initialized objects may use some special preinit functions to add new objects (using eg. preinitCreate()) to the run, or manipulate the interfaces of the ones which are there (using eg. preinitInterface()). Note that this functionality has not been proprtly tested yet - it does compile though... * PDT/ParticleData.h, PDT/DecayMode.h: EventGenerator is now a friend. * Interface/InterfacedBase.h: EventGenerator is now a friend. Added member function state() which returns the initialization state of an object. Added virtual member function preInitialize() which by default returns false. If it returns true for an object this will be handled first in the initialization of an Event handler in a special pre-initialization step. In this case the object may use the special 'preinit' functions in the EventGenerator when executing its doinit() function. 2006-07-25 Leif Lönnblad * CLHEPWrap/HepMCConverter.*, CLHEPWrap/HepMCTraits.h, CLHEPWrap/Makefile.am, src/runEventLoop.cc, src/Makefile.am: Rewrote the GenEventConverter to be completely templated and independent on which HepMC version is used. The new class is called HepMCConverter and uses the HepMCTraits class for all interactions with the HepMC classes. Different flavours of HepMC may need to specialize the HepMCTraits class in different ways. By inheriting from HepMCTraitsBase you will automatically get the interface to the HepMC version in CLHEP. In src/runEventLoop.cc (which is now included in the distribution) there is an example of how to use HepMCConverter. runPartial.cc is no longer included in the distribution. * PDF/LHAPDF.*: the interface to the LHAPDF library can now be compiled, set up and run, and seems to give correct results. * src/Makefile.am: Fixed minor bug in USELHAPDF conditional. * Config/Makefile.am: config.h is no longer included in the distribution. * include/Makefile.am: Config directory is no longer linked, instead it is creates a proper directory and links the individual header files. This is because config.h needs to be linked from the build directory while the others are linked from the source directory. This probably need a better solution. * Config/std.h: Now includes and imports the stringstream classes to the ThePEG namespace. * Utilities/sstream.*, Utilities/Timer.cc, Utilities/Makefile.am, Utilities/Exception.h, Utilities/Debug.cc, configure.ac, MatrixElement/ColourLines.cc, Persistency/PersistentIStream.cc: Removed sstream.h wrapper around the old libg++ strstream header. ThePEG now assumes that all supported compilers has a compliant standard library with a standard header. 2006-07-25 Peter Richardson * EventRecord/Step.cc (Repository): Added check to prevent double attachment of incoming partons to hadrons and some tests to prevent illegal boosts in CLHEP 2006-07-24 Leif Lönnblad * src/TestLHAPDF.*: Added Main class and setup file to test the LHAPDF classes. * src/ThePEGDefaults.in: Added /LHAPDF directory with token LHAPDF object to get doxygen output on the interfaces (this should work even if the LHAPDF library is not installed). * src/Makefile.am: Added TestLHAPDF test to the check and install-check targets, but made it conditional on USELHAPDF. * PDF/LHAPDF.cc: Fixed bugs: xfx() and xfvx() had the wrong signatures and didn't override the base class virtual functions; Forgot to set lastX and lastQ2 to avoid unnecessary calls to the LHAPDF library. * configure.ac: Added USELHAPDF flag for automake generation of Makefiles. * PDF/LHAPDF.cc: Removed double implementation of dummy function evolvepdfm_(). * acinclude.m4: Ticket #45. Fixed bug where temporary LIBS variable for checking LHAPDF was not reset if check failed. * configure.ac, acinclude.m4: Added test to see if the LHAPDF library is installed. If so the ThePEG_HAS_LHAPDF is set and both libLHAPDF.so and the fortran runtime libraries are included in the linking. * src/TestLHAPDF.in: File to test LHAPDF class. Not used in 'make check' yet. * PDF/LHAPDF.*, PDF/Makefile.am: Added class to interface the LHAPDF library. Compiles, and the objects can be set up, but have not tried to run it. DO NOT USE YET. 2006-07-22 Leif Lönnblad * Handlers/SubProcessHandler.h: Declared clone functions non-inlined since they weren't. * src/setupThePEG.cc: Added --exitonerror option. Also added '--init' and '--java' options which eventually will replace the '-init' and '-java' arguments. * src/Makefile.am: Now uses --exitonerror argument for setupThePEG. And long '--init' argument when initializing the repository. * java/SetupThePEG.java: Now uses long '--java' argument when startin setupThePEG. * Repository/Repository.*: Added static variable accessible from exitOnError() which, if non-zero, will call exit with an error code if any error was encountered during read(). Also added a command 'EXITONERROR' which sets exitOnError() to one. * ACDC/ACDCGen.icc: Fixed bug where allocated primary ACDCGenCell objects were not deleted in destructor. * Persistency/PersistentIStream.*: Fixed bug where InputDescription objects created when reading were not deleted in the destructor. * StandardModel/StandardModelBase.*: Added access function to get a pointer to the CKMBase object. 2006-07-21 David Grellscheid * Analysis/Makefile.am: added VariAxis.h to LWHHEADERS 2006-07-20 Leif Lönnblad * Analysis/VariAxis.h, Analysis/HistogramFactory.h, Analysis/Histogram1D.h, Analysis/FactoryBase.*, Analysis/AIHistogramFactory.h: Added a VarAxis class in LWH to allow Histogram1D to have variable sized bins. This seems to work, although the resulting AIDA XML file is not interpreted properly by JAS3. 2006-07-19 Leif Lönnblad * Handlers/StandardXComb.cc: Fixed bug where the rapidity reported to eg. the Cuts object was reversed. Also fixed bug where the "post-cut" checking of the SubProcess was made in the collision frame rather than in the SubProcess cm frame. * MatrixElement/ME2to2Base.cc: The phase space generation now takes into account possible rapidity cuts. Compiles and runs but should be tested more. 2006-07-19 David Grellscheid * configure.ac: more automated OS X variable detection didn't work, back to previous version 2006-06-30 Leif Lönnblad * StandardModel/O1AlphaS.*: flavourThresholds() now returns an ordered set of scales. New interface FreezeScale controlls below which scale the alpha_S is frozed to avoid divergencies and negative coupling. LambdaQCDs() now returns Lambda_0 in the zeroth place. The Interface LambdaQCD is now only limited from below. * StandardModel/AlphaSBase.icc: The LambdaQCD(unsigned int) now also returns Lambda_0 for the case of no active flavours. 2006-06-24 David Grellscheid * Repository/EventGenerator.cc: ieve added to copy constructor; undefined value was written into the repository 2006-06-15 David Grellscheid * Repository/EventGenerator.{h,cc}: Added signal handling functionality to call finalize() when SIGINT, SIGHUP or SIGTERM are received. * configure.ac: more automated OS X variable detection 2006-06-14 Leif Lönnblad * StandardModel/StandardCKM.cc: Fixed wrong member variable in theta_23 interface. * Repository/EventGenerator.cc, Analysis/Tree.h, Analysis/FactoryBase.h, Analysis/Axis.h: Fixed doxygen comments. 2006-06-13 Leif Lönnblad * Analysis/Tree.h, Analysis/Histogram1D.h: Modified flat output to have title on the end within quotes in the histogram header and chaged the output order of the points to "bin-mean-x", "y", "delta-y", "number of entries". * include/Makefile.am: All needed subdirectory links are now separate targets. * Handlers/AnalysisHandler.*: Added function to check if the EventGenerator has a histogram factory. * Analysis/FactoryBase.*: Added member function to create histogram with separate title. 2006-06-12 Peter Richardson * CLHEPWrap/LorentzRotation.icc: fix to setRotateZ which was rotating about y but wasn't used anywhere * Handlers/StandardEventHandler.h change to get the right Interfaces in the Doxygen documentation 2006-06-11 Leif Lönnblad * java/Makefile.am: Changed the name 'thepeg.sh' to 'thepeg' for the script which is catually installed, while keeping 'thepeg.sh' as name of the script in the local directory. * Repository/EventGenerator.cc: Now correctly includes FactoryBase.h instead of old HistogramFactory.h 2006-06-07 David Grellscheid * java/Makefile.am: Changed name 'thepeg' to 'thepeg.sh' to avoid capitalization clash on OS X. With this, ThePEG works on OS X. 2006-06-07 Leif Lönnblad * Analysis/FactoryBase.*: Added function cd() to change directory in the underlying AIDA::ITree. * Analysis/LWHFactory.*, Repository/EventGenerator.*, Handlers/AnalysisHandler.*, Analysis/FactoryBase.*: Changed the name from HistogramFactory to Factory base to avoid name clash with updated LWH. 2006-06-05 Leif Lönnblad * PDF/PartonExtractor.*: The constructRemnants() function now throws a veto if remnants could not be created. * Utilities/CFileLineReader.h: Added function to enable re-reading of the current line. * LesHouches/MadGraphReader.cc: Fixed the workaround where MadGraph for some reason includes empty lines in the middle of the header block. Also fixed bug when MadGraph events have been unweighted and we before read the wrong number of events. Sometimes MadGraph exchanges the colour and anti-colour lines. Introduced hack to try to notice this and fix it. * LesHouches/LesHouchesEventHandler.cc: Renamed interface LesHoushesReaders -> LesHouchesReaders 2006-06-03 Leif Lönnblad * Analysis/HistFactory.h: Fixed histogram name/title confusion. 2006-06-02 Leif Lönnblad * Handlers/AnalysisHandler.*: Added function to normalize histograms according to the collected cross section statistics. * Analysis (LWH classes): Fixed some bugs and improved output files. 2006-06-01 Leif Lönnblad * Handlers/AnalysisHandler.: Added utility function to access the HistogramFactory in the current run. * Repository/EventGenerator.*: The EventGenerator may now have a HistogramFactory associated with it. * configure.ac, Makefile.am, include/Makefile.am, lib/Makefile.am: Added the Analysis directory. * Analysis: Added Analysis directory with the classes HistogramFactory, an abstract base class for handling histograms using the AIDA interface, and LWHFactory a concrete class interfacing the light-weight histogram package LWH which implements a small part of the AIDA interface. LWH is also included in this directory. 2006-05-22 Leif Lönnblad * EventRecord/Step.*: Added optional boolean argument for checking the consistency of the parents in the Step in templated addDecayProducts(Iterator firstParent, Iterator lastParent, tPPtr child, bool checkfinal). Default is true, which is also the previous behavior. 2006-05-18 Leif Lönnblad * Repository/StandardRandom.cc, Repository/RandomGenerator.cc: Make sure the cache is flushed when the random generator is initialized or when a new seed is given. 2006-05-17 Leif Lönnblad * EventRecord/Step.cc: Fixed addIntermediate(s) functions to remove the given particle from the list of final state ones if present. 2006-05-16 Leif Lönnblad * PDF/PartonExtractor.*: Fixed bug by adding argument to internal construct method to determine whether the produced remnants need boosting. * PDF/RemnantHandler.*, PDF/BaryonRemnants.*: Changed name from createRemnants to boostRemnants, since that is what the method actually does. 2006-05-12 David Grellscheid * Interface/Parameter.tcc: Added default initialization for template Type. * Interface/InterfacedBase.h, Interface/Interfaced.{h,icc}: Removed Interface functions that only call InterfacedBase. Added documentation across to InterfacedBase. * Interface/Interfaced.{h,icc}: Added setGenerator() protected function. This is required for the automatic Decayer generator in BSM Herwig++. 2006-04-26 Leif Lönnblad * */*.cc: Ranked interfaces and made minor improvement of ClassDocumentation objects for demonstration at DIS06. * java/Reference.java, java/RefVector.java, java/ObjectFrame.java: Improved look-and-feel for reference interfaces. 2006-03-09 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc: Fixed skipEvents() for negative weights (Ticket #31). 2006-03-09 David Grellscheid * Utilities/Math.icc, Repository/EventGenerator.h: Fixes for gcc-4.1.0 * LesHouches/LesHouchesEventHandler.cc: Fixed unitnegweight problem (Ticket #30) 2006-03-08 David Grellscheid * LesHouches/LesHouchesReader.cc, LesHouchesEventHandler.cc: Fixed meanskip value for cases where all events should be read from the file, and redundant double connection between parent/child. 2006-02-22 Peter Richardson * Helicity/LorentzTensor.h (Repository): added trace member 2006-02-20 Peter Richardson * MatrixElement/ME2to2Base.icc (Repository): change so that inheriting classes can set phi, uHat and tHat. 2006-02-20 Peter Richardson * StandardModel/SimpleAlphaEM.cc (Repository): change so that for small q2 alpha(0) is returned rather than 0. 2006-02-16 Leif Lönnblad * java/SetupThePEG.java, java/ObjectFrame.java: Modified to show interfaces better in documentation. * Doc/fixinterfaces.pl.in, LesHouches/MadGraphReader.cc, Cuts/OneCutBase.h, Cuts/SimpleDISCut.cc, Cuts/SimpleKTCut.h, src/ThePEGDefaults.in, LesHouches/MadGraphOneCut.h: Fixed doxygen documentation of interfaces. * MatrixElement/Makefile.am: Cleaned up mixed dependencies. 2006-02-15 Leif Lönnblad * *** GLOBAL ***: Joined in changes from the cuts-devel branch. * *** GLOBAL ***: Joined in changes from the Java-devel branch. * Interface/InterfacedBase.h, Interface/Interfaced.h: Removed the 'pure abstract' qualifiers on the doupdate, doinit, etc. functions. * lib/ThePEG.el: Changed ThePEF-class-files so that the standard InterfacedBase virtual functions (doupdate, doinit, ...) are not included from start. They can be added afterwards with ThePEG-interfaced-decl and ThePEG-interfaced-impl functions. * PDT/ParticleData.cc: Fixed bug in stable(bool) function. 2006-02-09 Leif Lönnblad * lib/ThePEG.el, Utilities/ClassTraits.h: Documented better the possibility to list several dynamic libraries in the ClassTraits::library() function. 2006-02-09 Leif Lönnblad * PDF/BaryonRemnants.*: Implemented defaultInit() function to create default ZGenerator, PtGenerator and FlavourGenerator objects. * LesHouches/LesHouchesReader.*: Still not quite ready with the scanPDF() function. * Interface/Interfaced.*: Added a defaultInit() function and a corresponding Command interface. defaultInit() can be implemented by sub-classes to automatically create objects for mandatory references. Also introduced reporeg() and setDefaultReference() functions to help sub-classes with this. 2006-02-08 Leif Lönnblad * Utilities/CFileLineReader.*: Fixed bug in opening plain files (they were never assigned to a file handle). Also fixed bug in skip() function (didn't actually skip the character found). * LesHouches/MadGraphReader.*: Fixed some bugs when reading MadGraph version 3 files. * LesHouches/LesHouchesReader.*: Introduced command interface to automatically deduce which PDFs was used for the generation. Not quite working yet (still need to fix remnant handlers). 2006-02-07 Leif Lönnblad * LesHouches/LesHouchesEventHandler.cc, Handlers/StandardEventHandler.cc: Fixed so that theLastXComb is always set for the CKKWHandler(). 2006-02-06 Leif Lönnblad * src/runThePEG.cc, Repository/EventGenerator.*, EventRecord/Particle.cc: Davids bug fixes to the setting of life lengths introduced the usage of UseRandom when it wasn't set. I had to fix things in the persistentOutput function in Particle and let the EventGenerator class be responsible for loading Main classes rather than the runThePEG program itself. * Repository/EventGenerator.cc: Removed the upper limit for MaxErrors altogether. Also did the same for other parameters. 2006-02-05 Leif Lönnblad * LesHouches/MadGraphReader.*: Finished functions for scanning cuts. It now seems to work OK. * LesHouches/MadGraphOneCut.cc: The CutType interface is no longer read-only. * Cuts/Cuts.h: Added public functions to add one- two and multi-cut objects * LesHouches/LesHouchesReader.*: The Cuts interface is now nullable. * Repository/BaseRepository.*: Fixed bug in Rename() to avoid more than one object with the same name. Also renamed the function GetObjectsReferingTo to GetObjectsReferringTo. 2006-02-03 Leif Lönnblad * LesHouches/MadGraphOneCut.*, LesHouches/MadGraphTwoCut.*: New classes to be used by MadGraphReader to implement cuts. * Cuts/OneCutBase.*: Added minimum of maximum functions. * LesHouches/MadGraphReader.cc: Added command interface extracting cuts from MadGraph version 3 event files. 2006-02-02 Leif Lönnblad * LesHouches/MadGraphReader.cc: Preparing for extracting cuts from MadGraph version 3 event files. * MatrixElement/Tree2toNDiagram.cc: Modified according to the changes in XComb. * MatrixElement/ReweightMinPT.cc: Modified according to the changes in XComb. * LesHouches/LesHouchesReader.*, LesHouches/LesHouchesEventHandler.*: Modified according to the changes in XComb. * Handlers/StandardXComb.*, Handlers/XComb.*, Handlers/LastXCombInfo.*: Instead of just having access to the incoming and outgoing partons in the generated sub-process XComb now have access to the full SubProcess object if it has been provided. LastXCombInfo and Standard XComb has been modified accordingly. * EventRecord/Collision.cc: Adding a SubProcess, now sets its pointer to this collision if none was provided before. 2006-02-01 Leif Lönnblad * MatrixElement/ReweightBase.*, MatrixElement/ReweightConstant.*, MatrixElement/ReweightMinPT.*: Reweighting now only use information in the LastXCombInfo. All other functions for setting kinematics has been removed. ReweightMinPT was added to the makefile and has now a scale parameter. * MatrixElement/MEBase.*: Fixed proper initialization of LastXCombInfo in ctor. Also introduced functions for returning alpha_S and alpha_EM. * LesHouches/LesHouchesReader.*: Now inherits from LastXCombInfo, and information to (p)reweighting is conveyed with the XComb object. * Handlers/StandardXComb.*: Changes from XComb. Initialization of mePartons still doesn't work... * Handlers/XComb.*, Handlers/LastXCombInfo.*: XComb now has information of the last alpha_s and alpha_ME. Also moved the mePartons() here from StandardXComb and added corresponding initialization function. * Handlers/CascadeHandler.cc: Fixed proper initialization of LastXCombInfo in ctor. * LesHouches/LesHouchesReader.*, Handlers/XComb.*, Handlers/SubProcessHandler.*, Handlers/StandardXComb.*, Handlers/StandardEventHandler.*, Handlers/LastXCombInfo.*, Handlers/EventHandler.*, Handlers/CascadeHandler.*: Started implementing CKKW rewighting infrastructure. Not quite working yet. 2006-01-31 David Grellscheid * Repository/EventGenerator.cc: Increased upper limit for MaxErrors to 100000. * PDT/ParticleData.cc, EventRecord/Particle.cc: Bugfixes to correct the setting of life lengths. Displaced vertices now work. 2006-01-31 Leif Lönnblad * Repository/EventGenerator.cc): Indicated that the Path parameter corresponds to a directory. * LesHouches/LesHouchesFileReader.cc: Indicated that the FileName parameter corresponds to a file. * Interface/Parameter.*: Added option to indicate that a string parameter corresponds to a file or a directory. 2006-01-29 Leif Lönnblad * Repository/EventGenerator.cc: Modified format of optional printout of event number. * Repository/Repository.*: Added command to save a run to a specific file. 2006-01-28 Leif Lönnblad * Repository/Repository.*: Added command to remove a run. 2006-01-27 Leif Lönnblad * src/runThePEG.cc, Repository/MultiEventGenerator.*, Repository/EventGenerator.*: Added run-time option to write out event number at suitable intervals. Also added possibility to read a run file from standard input and to execute runThePEG remotely with ssh. 2006-01-21 Leif Lönnblad * Repository/EventGenerator.*: Added command interfaces to make and save event generator runs. * Repository/Repository.cc: Fixed bug in makerun command. * Repository/BaseRepository.*: Added commands to describe classes and to get base classes. * configure.ac, acinclude.m4: Cleaned up configure script. 2006-01-20 Leif Lönnblad * Makefile.am, configure.ac: Fixed checks and conditional compilation for the java GUI. 2006-01-17 Leif Lönnblad * lib/ThePEG.el: Preliminary fix of the ParVector emacs macro. It now works in a simple case, but it probably needs more testing. ... and I did some more testing and slight modifications. It should now be stable. 2006-01-16 Leif Lönnblad * Repository/BaseRepository.cc: Added commands to append libraries. * Utilities/DynamicLoader.*, Persistency/*: The persistent streams now remembers which library paths were added to search for dynamic libraries. * PDT/DecayMode.cc: Mad the Decayer interface non-nullable. 2006-01-15 Leif Lönnblad * Repository/BaseRepository.cc: Added "check" command and fixed "rcp" command. 2006-01-13 Leif Lönnblad * PDT/ParticleData.*, PDT/ConstituentParticleData.*, PDF/BeamParticleData.cc: Added ranking of interfaces and fixed the limits of parameters. * Interface/Parameter.*: Fixed output from fulldescribe to handle unlimited parameters reasonably. * Repository/BaseRepository.*, Interface/InterfaceBase.*: Added facility for ranking interfaces. This is used to sort interfaces for UIs. * Utilities/DescriptionList.h: Added possibility access map of all classes. * Utilities/ClassDescription.*: Added possibility to ask a CLassDescription whether it is abstract or not. * Repository/BaseRepository.cc: Added lsclass command to list concrete (sub)classes. 2006-01-12 Leif Lönnblad * MatrixElement/ME2to2QCD.cc: Fixed bug where jacobian was applied twice for 2->2 QCD MEs resulting in completely wrong cross sections. 2006-01-11 Leif Lönnblad * MatrixElement/ME2to2QCD.cc: Fixed serious bug where the jacobian() was applied twice for QCD matrix elements giving completely wrong results. 2006-01-08 Leif Lönnblad * PDT/ParticleData.cc: Fixed typos in documentation. * Interface/Switch.tcc: Fixed throwing of exception if calling get() for a read-only switch. Moved the exception to the set() function, where it belongs. 2006-01-06 Leif Lönnblad * Interface/Switch.*, Interface/Reference.*, Interface/RefVector.*: Implemented fullDescription functions. 2006-01-05 Leif Lönnblad * Repository/RandomGenerator.cc: Fixed error when compiling with gcc-3.3.1 complaining about different types in call to templated min function in setSize(). 2006-01-01 Leif Lönnblad * lib/ThePEG.el: Fixed bug when creating .fh file for classes not in the ThePEG namespace. * src/setupThePEG.install: added VERSION="" to avoid problems when VERSION is set during 'make distcheck'. 2005-12-21 Leif Lönnblad * Utilities/Exception.h: Added new Throw class to encapsulate the throwing of exceptions. * MatrixElement/ME2to2Base.cc: Temporary changes trying to figure out what goes wrong here. * Handlers/StandardXComb.cc: Temporarily removed unnecessary call to MEBase::generateKinematics(). * Handlers/ACDCSampler.cc: Added more info to log file in dofinish(). 2005-12-12 David Grellscheid * PDT/DecayMode.h: rebind() is not an inline! 2005-12-01 Leif Lönnblad * EventRecord/Step.h, EventRecord/Particle.h: Fixed the documentation for the colour neighbour methods. Before the documentation had reversed the colour and anti-colour. 2005-11-11 Leif Lönnblad * Utilities/CFileLineReader.icc: Fixed bug in skip(), now also skips the character searched for. * LesHouches/MadGraphReader.cc: Fixed bug in spelling 'Number of Events' when scanning MadGraph file header. 2005-11-07 Leif Lönnblad * Utilities/CFileLineReader.cc: Fixed bug in open function where the filehandle from the std::fopen call was not stored properly (thanks to Simon Plaetzer). 2005-10-14 Leif Lönnblad * *** GLOBAL ***: Replace old KinematicalCuts classes with new Cuts classes. It all compiles, but still problem with the initialization. * Handlers/Two2NCuts.*, Handlers/KinematicalCuts.*, Handlers/KinCutsInit.cc: Removed the old KinematicalCuts classes. 2005-10-10 Leif Lönnblad * EventRecord/TmpTransform.*: Added wrapper class to make safe temporary Lorentz transforms of objects. 2005-10-05 David Grellscheid * acinclude.m4: Fixed #15. Not tested on Mac. 2005-10-04 Leif Lönnblad * src/setupThePEG.cc, src/runThePEG.cc: Added better handling of catching a ThePEG::Exception to avoid double output. 2005-10-04 David Grellscheid * Doc/reformat.pl, Doc/keywords.sed, Doc/h2html.in, Doc/h2html.awk: removed obsolete files * Doc/refman.conf.in: replaced ../../ThePEG with @top_srcdir@ * configure.ac: fixed permissions for Doc/fixincludes.pl. Solves bug #10 * Repository/Repository.cc: Error message if '.in' file can't be found. Fixes bug #3. 2005-10-02 Leif Lönnblad * Cuts/*CutBase.*: Added base classes for cuts on one, two and many particles. 2005-09-29 David Grellscheid * configure.ac: Added configure check for OS X 2005-09-22 David Grellscheid * src/ThePEGDefaults.in, MatrixElement/*: name change of libThePEGMEQCD.so to MEQCD.so to reflect the fact that it is a module 2005-09-21 Leif Lönnblad * Persistency/PersistentOStream.*, Persistency/PersistentIStream.*: Let all exception classes inherit from ThePEG::Exception and added informative (?) errormessages when anything goes wrong. 2005-09-20 Leif Lönnblad * Utilities/ClassTraits.h, lib/ThePEG.el: Modified the comment to the library() function to indicate the possibility to have several libraries. 2005-09-15 David Grellscheid * *** several files ***: Adressed warning messages from "-W -Wno-float-equal -Wcast-qual -Wwrite-strings -Wconversion -Wredundant-decls -Wold-style-cast -Woverloaded-virtual": -- explicitly initialize base class in copy constructor, -- fixed C-style casts 2005-09-13 Peter Richardson * Helicity (Repository): fixes to use isNear rather than equals in Helicity classes to avoid boost problems 2005-09-08 David Grellscheid * src/Makefile.am: Explicitly set ThePEG_INSTALL_PATH, to fix problems with some versions of gcc-3.2. Made temporary directory name in installcheck-local more unique to prevent accidental deletion of pre-existing directory. * Repository/Repository.cc, Repository/BaseRepository.cc: Expanded error messages to mention the class name that has the problem. * PDF/PDFBase.cc: Fixed 'inline' bug. 2005-09-02 Leif Lönnblad * Cuts/Cuts.*: Fixed buggy doxygen comments. 2005-09-03 Leif Lönnblad * lib/ThePEG.el: Added function ThePEG-cond-section to make a region a conditional section for doxygen. * src/runThePEG.cc, PDT/: Removed the last traces of PYDECYDummy. * *** GLOBAL ***: Put all template specializations in conditional doxygen section called TRAITSPECIALIZATIONS. 2005-09-02 Leif Lönnblad * Doc/Makefile.am: Fixed typo in dependencies for refman-html target. * configure.ac: Now uses AC_SEARCH_CLHEP instead of AC_CHECK_CLHEP. * acinclude.m4: Introduces AC_SEARCH_CLHEP and AC_SEARCH_THEPEG macros to replace AC_CHECK_CLHEP and AC_CHECK_THEPEG. The new macros will actively search for valid CLHEP and ThePEG installations in standard places. 2005-09-02 Peter Richardson * Helicity/LorentzRSSpinor.icc: fixed bug in the generalCurrent member 2005-09-01 Leif Lönnblad * PDF/BaryonRemnants.*: Added option to always give di-quark when extracting valence flavour. And fixed a stupid bug... * src/runThePEG.cc, src/runEventLoop.cc: Use new EventGenerator::setSeed() function. * Repository/EventGenerator.*: Removed randomEngine() function. Made random() protected. Introduced setSeed() function. * Repository/CurrentGenerator.*: Remove functions accessing the random generator. * Repository/UseRandom.*, PDT/WidthGenerator.cc, PDT/BreitWignerMass.cc, LesHouches/LesHouchesEventHandler.cc: UseRandom::currentEngine() now returns pointer. * Handlers/ACDCSampler.*: Now completely use UseRandom. * PDF/PartonExtractor.cc, Handlers/KinematicalCuts.cc, EventRecord/ParticleTraits.h, EventRecord/Particle.cc: Removed .one() methods calls and use implicit conversion instead. * CLHEPWrap/LorentzRotation.*: Changed some reference to double arguments to simple doubles. Changed returning _half and _one as const references instead of objects. Also introduced cast operator synonomous to one(). Introduces multiplication operators for Lorentz(5)Vectors. 2005-06-21 Leif Lönnblad * Cuts/Cuts.*: Added Cuts base class to implement the new handling of matrix element cuts. * lib/Makefile.am, configure.ac, Makefile.am: Added Cuts directory. 2005-08-31 Leif Lönnblad * Repository/UseRandom.*: Added access function to the RandomEngine of the current RandomGenerator. * PDT/WidthGenerator.cc, PDT/ParticleData.cc, PDT/BreitWignerMass.cc, PDF/BaryonRemnants.cc, LesHouches/LesHouchesEventHandler.cc: Now use UseRandom everywhere. * Handlers/HandlerBase.*: Changed to use UseRandom instead of gerenator()->random(). * Repository/UseRandom.fh: Added to forward declare UseRandom. * Handlers/ACDCSampler.*: Use pointer to RandomGenerator instead of reference when talking to ACDCGen, which now use UseRandom. * ACDC/*: Preparing to get rid of the specific RandomGenerator object and instead use UseRandom. Specifically use pointers instead of references to a random generator. * acinclude.m4: Added AC_SEACH_PREFIXDIR_FILES to search for files in standard directories. Also added THEPEGLIB variable in AC_CHECK_THEPEG. * lib/Makefile.am: Try to avoid linking non-existing shared library files. 2005-08-30 Leif Lönnblad * Config/std.h: Added specialization for std::less template class to handle type_info pointers properly using type_info::before function. * Utilities/DescriptionList.*: Introduced conditional compilation. The map relating type_info pointers to ClassDescriptionBase objects does not work with dynamic linking under MAC OSX, therefore, if THEPEG_DYNAMIC_TYPE_INFO_BUG is defined, they are now instead indexed by the name() function of the type_info object. 2005-06-26 Leif Lönnblad * Utilities/SimplePhaseSpace.tcc: Fixed bug in angles of three-body phase space (again). 2005-06-17 Leif Lönnblad * configure.ac, Doc/*: Changes to get make distcheck work properly. 2005-06-16 Leif Lönnblad * Makefile.am: Install libtool in the lib directory (used in the Makefile.common). * configure.ac: Included lib/Makefile.common.install in the AC_CONFIG_FILES. * lib/Makefile.*: Now installs a Makefile in the lib directory to be used as a template to build additional ThePEG modules. Also installs a Makefile.commin which is included in that Makfile. 2005-06-15 Leif Lönnblad * acinclude.m4: Corrected the THEPEGDOC path. * LesHouches/MadGraphReader.cc, MatrixElement/ME2to2QCD.h, Helicity/LorentzSpinor.h: Doxygen cosmetics. 2005-06-14 Leif Lönnblad * src/Makefile.am: Always run check-local. 2005-06-12 Leif Lönnblad * src/Makefile.am: Fixes to make distcheck work smoothly. 2005-06-11 Leif Lönnblad * src/Makefile.am: Fixed install, uninstall and installcheck targets. 2005-06-10 Leif Lönnblad * src/Makefile.am: Fixes to make distcheck work properly. Added versioned executables in installation again. * lib/Makefile.am: Fix up sym-linking of shared libraries. * Utilities/SimplePhaseSpace.tcc: Fixed bug in angles of three-body phase space. * Config/Makefile.am: Cosmetics. 2005-06-09 Leif Lönnblad * Utilities/StringUtils.icc: Introduced simple functions for manipulating filenames. * Persistency/PersistentOStream.*, Utilities/DynamicLoader.*: Created a map in DynamicLoader relating generic shared library file names to the ones with version suffix, so that the PersistentOStream can output information about the latter filenames if present. * lib/Makefile.am: Link all the shared libraries including the ones with version suffix and the ones ending with .la. * */Makefile.am, configure.ac: Moved -version-info to the individual _LDFLAGS variables in the Makefiles 2005-06-08 Leif Lönnblad * *** GLOBAL ***: Merged with libtool-devel branch. * LesHouches/*.h: Changed libThePEGLesHouches.so to LesHouches.so in the ClassTraits specialization. 2005-06-08 David Grellscheid * */Makefile.am: Switched to build just one overall libThePEG.so; Modifications to get 'make distcheck' to work error-free; Modifications to allow compilation on OS X. * MatrixElements/ME[Qq][Qq]2[Qq][Qq].*: renamed to avoid clashes on case-insensitive filesystems (like OS X). * src/ThePEGDefaults.in, LesHouches/Makefile.am: turned libThePEGLesHouches.so into dynamic module LesHouches.so * Helicity/*, Interface/Interfaced.h, PDT/ParticleData.*: Included Peter Richardson's changes to Helicity classes (helicity numbering switched from -1,0,1 to 0,1,2, etc). * Templates/*: Removed, as it didn't have Makefile.am entry. 2005-06-06 Leif Lönnblad * Interface/Interfaced.h: Made generator() function public. * lib/ThePEG.el: Fixed bug in specifying limited parameters. 2005-06-05 Leif Lönnblad * acinclude.m4: Make sure other packages using AC_CHECK_THEPEG installs their libraries in $(libdir)/ThePEG. * Config/config.h.in: Removed. Automatically generated by autoheader. 2005-06-04 Leif Lönnblad * acinclude.m4: Included CLHEP namespace definition in the CLHEP compile test. 2005-06-03 Leif Lönnblad * configure.ac, acinclude.m4: Added macros to clean up configure.ac * ACDC/ACDCGen.h: Added an explicit destructor for Slicer class for debugging purposes. 2005-06-02 Leif Lönnblad * lib/ThePEG.el: Just fixed so that THePEG-variable-cutnpaste opens in another window - not the one we want to paste into. 2005-06-02 Leif Lönnblad * */Makefile.am: Use $(LN_S) instead of ln -s. * configure.ac, Makefile.am: Added Doc as subdirectory. Fixed documentation of environment variables. * Doc/*: Fixed up to use automake. * Handlers/SubProcessHandler.fh, Helicity/RSFermionSpinInfo.fh: Included Pointe.h to make doxygen shut up. * */*.h: Doxygen does not like '..' in comments anymore. Removed those. * src/ThePEGDefaults.in: Now loads some non-default libraries to get the documentation of the interfaces correctly. 2005-06-01 Leif Lönnblad * include/Makefile.am: Make it quietly. 2005-05-31 Leif Lönnblad * Utilities/DynamicLoader.cc: Changed the default path to ../../ThePEG/lib * Helicity/*.h: Made sure ThePEG.h was included first to make sure we do not get CLHEP package information in the macros. * *** GLOBAL ***: Change build procedure to use automake and libtool. This affects all Makefiles etc. 2005-05-28 Leif Lönnblad * Handlers/EventHandler.*, Repository/EventGenerator.*, LesHouches/LesHouchesEventHandler.*, Handlers/StandardEventHandler.*: introduced histogramScale() function. * Repository/BaseRepository.cc: Added optional class name to the 'ls' command to only list objects (and directories with objects) of a specified class. To be used in the Java GUI. * Handlers/StandardEventHandler.*, Handlers/StandardXComb.*: StandardXComb now uses the XSecStat class to collect statistics. It is not quite used as intended as the maximum cross section for each XComb is not explicitly known, but it cleaned up the class a bit... 2005-05-27 Leif Lönnblad * LesHouches/MadGraphReader.*: Removed setting of XPDWUP giving the responsibility for that to the base class. Also renamed readEvent() to doReadEvent(). * LesHouches/LesHouchesReader.*: Renamed the readEvent() function to doReadEvent() which is called from the new readEvent() function, which also does the reweighting (with newly introduced reweightPDF option and the (p)reweights). Aslo sets the XPDWUP varaiables if not done by the sub-class (but set to -1). * LesHouches/LesHouchesEventHandler.cc: Added cuts - they were there before, but were never used. * PDF/PartonExtractor.h: Made the getPDF function public. 2005-05-26 Leif Lönnblad * Handlers/ClusterCollapser.cc: Changed to use new transfrom of whole container in ThePEG::UtilityBase. * Utilities/UtilityBase.*: Added transform() function which takes a whole container as argument. * PDF/PartonExtractor.*, PDF/RemnantHandler.*, PDF/NoRemnants.*, PDF/LeptonLeptonRemnant.*, PDF/BaryonRemnants.*: Changed the signatures of the generate() and recreateRemnants() functions to also require information about the shat of the subprocess, to allow the remnant handlers to catch situations where they might get into trouble with kinematics. The old functions are still there, but will be removed shortly. * LesHouches/LesHouchesEventHandler.cc: Added warnings about oversampling in the statistics() function. * MatrixElement/MEBase.h: (David Grellscheid) Now includes MEBase.fh as this is no longer done by LastXCombInfo.h. * Handlers/LastXCombInfo.h: (David Grellscheid) Removed declaration of lastME(), which was needed and not implemented. Also removed the inclusioon of the MEBase.fh header file. 2005-05-19 Leif Lönnblad * LesHouches/LesHouchesReader.cc: Fixed bug in reading cached files (name of the gzip program and resizing of vectors HEPEUP. Also removed debugging information about writing the cach file. * LesHouches/LesHouchesReader.icc: Fixed bug in calculating the byte-size of the HEPEUP struct. * LesHouches/MadGraphReader.cc: Set correct units on the SCALUP variable. * LesHouches/LesHouchesReader.cc: The scale in the constructed PartonBinInstances should be negative. Also set the scale of the incoming and outgoing partons * PDF/PartonExtractor.*: Removed public access to thePartonBinInstances, which eas not really neaded. Renamed the variable to partonBinInstances and cleared it in the beginning of the constructRemnants function. * PDF/PartonBin.h: Removed declaration of unimplemented functions. 2005-05-17 Leif Lönnblad * *** GLOBAL ***: Merged in branch with new EventHandler and EventGenerator classes. Includes also the LesHouches classes. * */*.h: Fixed some ancient spelling errors in comments * lib/ThePEG.el: Fixed bug in ThePEG-parameter function. (Interface:: was previously Interfaced::) * Utilities/ObjectIndexer.*: Added empty() function. * MatrixElement/ReweightConstant.*: Added simple sample reweight class. * MatrixElement/Makefile, MatrixElement/ReweightBase.*, MatrixElement/ReweightMinPT.*: Modified to use StandardXComb. This was not noticed before since ReweightMinPT was accidentally omitted from the Makfile * Handlers/KinCutsInit.cc: Fixed bug in declarations of Parameter interfaces introduced to avoid ambiguities. 2005-05-16 Leif Lönnblad * Handlers/CascadeHandler.cc, Handlers/LastXCombInfo.*: Made the LastXCombInfo::pdf function templated to avoid having to include PDF.h (which in turn includes a lot of stuff) in LastXCombInfo.h. 2005-05-15 Leif Lönnblad * LesHouches/LesHouches.*, LesHouches/LesHouchesReader.*: Moved the LesHouches common block variables into struct corresponding to HEPRUP and HEPEUP. 2005-05-11 Leif Lönnblad * Utilities/CompSelector.*, LesHouches/*: Added Selector-like class capable of compensating if overestimated cross sections used for selection torns out to be too low. 2005-05-04 Leif Lönnblad * Utilities/XSecStat.cc: Implemented the << and >> operators in the ThePEG namespace (don't understand why that is needed). * Handlers/StandardEventHandler.*, Handlers/EventHandler.*: Moved the statLevel() function and assiciated variables from StandardEventgenerator to Event Generator. 2005-05-03 Leif Lönnblad * CLHEPWrap/RandPoisson.*: New wrapper around the CLHEP RandPoisson class. * Utilities/XSecStat.*: Changed behavior to both accumulate accepted events and weights. also accumulates squared weights to get an error esitmate. 2005-04-29 Leif Lönnblad * PDF/PartonExtractor.*: Removed functions no longer used by the LesHouches classes. * Utilities/XSecStat.*: Added class to collect cross section statistics. 2005-04-27 Leif Lönnblad * PDF/PartonExtractor.*: Added functions boostRemnants() and transformRemnants(), which where taken from Pythia7::ShowerHandler. Also added constructRemnants functions, primarily to be used by the LesHouchesEventHandler. * configure.in: Just cosmetics. 2005-04-26 Leif Lönnblad * Utilities/Math.icc, Config/config.h.in, configure.in: Included check for existence of atanh (ThePEG_HAS_ATANH). This is a standard C function but is not always available on C++ compilers. Also changed the implementation of Math::log1m in case neither log1p or atanh is available. If atanh is not available it is included in the Math namespace using log1m. 2005-04-25 Leif Lönnblad * PDF/PartonExtractor.cc: Removed unused variables in construct(). 2005-04-21 Leif Lönnblad * lib/ThePEG.el: Started to modify interface decalration defuns to use the unums in Interface/Interface.h. * Handlers/KinCutsInit.cc, StandardModel/O1AlphaS.cc: Modified declarations of Parameter interfaces to avoid ambiguities. * PDF/BaryonRemnants.cc: Modified slightly the initial check if is at all possible to create remnants. * Interface/Parameter.*, Interface/ParVector.*: Added option to make parameters limited from above _or_ below rather than just both or not at all. * Interface/Interface.h: Added namespace Interface namespace with descriptive enums to be used when declaring interfaces. 2005-04-20 Leif Lönnblad * PDF/PartonExtractor.*: Introduced generateRemnants functions. Not yet quite working if scale is zero. * Repository/RandomGenerator.*, Repository/UseRandom.*: Added rndvec function to return a vector of random numbers. * Handlers/XComb.cc: Fixed bug in setPartonBinInstances(), forgot to actually set them. 2005-04-19 Leif Lönnblad * Handlers/XComb.*, Handlers/StandardXComb.cc: Removed unnecessary member theLatOutgoing in XComb, renamed setPartonBinInstances() to createPartonBinInstances(), introduced setPartonBinInstances() for providing instances from the outside. 2005-04-17 Leif Lönnblad * Utilities/StringUtils.cc: Fixed bug in stripws. * Utilities/CFileLineReader.h: Made class non-virtual. * Handlers/KinCutsInit.cc: Made LeptonMatcher interface non-readonly. * Handlers/EventHandler.cc: Made LuminosityFunction interface nullable. * LesHouches/TestLesHouches.in: Added temporary test setup. To be moved to the test directory. 2005-04-14 Leif Lönnblad * Handlers/StandardXComb.h, Handlers/StandardEventHandler.h, Handlers/EventHandler.h, Handlers/SubProcessHandler.fh, Config/Pointers.h, Config/Containers.h, MatrixElement/MEBase.fh: Moved declaration of pointers and containers of SubProcessHandler and MEBase to corresponding .fh files. 2005-04-13 Leif Lönnblad * Handlers/StandardEventHandler.h: Now #includes PartonBin.fh. * Handlers/EventHandler.h: Made some access functions public and fixed some documentation. * PDF/PartonBin.fh, Config/Pointers.h, Config/Containers.h): Moved declaration of pointers and containers of PartonBins to PartonBin.fh. 2005-04-07 Leif Lönnblad * Handlers/LastXCombInfo.h: Included PDF.h instead of PDF.fh, since gcc-4 insists on trying to compile a templated function even though it is not used. * Persistency/PersistentOStream.icc: Workaround for gcc-4 defining tYes and tNo in a strange way. 2005-04-07 Leif Lönnblad * Handlers/ClusterCollapser.*: Simplified the insertion od singlets in map by introducing a static insert() method. * Pointer/RCPtr.*: Renamed member thePointer to ptr to avoid excessive finger work during debug. * MatrixElement/*, Handlers/*: Completed the division between the general XComb base class and the StandardXComb class used for the sub-process generation in the StandardEventHandler. Changed the behavior of LastXCombInfo so that it is templated on possible sub-classes of XComb. 2005-04-06 Leif Lönnblad * Utilities/FixedSizeAllocator.h: Added include of . * Utilities/Selector.h, Config/std.h: fixed Allocator template argument in ThePEG_DECLARE_MAP. Thanks to David Grellscheid. * ACDC/ACDCGen.*, ACDC/ACDCGenCell.*: Added a smooth function to disallow to large differences between neighboring cells. Not yet used. 2005-04-06 Leif Lönnblad * *** GLOBAL ***: Removed all references to old EventHandler hierarchy. Everything compiles and runs, but not quite tested yet. 2005-04-05 Leif Lönnblad * LesHouches: Changed to use new EventHandler hierarchy. 2005-04-04 Leif Lönnblad * Repository/MultiEventGenerator.*: Now inherits from the new EventGenerator class. * Handlers/SamplerBase.*: Added setEventHandler() method for new EventHandler class. * Handlers/XComb.*: Added constructors for new EventHandler class. * Handlers/LuminosityFunction.h: Made select() public. * EventRecord/Collision.h): Made addStep public. * EventRecord/Event.h: Made setInfo(), addCollision() and primaryCollision(tCollPtr) public. * Handlers/StandardEventHandler.*: Joined OldEventHandler and CollisionHanlder into the new StandardEventHandler class to prepare for new EventHandler hierarchy. 2005-03-31 Leif Lönnblad * ACDC/ACDCGen.*: Changed the procedure for presampling. The initial basic level is set to the minimum sampling, but is never allowed to be less than a fraction (by default 1/nTry()) of the maximum sampling. * Handlers/ACDCSampler.*: Added a hint in the warning issued if a run ends while ACDC is in compensating mode, also made it a proper warning. Increased the default number of pre-samplings from 100 to 1000. 2005-03-10 Leif Lönnblad * MatrixElement/ME2to2Base.cc: Fixed bug in calculatio of jacobian spotted by David Grellscheid. Only showed up if outgoing partons were produced close to rest in which case the jacobian diverged. 2005-02-23 Leif Lönnblad * *** GLOBAL ***: CurrentGenerator to OldCurrentGenerator, EGPtr to OEGPtr and EHPtr to OEHPtr to prepare for new EventHandler hierarchy. 2005-02-21 Leif Lönnblad * *** GLOBAL ***: Renamed EventGenerator to OldEventGenerator to prepare for new EventHandler hierarchy. 2005-02-20 Leif Lönnblad * Handlers/EventHandler.*: Modified EventHandler according to new hierarchy. Also made minor changes to other classes to make it compile. These changes needs to be attended to when the old classes are removed and are marked with the comment '*** OldEventHandler ATTENTION ***'. 2005-02-19 Leif Lönnblad * *** GLOBAL ***: Renamed EventHandler to OldEventHandler to prepare for new EventHandler hierarchy. 2005-02-08 Leif Lönnblad * lib/fixCLHEP: Copy libCLHEP.so rather than soft link since the CLHEP versioning system for shared libraries doesn't really work. 2005-01-07 Leif Lönnblad * Handlers/StandardXComb.*, PDF/PartonExtractor.h, MatrixElement/MEBase.cc, Handlers/LastXCombInfo.h, Handlers/CollisionHandler.cc, Handlers/XComb.*: Changed slightly the interface for XComb, preparing for makeing it a base class with StandardXComb as a sub class implementing the standard ThePEG-specific sub process generation parts of XComb. 2004-12-30 Leif Lönnblad * Repository/RandomGenerator.*: Added operator()(long) to conform to the random number generator requirements of the standard library (mainly used in the random_shuffle function in ). * Handlers/EventHandler.*: Added const and non-const access to the pointer to the Luminosity function. 2004-12-25 Leif Lönnblad * Utilities/CFileLineReader.cc: Fixed bug in checking if a file is bzip2 format. * configure.in: Fixed default compress commands in ThePEG_BZ2WRITE_FILE and ThePEG_GZWRITE_FILE macros. 2004-12-20 Leif Lönnblad * PDT/ParticleData.cc: Added initialization for members in default constructor. 2004-12-02 Leif Lönnblad * Utilities/Math.icc: Added 'using namespace std;' in exp1m and log1m to avoid problems with compilers where atanh etc are (not) in std. 2004-10-27 Leif Lönnblad * lib/fixCLHEP: Fixed the script to use g++ instead of ld to create a shared library from the static CLHEP library. This should probably be a configure option in the future. 2004-10-14 Leif Lönnblad * Utilities/StringUtils.*: Added stripws() function to strip a string from leading and trailing white space. * Repository/EventGenerator.cc : Incommented string parameters in Init as these should now work properly on any compiler. * lib/ThePEG.el (ThePEG-parameter): Made specialization for string. * Interface/Parameter.*: Made (partial) specialization for string parameters to avoid min/max functions and units. 2004-10-13 Leif Lönnblad * Repository/BaseRepository.cc, Interface/InterfacedBase.*: Each interfaced object may now be assignrd a unique comment. If an interfaced object is being initialized with the setup command in the repository the non-virtual InterfacedBase::setup() function is called which in turn calls the virtual readSetup(). Everything in the stream supplied as argument which is not parsed by the readSetup functions will be treated as a comment. * Repository/Repository.cc: Added possibility in read() function to have continuation lines. If a command line end with a \ the next line will be added. 2004-09-30 Leif Lönnblad * lib/ThePEG.el: Added ThePEG-variable-cutnpaste function to produce templates for including a variable definition and corresponding set/get functions, constructor initialization adn I/O. 2004-09-29 Leif Lönnblad * lib/ThePEG.el: Added ThePEG-refvector and ThePEG-parvector functions. * LesHouches/LesHouchesEventHandler.*: Added subclass to EventHandler for the LesHouches readers. A reorganization of (Partial)Collision/Event handlers is called for. 2004-09-25 Leif Lönnblad * configure.in, Config/config.h.in, Utilities/CFileLineReader.cc: Added facilities to handle .bz2 files as well as .gz files. * Utilities/CFileLineReader.*: Bug fixes. 2004-09-24 Leif Lönnblad * Utilities/CFileLineReader.*: Added class to read from C FILE streams. * lib/ThePEG.el: Cleaned up comments. 2004-09-20 Leif Lönnblad * */Makefile: Modified to fix installation procedures. 2004-09-19 Leif Lönnblad * */Makefile: Modified to fix installation procedures. 2004-09-14 Leif Lönnblad * Makefile: Modified snapshot target to work with new documentation. 2004-09-10 Leif Lönnblad * lib/ThePEG.el: Fixed dummy min/max values for unlimited Parameter objects in ThePEG-parameter function. 2004-09-09 Leif Lönnblad * lib/ThePEG.el: Changed documentation in header file generation. * *** GLOBAL ***: Added doxygen reference to interfaces in documentation. Also changed some descriptions of interfaces to get proper references between interfaces. * Doc/Makefile: Added call to fixinterfaces.pl script to fix references between interfaces in AllInterfaces.h * Doc/fixinterfaces.pl: Added script to fix references between interfaces in AllInterfaces.h 2004-09-08 Leif Lönnblad * Doc/refman.conf: Updated to suit doxygen version 1.3.8. * Helicity/*.fh: Added include of Pointer.h to help doxygen documentation. * Helicity/HelicityDefinitions.h: Added documentation of Helicity namespace. 2004-09-05 Leif Lönnblad * Utilities/Math.*: Added sign transfer function. * Config/Units.h: Add inverse energy to the fourth power as unit. * Handlers/GaussianPtGenerator.*, Handlers/PtGenerator.h: Changed pair of energy for TransverseMomentum. 2004-09-04 Leif Lönnblad * src/Makefile, Makefile: Introduce init target to just initialize the repository. The doc target depends on init. 2004-09-03 Leif Lönnblad * Config/Makefile.common.in, Makefile: Modified the doc target to use doxygen. * Interface/Switch.*, Interface/Reference.*, Interface/RefVector.*, Interface/Parameter.*, Interface/ParVector.*, Interface/Command.*, Interface/InterfaceBase.*: Added virtual functions to write out doxygen formatted entries describing interfaces. * Repository/BaseRepository.cc: Added command-line function to write out doxygen documentation of all interfaces. * *** GLOBAL ***: Modified all descriptions in declarations of interfaces to conform to doxygen format. 2004-08-25 Leif Lönnblad * *** GLOBAL ***: Fixed various doxygen comment issues. * Doc/refman.h: Added file with embryo of mainpage reference manual documentation. 2004-08-24 Leif Lönnblad * *** GLOBAL ***: Fixed various doxygen comments. * Doc/refman.conf: Added config file for doxygen generation of reference manual. 2004-08-22 Leif Lönnblad * *** GLOBAL ***: Changed the last class names from /ThePEG/name to ThePEG::name. * StandardModel (directory): Modified to use new documentation format. 2004-08-19 Leif Lönnblad * Repository (directory): Modified to use new documentation format. 2004-08-10 Leif Lönnblad * PDT (directory): Modified to use new documentation format. 2004-08-02 Leif Lönnblad * lib/ThePEG.el: Added functions for creating PDF classes. 2004-08-01 Leif Lönnblad * PDF (directory): Modified to use new documentation format. 2004-07-27 Leif Lönnblad * MatrixElement (directory): Modified to use new documentation format. 2004-07-24 Leif Lönnblad * Interface (directory): Modified to use new documentation format. 2004-07-21 Leif Lönnblad * EventRecord/Particle.icc: Reset pointer to particle representation and particle data for the case a dangling pointer to the destroyed object should be used accidentally. * EventRecord/Step.*: Changed destructor to reset transient pointers in Particlespointing to the destroyed object. * EventRecord/Collision.*: Changed destructor to reset transient pointers in Steps and SubProcesses pointing to the destroyed object. * EventRecord/Event.*: Changed destructor to reset transient pointers in Collisions pointing to the destroyed object. 2004-07-20 Leif Lönnblad * Handlers/PartialCollisionHandler.cc: In performStep, if the StepHandler throws an exception, call popStep() to set the correct current step rather than calling Collision::popStep() directly. * Helicity (directory): Modified to use new documentation format. 2004-07-16 Leif Lönnblad * Handlers (directory): Modified to use new documentation format. 2004-06-28 Leif Lönnblad * Handlers/CascadeHandler.icc: Fixed bug in standard setup functions. Before they called the HandlerBase versions, now they correctly call the StepHandler ones. * Doc/Makefile, Makefile: Also make clean in Doc directory. * Handlers (directory): Modified to use new documentation format. 2004-06-25 Leif Lönnblad * EventRecord (directory): Modified to use new documentation format. 2004-06-24 Leif Lönnblad * EventRecord (directory): Modified to use new documentation format. 2004-06-23 Leif Lönnblad * ACDC, CLHEPWrap, Config, Persistency, Pointer, Utilities (directory): Modified to use new documentation format. 2004-06-22 Leif Lönnblad * Utilities (directory): Modified to use new documentation format. Also removed unused Integrator class. 2004-06-21 Leif Lönnblad * Config, Persistency, Pointer (directory): Modified to use new documentation format. * lib/ThePEG.el: Modified to use new documentation format. 2004-05-24 Leif Lönnblad * src/ThePEGParticles.in: Made also the photon and pi0 BeamParticleData since they can have parton densities. * Handlers/GaussianPtGenerator.cc: Fixed units in I/O. * src/ThePEGDefaults.in: Set GaussianPtGenerator and SimpleZGenerator in the BaryonRemnants object. * lib/Makefile: Added SHOWCOMMAND conditionals. * Utilities/Rebinder.icc: Fixed bug in translate(iterator ...) function. * Handlers/SimpleZGenerator.*: Added simple default implementation of the abstract ZGenerator class. * Handlers/GaussianPtGenerator.*: Added simple default implementation of the abstract PtGenerator class. 2004-05-15 Leif Lönnblad * PDT/BreitWignerMass.cc: Now uses the new asymmetric width cuts. * PDT/ParticleData.o: Changed the internal representation of the width cut to one upper and one lower cut. Added corresponding access functions and Parameter interfaces. Also changed the massMax and massMin functions accordingly. The old set and get functions for the width cut now sets both the upper and lower cut and returns the maximum of the two. 2004-05-14 Leif Lönnblad * Handlers/EventHandler.cc: Added doinitrun implementation to reset the statistics for the XCombs after initializing the phase space sampler. * Handlers/XComb.*: Added checkInit function to check if the XComb has any possibility to produce events. Also add reset function to reset statistics for the XComb. * Handlers/CollisionHandler.cc: Do not add XComb's which cannot possibly produce events (and issue a warning). 2004-05-13 Leif Lönnblad * ACDC/ACDCGen.icc: Fixed bug which caused a crash if it was impossible to find a non-zero cross section for a channel. * MatrixElement/ME2to2Base.cc: Added (possibly unnecessary) try block for checking impossible kinematics. 2004-04-26 Leif Lönnblad * LesHouches/MadGraphReader.*: New class. * LesHouches/LesHouchesFileReader.*: New class. * Config/config.h.in, configure.in: Added macros for opening compressed files with popen. (popen turns out not to be in the C++ standard, so we may have to look for another solution). 2004-04-23 Leif Lönnblad * configure.in: Changed default optimization flag to -O2 (otherwise things get slow with gcc 3.4.0). * ThePEG: The following changes were made to allow compilation with gcc 3.4.0. * Utilities/TypeInfo.icc: in version and name method, use typeid of type rather than variabe. * Utilities/Interval.icc: Fixed obvious bugs in check and checkAll. * Utilities/FixedSizeAllocator.h: Fixed obvious bug in destroy which for unknown reasons was not detected before. * Utilities/ClassDescription.tcc: Workaround of bug in gcc 3.4.0 when taking typeid of template parameter. * Utilities/ClassDescription.icc: Added scope resolutions to calls to name(). * Repository/Repository.cc: Removed 'template' prefix in calls to templated static member functions. * Repository/RandomGenerator.icc, Repository/RandomGenerator.h: changed return type for rnd(OutputIterator, size_type n) to void. * Pointer/RCPtr.icc: Made implementations of swap explicit instead of using std::swap (problems with gcc 3.4.0). * Interface/Switch.tcc, Interface/Reference.tcc, Interface/RefVector.tcc, Interface/Parameter.tcc, Interface/ParVector.tcc: Added scope resolution to calls to readOnly, limited, and dependencySafe functions. * Interface/InterfacedBase.h: Made clear and reset functions public. * Interface/Switch.cc, Interface/Reference.cc, Interface/RefVector.cc, Interface/Parameter.cc, Interface/ParVector.cc, Interface/Command.cc: Moved include of InterfacedBase.h * Handlers/HandlerGroup.tcc: Added #include of Hint.h * Handlers/ClusterCollapser.cc: Changes call to swap for PPtr. * EventRecord/Particle.h: Made inner class ParticleRep public as a quick fix to allow access. * EventRecord/Step.tcc: Added missing Step:: in definition of the addIfFinal function. *PDT/DecayMode.cc , PDF/BaryonRemnants.h, EventRecord/SubProcess.cc, EventRecord/Step.cc, EventRecord/Particle.cc, EventRecord/Event.cc, Config/Containers.cc: Removed unnecessary semi-colons. 2004-04-20 Leif Lönnblad * lib/ThePEG.el: ThePEG-class-files now also create a suitable .fh file which is included in the .h file * LesHouches (Directory): Started implementing the Les Houches interface. 2004-04-17 Leif Lönnblad * Handlers/KinematicalCuts.cc: Changed the cut methods to use the check methods for induvidual cuts for consistency reasons. * Handlers/KinematicalCuts.icc: Changed the methods mHat, sHat, pTHat, yStar, maxY, minY, maxEta, minEta. The treatment of < vs. <= is now better. See documentation for respective functions. 2004-03-31 Leif Lönnblad * Persistency/PersistentOStream.cc: Minor changes to facilitate debugging. * Handlers/XComb.h, Handlers/CollisionHandler.cc, PDF/PartonExtractor.cc, PDF/PartonBin.*: The incoming PartonBin is now a transient pointer while the outgoing ones are reference counted (before it was vice versa). This is to avoid that outgoing PartonBins which are not used get deleted while the transient pointers are still around. Also the PartonExtractor was changed to reflect this change. In PartonExtractor::getPartons the bins corresponding to the incoming particles are also saved last in the returned vector to avoid them being deleted. This is then also taken care of in CollisionHandler::initialize.In addition, the XComb objects now also hold reference counted pointers to the bins corresponding to the incoming particles. 2004-03-27 Leif Lönnblad * Helicity/HelicityDefinitions.h: Removed the HelicityDefinitions class. 2004-03-16 Leif Lönnblad * Helicity/HelicityDefinitions.h: Changed integers for detrmining dirac representation and spinor type to enums. Also made corresponding changes in LorentzSpinor and LorenzSpinorBar classes. * Persistency/PersistentOStream.* Persistency/PersistentIStream.*: Added members functions for i/o of Complex. * Interface/ParVector.* (Module): Fixed bug where min, max and def members were implemented as doubles. They are now properly templated. * Helicity (Module): Changed the implementation of Direc representation in Lorentz spinors. Also fixed documentation. 2004-03-07 Leif Lönnblad * Helicity (Module): Changed all 'cerr' error messges to HelicityLogicalError and HelicityConsistencyError exceptions. 2004-03-04 Leif Lönnblad * Helicity (Module): The helicity classes are now included in the ThePEG structure. They have not been tested in this structure yet, but it compiles and links into ThePEG without any problems. 2004-03-03 Leif Lönnblad * Helicity (Module): Added Peters helicity classes and started to integrate them into ThePEG. * MatrixElement/MEBase.cc (Module): Added new virtual function constructVertes for constructing the spin information for the interaction. The default version does nothing. * Handlers/XComb.cc (Module): Added call to MEBase::constructVertex in the construct method. * EventRecord/Particle.cc (Module): Fixed bug in the cloning of the spin information in the ParticleRep copy-tor. 2004-03-01 Leif Lönnblad * Config/Complex.h (Module): Added using std::complex int the ThePEG namespace. 2004-02-24 Leif Lönnblad * EventRecord/Particle.*: Added function 'abandonChild' which will undo the actions of 'addChild', i.e. Remove the child from the list of children and also remove this from the childs list of parents. 2003-11-19 Leif Lönnblad * lib/ThePEG.el: Made sure ClassTraits.h is included before class traits templates are specialized. * configure.in, Config/Makefile.common.in: Made configure steer all compiler flags and included info for --help option. Also changed the check for log1p and expm1 which caused problems under cygwin. Need to also fix a atanh check but no solution to that for cygwin yet. 2003-11-04 Leif Lönnblad * lib/Makefile, lib/fixCLHEP: If CLHEP is already in a dynamic library, make symbolic links to the corresponding files instead of copying. Also make symbolic links when installing. 2003-11-02 Leif Lönnblad * Makefile: Fixed dependencies for setup target. * configure.in: Fixed strange behavior when --prefix is not explicitly used. 2003-10-31 Leif Lönnblad * lib/fixCLHEP: Since CLHEP-2.0 comes with shared libraries, we now look for that before trying to find the static one. * Handlers/ACDCSampler.h: Added using namespace ThePEG::Units in the ACDCGenerator namespace to be compatible with CLHEP-2.0 and earlier versions. * Config/Units.h: Added using namespace CLHEP to be compatible with CLHEP-2.0 and earlier versions. * CLHEPWrap/CLHEP.h: Added an empty CLHEP namespace to be compatible with CLHEP-2.0 and earlier versions. * ../Makefile: Made distclean a special target since here the ThePEG directory has to be cleaned last. * configure.in: Set the default CLHEPPATH to $prefix rather than hardcoded to /usr/local 2003-10-24 Leif Lönnblad * StandardModel/StandardModelBase.*: Changed CKM function to check if theCKM2Matrix has been generated by the CKM object before returning a matrix element. 2003-08-27 Leif Lönnblad * src/runThePEG.cc: If -x argument specifies a dynamic library, it is assumed to contain a class inheriting from Main and which has a static Init() function which runs the event generator instead of simply calling the event generators go() function. 2003-08-26 Leif Lönnblad * Repository/Main.*: Added base class for classes implementing a main steering routine for running an EventGenerator, in case the standard 'go()' function in the EventGenerator is not enough. * Handlers/EventHandler.cc: Avoid floating exception in atatistics() if no events were generated. Write nice message instead. * Handlers/ACDCSampler.cc: Avoid floating exception in finish() if no events were generated. Write nice message instead. * ACDC/ACDCGen.icc: Avoid floating exception in efficiency() if no events were generated. 2003-08-13 Leif Lönnblad * Handlers/DecayHandler.cc: Use the StepHandler::newStep() function. * Handlers/ClusterCollapser.h: Changed the signature of the collapse() function to take a new step as argument instead of a collision handler. Changed the handle method accordingly. * EventRecord/Collision.*, Handlers/PartialCollisionHandler.*: newStep() now have an optional argument to specify the step handler. * Handlers/StepHandler.cc: createNewStep now sets the handler to this. 2003-08-12 Leif Lönnblad * PDT/V2PPDecayer.cc: Fixed but in reweight() where the parent and grand parent momenta were not boosted to the parent cms. * PDT/WeakToHadronsDecayer.cc, PDT/V2PPDecayer.cc, PDT/OmegaPhi3PiDecayer.cc, PDT/FlatDecayer.*, PDT/DalitzDecayer.cc, PDT/Decayer.*: Added utility function getChildren(), finalBoost() and setScales() in Decayer to be used in subclasses. * Utilities/SimplePhaseSpace.tcc: Fixed bug in CMSn. I the case of two particles the angles were not properly distributed. * src/ThePEGParticles.in, src/ThePEGDefaults.in: Using WeakToHadronsDecayer instead of dummies PYDECY42 and PYDECY48. Also using DummyDecayer instead of PYDECY51 and PYDECY53 * PDT/WeakToHadronsDecayer.*: Added class for weak decays of taus, charmed and bottom hadrons. Seems to work. * PDT/QuarksToHadronsDecayer.cc: Fixed bug where the decay products were not boosted to the parents frame. Also made minor change tosimplify for the WeakToHadronsDecayer sub class. * Makefile: Removed -$(MAKEFLAGS) in recursive calls. 2003-08-08 Leif Lönnblad * Config/Makefile.common.in: Moved macro for THEPEGLIBS from src/Makefile to Config/Makefile.common * src/ThePEGParticles.in, src/ThePEGDefaults.in: Using QuarksToHadronsDecayer also instead of dummies PYDECY11 and PYDECY12. Also using ColourPairDecayer instead of dummy PYDECY32. 2003-08-07 Leif Lönnblad * PDT/ColourPairDecayer.*: Added class inheriting from FlatDecayer which can handle colour connected pairs of decay products which are to undergo subsequent hadronization and optional showereing. NOT TESTED. * PDT/QuarksToHadronsDecayer.cc: Class now can handle matcher specifications of light quark pairs. * PDT/FlatDecayer.*: Added virtual getChildren() functions for sub-classes which need to do special things with the children. 2003-08-04 Leif Lönnblad * src/ThePEGParticles.in, src/ThePEGDefaults.in: Using QuarksToHadronsDecayer instead of dummy PYDECY13. * PDT/QuarksToHadronsDecayer.cc: Fixed vaious bugs. Seems to work now, but physics not tested. * Handlers/SimpleFlavour.cc: Fixed bug in generateHadron() when argument was anti-quark and and in setProbabilities() for diquark production. Fixed anti-particle bug in vectorMeson() and pseudoScalarMeson(). THe class seems to work now but physics not tested. * Handlers/FlavourGenerator.cc: Just changed error messages. 2003-08-01 Leif Lönnblad * Handlers/FlavourGenerator.*: Added 'always' wrapper functions which call the virtual generateHadron(), getHadron() and getBaryon() functions which throws exceptions if no hadron could be generated. 2003-07-30 Leif Lönnblad * PDT/QuarksToHadronsDecayer.*: Added class for decay of particles to quarks which are then converted to hadrons distributed according to phase space. Not ready yet. * PDT/StandardMatchers.h: Added QuarkMatcher. * src/ThePEGParticles.in, src/ThePEGDefaults.in, PDT/Onium3GDecayer.*: Added Onium3GDecayer class for decay of spin-1 onia into three gluons or two gluons and a photon. The class has not been properly tested. 2003-07-29 Leif Lönnblad * src/ThePEGDefaults.in: Added a SimpleFlavour object which is used by the BaryonRemnants and ClusterCollapser objects. * PDT/StandardMatchers.h: Added Check functions taking PDG code arguments for the MesonMatcher and BaryonMatcher classes. * PDT/PDT.*: Added functions to get the flavour content out of hadrons. * Handlers/SimpleFlavour.*: Added class to implement simple versions of the pure virtual functions of the FlavourGenerator class. The model implemented ti s simplified version of the Pythia fortran version. (NOT TESTED) * Handlers/FlavourGenerator.*: Changed the standard pure virtual functions for the FlavourGenerator class to get rid of things that were too much related to the Lund string fragmentation stuff. 2003-07-27 Leif Lönnblad * PDT/OmegaPhi3PiDecayer.h: Changed the class name in the class description to ThePEG::OmegaPhi3PiDecayer. * lib/ThePEG.el: Changed the naming of classes from "/{namespace}/{class}" to "{namespace}::{class}". * src/ThePEGParticles.in, src/ThePEGDefaults.in: Changed the naming of classes from "/{namespace}/{class}" to "{namespace}::{class}". * Utilities/DescriptionList.cc: The naming of classes in the class description has until now been on the form "/{namespace}/{class}" In the future it should instead be on the more natural form "{namespace}::{class}". Before the new naming scheme is enforced class descriptions will be registered in both the old and new form. * Repository/BaseRepository.*: Added remove(ObjectList) to safely remove a set of objects from the repository if no other objects are referring to them. The function is used by the "rm" command. In addition a new command "rrmdir" was added to remove a complete directory with all its objects and sub-directories. (The "rmdir" only removes empty directories.) * Repository/Repository.*: The "cp" command now treats particles separately (copyParticle()). If a particle has an anti-partner this is also copied to the same directory. In addition the decay modes of both particle and anti-particle will be copied. * PDT/DecayMode.cc: in constructDecayMode() it is now the default to specify the full name of the decaying particle (rather than just the PDGName). 2003-07-26 Leif Lönnblad * CLHEPWrap/*.fh, CLHEPWrap/*.h: Reordered include paths to prepare for next version of CLHEP which will use namespace CLHEP. 2003-07-25 Leif Lönnblad * PDT/DecayMode.*: Added new member variable to remember the order in which the decay products were specified. The produceProducts() now created particles according to this order. * src/ThePEGParticles.*, src/ThePEGDefaults.in, PDT/DummyDecayer.*: Added DummyDecayer class for symbolic decay channels. It replaces the PYDECYDummy decayer with mode 102. * src/ThePEGParticles.*, src/ThePEGDefaults.in, PDT/Tau2HadronsDecayer.*: Added class to decay tau to neutrino plus hadrons. * PDT/OmegaPhi3PiDecayer.cc: * src/ThePEGParticles.in, src/ThePEGDefaults.in, PDT/DalitzDecayer.*: Added class to perform Dalitz decays into e+ e- gamma. 2003-07-24 Leif Lönnblad * PDT/StandardMatchers.h: Added matcher classes for PseudoScalarMesons and VectorMesons. * src/ThePEGParticles.*, src/ThePEGDefaults.in, PDT/V2PPDecayer.*: Added V2PPDecayer class to decay vector mesons to pseudo-scalar ones. Will be flat in phase space unless the grand parent is a speudoscalar and its only other daughter is a speudo-scalar or a photon. * Repository/EventGenerator.icc: Added member functions and variables to access the current (partial) collision handler and the current step handler. * Handlers/PartialCollisionHandler.*: addStep() now has default null arguments for the step handler and the hint. If the hint is null, it is immediately converted to the default hint. If a step was added to a given group, the subsequent groups are automatically reinitialized. In continueCollision(), the currentCollisionHandler() of the current event generator is set to this. In performStep() the currentStepHandler() in the current event generator is set to the step handler which is called. * Handlers/HandlerGroup.cc: next() will now return immediately for an empty group. addPreHandler(), addHint() and addPostHandler() now assumes (rightly) that the hint recieved is never null. addHint will refill the whole group event if there is the main handler is currently executing. I.e it is assumed that someone adding a hint to the main handler wants the whole group to be redone. * EventRecord/Collision.cc: Fixed so that if a perticle is removed from the event record its birthStep pointer is set to null. Hopefully this will fix the problem that sometimes when a generator is dumped (due to an error) a particle is written to a persistent stream and then tries to write a no longer existent birthStep. 2003-07-23 Leif Lönnblad * PDT/OmegaPhi3PiDecayer.*, src/ThePEGDefaults.in, src/ThePEGParticles.in: Added OmegaPhi3PiDecayer class to handle omega-phi->3pi decays. * lib/ThePEG.el: Added ThePEG-Decayer-class-files function. * PDT/FlatDecayer.cc: Now uses DecayMode::produceProducts(). * src/ThePEGParticles.in, PDT/DecayMode.*: The naming of decay modes were before such that only the number and types of the decay products were important, this meant that it was not possible to have both eg. B0 -> c-cbar d-sbar and B0 -> c-sbar d-cbar decay modes since they have the same name and same representation. Now the concept of links have been introduced to indicate that decay products can be linked together in pairs making two decay modes with the same decay products but different linking different. This is indicated in the name by an equal sign instead of a comma: B0->c=cbar,sbar=d; and B0->c=sbar,cbar=d; Also added a produceProducts() function to produce particles from the specified decay products, so that linked particles come first and consecutively in the returned vector. 2003-07-22 Leif Lönnblad * CLHEPWrap/Makefile: Added Matrix.h and Matrix.fh to the dist files. * lib/fixCLHEP: Make sure the fixed .so version of the CLHEP library is called libCLHEP.so irrespective of what the original CLHEP library was called. * MatrixElement/MEQQ2GG.cc, MatrixElement/MEQG2QG.cc: Fixed error in specification of intermediate particles (which was compensated by a corresponding error in the colour flow). * Makefile: Changed the version number to 1.0ab (between alpha and beta). 2003-07-21 Leif Lönnblad * lib/ThePEG.el: Added the parameter and switches functions which were forgotten in the move from skeleton.el 2003-07-20 Leif Lönnblad * EventRecord/Step.*: Added addDecayNoCheck(tPPtr parent, tPPtr child) and, addDecayProduct(tPPtr child) to add decay products which are already linked with their parents. 2003-07-19 Leif Lönnblad * PDF/RemnantHandler.*, PDF/PartonExtractor.*, PDF/PartonBin.*, PDF/PDF.*, PDF/NoRemnants.*, PDF/LeptonLeptonRemnant.*, PDF/BaryonRemnants.*, Handlers/XComb.*, Handlers/LastXCombInfo.icc, Handlers/CollisionHandler.cc: Removed all traces of old strategy involving the PartonBinInfo and RemnantInfo classes. 2003-07-16 Leif Lönnblad * Utilities/DynamicLoader.cc: Added the current working directory as a standard search path. Also added '/' between paths and libraries if needed. * src/Makefile: Corrected link flags for setup and run programs. * Templates/Makefile, lib/Makefile: Moved ThePEG.el and g++dep to the lib directory. * Repository/EventGenerator.cc: Changed Pythia7 to ThePEG in generateReferences(). * Handlers/StepHandler.cc: The createNewStep() function now automatically calles useMe() * Handlers/SubProcessHandler.*, Handlers/KinematicalCuts.*, Handlers/EventHandler.*, Handlers/CollisionHandler.*, Handlers/AnalysisHandler.*: Added fullclone() method to avoid slicing when making copies in the Repository. * Config/Makefile, Config/Makefile.common.in: Fixed correct include path for installed makefiles. * Makefile: install now depends on the check target to ensure the setup and run programs are compiled. * ../configure: Added top-level configure script which simply runs configure in the sub-directories. 2003-07-14 Leif Lönnblad * Config/Makefile: Removed config.h from DISTFILES. * Utilities/SimplePhaseSpace.cc: CMSn now throws ImpossibleKinematics if an infinite boost is requested. * Utilities/UtilityBase.*: Added new setMomentum function which doesn't boost to cms but just rotates to z-axis boosts along it and rotates to correct angle. * PDT/FlatDecayer.cc: Fixed precision problems for large boosts of decay products. 2003-07-13 Leif Lönnblad * Config/Makefile.install: This file is copied to the lib dir in the installation and can be used to compile a users own .so modules. * lib/Makefile: The .o files included in libThePEG.so are now explicitly listed. The .so files in the listed sub-directories are explicitly soft-linked to the lib directory. * Config/Makefile.common.in: .o and .so files are no longer automatically soft-linked to the lib directory. 2003-07-12 Leif Lönnblad * Templates/ThePEG.el: This elisp file will replace the old skeleton.el. The main difference is the renaming of the p7-* functions to thepeg-*. Also started to write specialized functions to create standard handler classes with templates for the virtual functions. * EventRecord/Step.cc: In addDecayProduct() remove test to see if children are still in the final state. 2003-07-08 Leif Lönnblad * Utilities/SimplePhaseSpace.cc: Set the momentum of the first particle rather than boosting it to avoid problems with massless particles. * Makefile: Hid unnecessary output with @. * Utilities/UtilityBase.tcc: Fixed imediate returns in case ranges of particles is empty. In setMomentum the boost version is only tried if the invariant mass squared or the mass is non-negative, otherwise the momentum is set directly. * Utilities/Exception.cc: Added a debug function to print out a range of particles (and summing their momenta). * PDT/ParticleData.h: Added produceParticle method which takes a Lorentz vector and a mass. * PDF/LeptonLeptonRemnant.*: Added parameter to veto photon remnants with too small energy fractions. Also the photons mass is properly set to zero. * Handlers/ClusterCollapser.cc: The procedure to find particles to compensate with was changed so that coloured particles are tried first and singlets only if the coloured particles were not enough. Also required the compensating particles to have a positive invariant mass squared to avoid boost problems. * EventRecord/ColourSinglet.*: Introduced ColourSingletException which is thrown if an inconsistent colour flow is detected. 2003-07-07 Leif Lönnblad * Utilities/Exception.cc: Added debug function to print out particle. * Handlers/ClusterCollapser.cc: Fixed bug for the case where mass of compensating particle is 0. 2003-07-05 Leif Lönnblad * Utilities/UtilityBase.tcc: Fixed bug in transformToCMS(): boos was backward. * Utilities/UtilityBase.*: Added transformToMomentum() method. * Utilities/SimplePhaseSpace.cc: Fixed potential problem in getMagnitude() where impossible kinematics didn't generate an exception due to rounding errors. * EventRecord/Step.*: Added setCopy method. * CLHEPWrap/Transverse.icc: Fixed bug in phi() calculation. 2003-07-04 Leif Lönnblad * PDF/PartonExtractor.cc: Messed around with the newRemnants methods. * Utilities/ObjectIndexer.icc: Fixed memory leak in operator()(Int). 2003-07-03 Leif Lönnblad * Handlers/StepHandler.h: Added method and member for getting the current step from the collision handler. * PDF/PartonExtractor.*: Changed return type on newRemnants method. * Utilities/ObjectIndexer.*: Added const method for getting object from index without possibility to create corresponding object. * EventRecord/Step.*: Added insertCopy method. 2003-07-02 Leif Lönnblad * PDF/PartonBin.*: Added information about outgoing bins in addition to the info about the incoming bin. * PDF/PartonExtractor.*, Handlers/XComb.*, Handlers/CollisionHandler.*: Changed to use PartonBinInstance instead of PartonBinInfo. * EventRecord/Step.*: Added removeDecayProducts methods. 2003-07-01 Leif Lönnblad * Handlers/XComb.cc: Fixed floating underflow problem due to uninitialized field in constructor. 2003-06-30 Leif Lönnblad * Handlers/XComb.*: Prepared to use the new PartonBinInstance class. * PDF/PartonExtractor.*: Prepared to use the new PartonBinInstance class. * PDF/RemnantHandler.*, PDF/NoRemnants.*, PDF/LeptonLeptonRemnant.*, PDF/BaryonRemnants.*: Prepared to use the new PartonBinInstance class. * PDF/PartonBinInstance.*: Added new class to hold info on parton bins. Instead of a PartonBin having a ParonBinInfo to keep temporary info, PartonBinInstance keeps a PartonBin together with temporary info. * CLHEPWrap/Transverse.h: Added units for input/output to streams. 2003-06-28 Leif Lönnblad * PDF/PartonExtractor.cc: Fixed association beteen partons and parton bins for generated sub-processes (used to find PDFs for partons). 2003-06-23 Leif Lönnblad * Utilities/ObjectIndexer.*: Added templated class for dynamical association between (reference counted) objects and indices. * Handlers/StepHandler.*, Handlers/PartialCollisionHandler.cc: In preparation for changing the signature of the handle() method i StepHandler classes, StepHandler now has a method to return the collision handler which made the call to handle(), The corresponding member variable is set be the PartialCollisionHandler before handle() is called. Also the StepHandler class now has its own method to create a new step if needed. * PDT/FlatDecayer.cc: The scale of all decay products in a decay is set to the squared mass of the decaying particle. * Handlers/XComb.cc: The scale of all incoming and outgoing partons in a sub-process is set to the hard scale. * Handlers/DecayHandler.cc: The scale of a particle which has decayed is set to zero. 2003-06-16 Leif Lönnblad * Repository/Repository.cc: Added code so that the load() command will look in the ThePEG_INSTALL_PATH for a .rpo file if the given filename did not exist. 2003-06-14 Leif Lönnblad * First check-in of ThePEG. This is just what was previously Pythia7 but stripped from any pythia-specific classes. Pythia7 still exists but contains only pythia-specific classes which depend on ThePEG. Most significant change is that the 'Misc' directory has been removed and all classes therin has been moved to the 'Utilities' directory. Another change is that 'make check' now only checks the SimpleLEP generator since the SimpleLHC generator was indirectly dependent on the FlavourGenerator in the pythia string fragmentation classes (used in the remnant handling). When compiling, the full compiler and link commands are now by default replaced by messages such as 'comiling xxx.cc ...' To see the full commands use the make-variable SHOWCOMMAND eg. 'make -k check SHOWCOMMAND=1' thepeg-1.8.0.orig/Repository/0000755000175000017500000000000011756460367014325 5ustar sunsunthepeg-1.8.0.orig/Repository/ThePEGStrategy.cc0000644000175000017500000000164311747772425017440 0ustar sunsun// -*- C++ -*- // // ThePEGStrategy.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ThePEGStrategy class. // #include "ThePEGStrategy.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/ParticleData.h" using namespace ThePEG; IBPtr ThePEGStrategy::clone() const { return new_ptr(*this); } IBPtr ThePEGStrategy::fullclone() const { return new_ptr(*this); } NoPIOClassDescription ThePEGStrategy::initThePEGStrategy; void ThePEGStrategy::Init() { static ClassDocumentation interfaceDescription ("This class represents the default ThePEG strategy", "", ""); } thepeg-1.8.0.orig/Repository/EventGenerator.h0000644000175000017500000007441611747772425017443 0ustar sunsun// -*- C++ -*- // // EventGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventGenerator_H #define ThePEG_EventGenerator_H // This is the declaration of the EventGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Named.h" #include "EventGenerator.fh" #include "RandomGenerator.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Repository/Strategy.h" #include "ThePEG/Repository/CurrentGenerator.fh" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Handlers/EventHandler.fh" #include "ThePEG/Analysis/FactoryBase.fh" #include #include "EventGenerator.xh" namespace ThePEG { /** * The EventGenerator class manages a whole event generator run. It * keeps a list of all Interfaced objects which are needed for a * particular run (these objects each have a pointer back to the * EventGenerator). Some objects are special, such as a default * RandomGenerator object, a StandardModelBase object and a Strategy * object and lists of ParticleData and MatcherBase objects used in * the run. * * The EventGenerator also manages information about the * run such as the exceptions being thrown, files to write output and * error messages to, etc. * * There are three main external member functions:
* go() generates a specified number of events and exits.
* * shoot() generates one Event and returns it.
* * generateEvent() takes an initial Step or a partially generated * Event as argument and generates subsequent steps defined in the * generator.
* * doShoot() is a virtual function called by shoot() and may be * overridden in sub-classes.
* * doGenrateEvent() is a virtual function called by generateEvent() and * may to be overridden in sub-classes. * * @see \ref EventGeneratorInterfaces "The interfaces" * defined for EventGenerator. * @see Interfaced * @see RandomGenerator * @see StandardModelBase * @see Strategy * @see ParticleData * @see Event * @see Step * @see FullEventGenerator * */ class EventGenerator: public Interfaced { /** The Repository is a friend. */ friend class Repository; public: /** A map of integers giving the number of times an exception of the * key type has been thrown. */ //typedef map ExceptionMap; //typedef map ExceptionMap; typedef map, int> ExceptionMap; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ EventGenerator(); /** * Copy-constructor. */ EventGenerator(const EventGenerator &); /** * Destructor. */ virtual ~EventGenerator(); //@} public: /** @name Access special objects in the run. */ //@{ /** * Return a pointer to the standard model parameters. */ tSMPtr standardModel() const { return theStandardModel; } /** * Return a pointer to the strategy object containing a set of * non-default particles to use. */ tStrategyPtr strategy() const { return theStrategy; } /** * Get the currently active EventHandler. */ tEHPtr currentEventHandler() const { return theCurrentEventHandler; } /** * Set the currently active EventHandler. */ void currentEventHandler(tEHPtr eh) { theCurrentEventHandler = eh; } /** * Get the currently active step handler. */ tStepHdlPtr currentStepHandler() const { return theCurrentStepHandler; } /** * Set the currently active step handler. */ void currentStepHandler(tStepHdlPtr sh) { theCurrentStepHandler = sh; } /** * Return a pointer to the EventHandler. */ tEHPtr eventHandler() const { return theEventHandler; } /** * Return the vector of analysis objects to be used in the run. */ AnalysisVector & analysisHandlers() { return theAnalysisHandlers; } /** * Return a pointer to an associated factory objects for handling * histograms to be used by AnalysisHandlers. */ tHistFacPtr histogramFactory() const { return theHistogramFactory; } /** * Return the EventManipulator used in the run. */ tEvtManipPtr manipulator() const { return theEventManipulator; } //@} public: /** @name Main functions to controll the run. */ //@{ /** * Initialize this generator. This is done automatically if 'go()' * is used. Calls the virtual method doInitialize(). */ void initialize(); /** * Run this EventGenerator session. Calls the virtual method doGo(). * * @param next the number of the firts event to be generated. If * negative it is assumed that this generator was previously * interrupted (or dumped to a file) and the execution will resume * from where it started. Default is 1. * @param maxevent the maximum number of events to be generated. If negative * the N() is used instead. Default is -1. * @param tics if true information the number of events generated * and elapsed time will be written to std::cerr after each event. */ void go(long next = 1, long maxevent = -1, bool tics = false); /** * Generate one event. Calls the virtual method doShoot(); */ EventPtr shoot(); /** * Finish generating an \a event which has already been partially * constructed from the outside. Calls the virtual method do * doGenerateEvent(). */ EventPtr generateEvent(Event & event); /** * Finish generating an event starting from a \a step which has * already been partially constructed from the outside. Calls the * virtual method do doGenerateEvent(). */ EventPtr generateEvent(Step & step); /** * Indicate that the run has ended and call finish() for all objects * including this one. Note that finish() should not be called * directly. */ void finalize(); /** * Dynamically load the Main class in the given \a file, making it * run its Init() method where it may use this EventGenerator. Also * call the initialize function before and the finish() function * afterwards. */ bool loadMain(string file); /** * Return the maximum center of mass energy possible for an * event. Return zero if the assigned EventHander is not able to * generatr full events. */ virtual Energy maximumCMEnergy() const; /** * The number of the event currently being generated. */ long currentEventNumber() const { return ieve; } /** * Return the event being generated. */ tcEventPtr currentEvent() const; /** * Dump the full state of the current run - including the number of * generated events, so that it can be fully continued from this point. */ virtual void dump() const; /** * Register a given object as used. Only objects registered in this * way will be included in the file with model references. */ void use(const Interfaced & i); /** * Set the random seed for the global random number generator. */ void setSeed(long seed) { random().setSeed(seed); } /** * Log a given exception. */ void logWarning(const Exception &); /** * The number of events to be generated in this run. */ long N() const { return theNumberOfEvents; } /** * Histogram scale. A histogram bin which has been filled with the * weights associated with the Event objects should be scaled by * this factor to give the correct cross section. */ CrossSection histogramScale() const; /** * The total integrated cross section of the processes generated in * this run. */ CrossSection integratedXSec() const; /** * The error estimate for the total integrated cross section of the * processes generated in this run. */ CrossSection integratedXSecErr() const; /** * The sum of all weight of the events generated so far. */ double sumWeights() const { return weightSum; } //@} /** @name Functions for accessing output files. */ //@{ /** * The base filename used in this run. The actual files are called * filename.run, filename.dump, * filename.out, filename.log and * filename.tex for the input configuration file, * output dump file, output file, log file, and reference * file respectively. The filename is constructed from the path() * and runName(). */ string filename() const { return path() + "/" + runName(); } /** * Return the name assigned to this run. If no name is given, the * name of the EventGenerator object is returned. */ string runName() const { return theRunName.size()? theRunName: name(); } /** * The directory in which the filename() is located */ string path() const { return thePath; } /** * Has the generator been asked to redirect everything to standard * output? */ bool useStdOut() const { return useStdout; } /** * Open all ouput files. */ void openOutputFiles(); /** * Flush the content of the internal output string stream to the .out file. */ void flushOutputFile(); /** * Close all ouput files. */ void closeOutputFiles(); /** * Return a reference to the output file stream. */ ofstream & outfile() { return theOutfile; } /** * Return a reference to the log file stream. */ ofstream & logfile() { return theLogfile; } /** * Return a reference to the reference file stream. This file is * used to output LaTeX text with information about the models used * in the run. */ ofstream & reffile() { return theReffile; } /** * This stream should be used for output of information and * statistics of an EventGenerator run in the finish() phase, after * the actual generation has finished. When used at other times, the * output will be cashed internally before written out in the * finish() phase. This is then written to the .out file, or if * useStdOut() is true, to BaseRepository::cout(). */ ostream & out(); /** * Return a reference to the stream connected to the file for logging * information. If no file is connected, BaseRepository::cout() will * be used instead. */ ostream & log(); /** * Return a reference to a stream to be used to redirect cout for * external modules which prints out messages there. The output will * instead be appended to the log() stream at the end of the run. */ ostream & misc() { return theMiscStream; } /** * Return a reference to the stream connected to the filea for * references from used objects. If no file is connected, * BaseRepository::cout() will be used instead. */ ostream & ref(); //@} /** @name Access objects included in this run. */ //@{ /** * Return the set of objects used in this run. */ const ObjectSet & objects() const { return theObjects; } /** * Return the map of objects used in this run indexed by their name. */ const ObjectMap & objectMap() const { return theObjectMap; } /** * Return a garbage collected pointer to a given object. If the * object is not included in the run, a null pointer will be * returned. */ template typename Ptr::pointer getPtr(const T &) const; /** * Return a pointer to an object present in this run given its full * name. Return the null pointer if non-existent. */ IBPtr getPointer(string name) const; /** * Return a pointer to an object of type T present in this run given * its full name. Return the null pointer if non-existent. Calls * getPointer(string) and dynamically casts the result to the * requested pointer type. */ template typename Ptr::pointer getObject(string name) const { return dynamic_ptr_cast::pointer>(getPointer(name)); } /** * Return the default object for class T. Returns the null pointer * if non-existent. */ template typename Ptr::pointer getDefault() const; /** * Create a particle instance corresponding to the given \a id * number. */ PPtr getParticle(PID id) const; /** * Return a pointer to the ParticleData object corresponding to the * given \a id number. */ PDPtr getParticleData(PID id) const; /** * Return a reference to the complete list of matchers in this * generator. */ const MatcherSet & matchers() const { return theMatchers; } /** * Return a reference to the complete map of particle data objects * in this generator, indexed by their id numbers. */ const ParticleMap & particles() const { return theParticles; } /** * Return a reference to the set of objects which have been * registered as used during the current run. */ const ObjectSet & used() const { return usedObjects; } //@} protected: /** * Check if there has been an interrupt signal from the OS. * If that's the case, finalize() is called */ void checkSignalState(); /** * Return a reference to the default RandomGenerator object in this * run. */ RandomGenerator & random() const { return *theRandom; } /** * Finish the setup of an event generator run. Set run name, all * particles, matchers and other objects to be used. Is used by the * Repository when isolating an EventGenerator. */ void setup(string newRunName, ObjectSet & newObjects, ParticleMap & newParticles, MatcherSet & newMatchers); /** @name Main virtual functions to be overridden by sub-classes. */ //@{ /** * Run this EventGenerator session. Is called from go(long,long,bool). */ virtual void doGo(long next, long maxevent, bool tics); /** * Initialize this generator. Is called from initialize(). */ virtual void doInitialize(); /** * Generate one event. Is called from shoot(). */ virtual EventPtr doShoot(); /** * Write out the number of events generated and the elapsed time in * suitable periods. */ void tic(long currev = 0, long totev = 0) const; /** * Finish generating an event constructed from the outside. Is * called by generateEvent(tEventPtr). */ virtual EventPtr doGenerateEvent(tEventPtr); /** * Finish generating an event starting from a Step constructed from * the outside. Is called by generateEvent(tStepPtr). */ virtual EventPtr doGenerateEvent(tStepPtr); //@} /** * Print the message of an exception to the log file. */ void printException(const Exception &); /** * Log a given exception. */ bool logException(const Exception &, tcEventPtr); /** * Set number of events to be generated. */ void N(long n) { theNumberOfEvents = n; } /** * Set the name of this run */ void runName(string f) { theRunName = f; } public: /** * Append a tag to the run name. */ void addTag(string tag) { runName(runName() + tag); } private: /** * Return the vector of default objects. */ const vector & defaultObjects() const { return theDefaultObjects; } /** * Access the special particles used in this generator. Not relevant * in the run phase. */ ParticleMap & localParticles() { return theLocalParticles; } /** * Access the special particles used in this generator. Not relevant * in the run phase. */ const ParticleMap & localParticles() const { return theLocalParticles; } /** * Set the directory where the output files will be stored. */ void path(string f) { thePath = f; } /** * Set a pointer to the strategy object containing a set of * non-default particles to use. */ void strategy(StrategyPtr); /** * Isolate, initialize and save this generator to a file. */ string doSaveRun(string); /** * Isolate and initialize this generator. */ string doMakeRun(string); public: /** @name The following functions may be called by objects belonging to this event generator during the initialization phase (in the doinit() function). It is typically used by objects which need to introduce other Interfaced objects depending the parameters of the StandardModel object used. Note that objects which use these functions MUST override the preInitialize() function to return true, otherwize the whole initialization procedure may be corrupted. */ //@{ /** * Register a new object to be included in the run currently being * initialized. * * @param obj (pointer to) the object being registered. * * @param fullname the full name including the directory path. Note * that although the full path is given the object will not be * inserted in the Repository, but only in this current * EventGenerator. * * @return false if another object of that name already exists. */ bool preinitRegister(IPtr obj, string fullname); /** * Create a new Interfaced object to be used in the run being * initialized. * * @param classname the class name of the object being created. * * @param fullname the full name including the directory path. Note * that although the full path is given the object will not be * inserted in the Repository, but only in this current * EventGenerator. * * @param libraries an optional list of shared libraries to be * loaded to be able to create an object of the specified class. * * @return the created object if the it was successfully * created. Return null if the object could not be created or if * another object of that name already exists. */ IPtr preinitCreate(string classname, string fullname, string libraries = ""); /** * Manipulate an interface of an Interfaced object. * * @param fullname the name including the full path of an object to * be manipulated. * * @param ifcname the name of the interface to be used. * * @param cmd the operation to be performed on the interface (set or * get). * * @param value Optional value to be passed to the interface. * * @return a string containing the result of the operation. If this * string starts with "Error: " then something went wrong. */ string preinitInterface(string fullname, string ifcname, string cmd, string value); /** * Manipulate an interface of vector type (RefVector or ParVector) * of an Interfaced object. * * @param fullname the name including the full path of an object to * be manipulated. * * @param ifcname the name of the interface to be used. * * @param index the vector index corresponding to the element to be * manipulated. * * @param cmd the operation to be performed on the interface (set, * get, insert or erase). * * @param value Optional value to be passed to the interface. * * @return a string containing the result of the operation. If this * string starts with "Error: " then something went wrong. */ string preinitInterface(string fullname, string ifcname, int index, string cmd, string value); /** * Manipulate an interface of an Interfaced object. * * @param obj the object to be manipulated. * * @param ifcname the name of the interface to be used. * * @param cmd the operation to be performed on the interface (set or * get). * * @param value Optional value to be passed to the interface. * * @return a string containing the result of the operation. If this * string starts with "Error: " then something went wrong. */ string preinitInterface(IPtr obj, string ifcname, string cmd, string value); /** * Manipulate an interface of vector type (RefVector or ParVector) * of an Interfaced object. * * @param obj the object to be manipulated. * * @param ifcname the name of the interface to be used. * * @param index the vector index corresponding to the element to be * manipulated. * * @param cmd the operation to be performed on the interface (set, * get, insert or erase). * * @param value Optional value to be passed to the interface. * * @return a string containing the result of the operation. If this * string starts with "Error: " then something went wrong. */ string preinitInterface(IPtr obj, string ifcname, int index, string cmd, string value); /** * Find a decaymode given a decay \a tag. * @return null if no decay mode was found. */ tDMPtr findDecayMode(string tag) const; /** * Create a decay mode according to the given tag. * @return null if no decay mode could be created. */ tDMPtr preinitCreateDecayMode(string tag); /** * Find a particle in this run, using its PDG name. * @return null if no particle is found. */ tPDPtr findParticle(string pdgname) const; /** * Find a matcher in this run given its \a name. * @return null if no mather is found. */ tPMPtr findMatcher(string name) const; private: /** * Used internally by preinitCreateDecayMode(); */ DMPtr constructDecayMode(string & tag); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); /** * The global libraries needed for objects used in this EventGenerator. */ const vector & globalLibraries() const { return theGlobalLibraries; } //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); /** * Additional things to do at the very end after the (do)finish(), * such as closing output files etc. */ void finally(); //@} /** * Return the set of all objects to be used in this run. */ ObjectSet & objects() { return theObjects; } /** * Return the map of all objects to be used in this run indexed by * their name. */ ObjectMap & objectMap() { return theObjectMap; } /** * Print out the .tex file with descriptions of and references to * all models used in the run. */ void generateReferences(); /** * Increase and return the count for the given exception. */ int count(const Exception &); private: /** * A vector of default objects. */ vector theDefaultObjects; /** * Map of non-default particles used in this EventGenerator. */ ParticleMap theLocalParticles; /** * Pointer to an object containing standard model parameters. */ SMPtr theStandardModel; /** * Pointer to a strategy object with other non-default particles to * be used in this EventGenerator. */ StrategyPtr theStrategy; /** * Pointer to the default RandomGenerator to be used in this run. */ RanGenPtr theRandom; /** * Pointer to the event handler used to generate the indivudual * events. */ EHPtr theEventHandler; /** * A vector of all analysis handlers to be called after each event. */ AnalysisVector theAnalysisHandlers; /** * A pointer to an associated factory objects for handling * histograms to be used by AnalysisHandlers. */ HistFacPtr theHistogramFactory; /** * A pointer to an optional event manipulator object. */ EvtManipPtr theEventManipulator; /** * The directory where the input and output files resides. */ string thePath; /** * The name of this run. */ string theRunName; /** * A reference to the output file stream. */ ofstream theOutfile; /** * A reference to the log file stream. */ ofstream theLogfile; /** * A reference to the reference file stream. */ ofstream theReffile; /** * A stream to be used to redirect cout for external modules which * prints out messages there. The output will instead be appended to * the log() stream at the end of the run. */ ostringstream theMiscStream; /** * A string stream used as a buffer for messages written to the .out * file. The .out file should in rinciple only be written to in the * end of a run, during the finish() phase, but if anything is * written before that, it will be cashed in this string stream * before written out properly in the end of the run. */ ostringstream theOutStream; /** * Remember the name of the file where the output should be * sent. This is set int openOutputFiles(). */ string theOutFileName; /** * Number of events to be generated in this run. */ long theNumberOfEvents; /** * The set of all objects to be used in this run. */ ObjectSet theObjects; /** * All objects to be used in this run mapped to their name. */ ObjectMap theObjectMap; /** * The map of all particles to be used in this run, indexed by the * id number. */ ParticleMap theParticles; /** * A vector of particles indexed by the id number for quick access. * Only particles with id number less than theQuickSize are * available. */ PDVector theQuickParticles; /** * Only particles with id number less than theQuickSize are * available in theQuickParticles. */ long theQuickSize; /** * A flag to tell if we are in the pre-initialization phase where * objects with preInitialize() functions returning true are * initialized before others. */ bool preinitializing; /** * The set of all matchers to be used in this run. */ MatcherSet theMatchers; /** * The set of objects which have actually been used in this run. */ ObjectSet usedObjects; protected: /** * The current event number; */ long ieve; /** * The sum of the weights of the events produced so far. */ double weightSum; /** * The debug level. */ int theDebugLevel; private: /** * List all modified interfaces in the log file. If positive always * do this, if negative never do it. If zero, only do it if * debugging is turned on. */ int logNonDefault; /** * If the debug level is higher than 0, print the first 'printEvent' * events to the logfile. */ int printEvent; /** * If the debug level is higher than 0, dump the complete state of * this run to the default dump file every 'dumpPeriod' events. * If 'dumpPeriod' is -1, dumping is disabled completely, * even when runs are aborted. */ long dumpPeriod; /** * If the debug level is higher than 0, step up to the highest debug * level just before the event with number debugEvent is performed. */ long debugEvent; /** * The maximum number of warnings reported of each type. If more * than maxWarnings warnings of one type is issued, the generation * will continue without reporting this warning. */ int maxWarnings; /** * The maximum number of warnings and errors reported of each * type. If more than maxErrors errors is reported for one type the * run will be aborted. Disable the check by setting to -1. */ int maxErrors; /** * A map of all Exceptions which have been caught by the event * generator and the number of time each exception type has been * caught. */ ExceptionMap theExceptions; private: /** * Utility function for the interface. */ void setLocalParticles(PDPtr pd, int); /** * Utility function for the interface. */ void insLocalParticles(PDPtr pd, int); /** * Utility function for the interface. */ void delLocalParticles(int place); /** * Utility function for the interface. */ vector getLocalParticles() const; /** * Utility function for the interface. */ void setPath(string newPath); /** * Utility function for the interface. */ string defPath() const; /** * The UseRandom object constructed for the duration of an * EventGenerator run so that the default random number generator * always can be accessed through the static methods of the * UseRandom class. */ UseRandom * theCurrentRandom; /** * The CurrentGenerator object constructed for the duration of an * EventGenerator run so that the default event generator always can * be accessed through the static methods of the CurrentGenerator * class. */ CurrentGenerator * theCurrentGenerator; /** * The currently active EventHandler. */ tEHPtr theCurrentEventHandler; /** * The currently active step handler. */ tStepHdlPtr theCurrentStepHandler; /** * Whether to use files or stdout for logging and output. */ bool useStdout; /** * The global libraries needed for objects used in this EventGenerator. */ vector theGlobalLibraries; private: /** * Describe an abstract class with persistent data. */ static ClassDescription initEventGenerator; /** * Private and non-existent assignment operator. */ EventGenerator & operator=(const EventGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of EventGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of EventGenerator. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * EventGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::EventGenerator"; } }; /** @endcond */ } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "EventGenerator.tcc" #endif #endif /* ThePEG_EventGenerator_H */ thepeg-1.8.0.orig/Repository/Repository.h0000644000175000017500000002034411747772425016661 0ustar sunsun// -*- C++ -*- // // Repository.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Repository_H #define ThePEG_Repository_H // This is the declaration of the Repository class. #include "ThePEG/Config/ThePEG.h" #include "BaseRepository.h" #include "EventGenerator.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/MatcherBase.h" namespace ThePEG { /** * Repository inherits from the BaseRepository class. While * BaseRepository is fairly general and could in principle be used for * any program where sets of InterfacedBase objects are managed, the * Repository is ThePEG specific in that it deals with ParticleData, * ParticleMatchers and EventGenerators. * * One main function is to write an EventGenerator to disk using * saveRun(). Here all objects needed for the run, including the * EventGenerator is cloned and isolated from the other objects in the * Repository (and are hence not handled by the Repository anymore) * before they are all persistently written out to disk. * * The Register() function simply pass the objects to the corresonding * method in BaseRepository, but if the object is a ParticleData or a * ParticleMatcher, they are stored separately. * * @see BaseRepository * @see InterfacedBase * @see ParticleData * @see ParticleMatcher * @see EventGenerator * */ class Repository: public BaseRepository { public: /** A map of EventGenerator objects indexed by their run name. */ typedef map GeneratorMap; public: /** @name Standsrd constructors and destructors */ //@{ /** * The default constructor is the only one that should be used. */ Repository(); /** * The destructor will do some clean-up when the last Repository is * deleted. */ ~Repository(); public: /** @name Functions for register objects in the Repository. */ //@{ /** * Register an object with BaseRepository::Register() and add it to * the list of particles or matchers if of any of those * types. */ static void Register(IBPtr); /** * Register an object with BaseRepository::Register() and add it to * the list of particles or matchers if of any of those * types. */ static void Register(IBPtr, string newName); //@} /** @name Access ParticleData and MatcherBase objects in the Repository. */ //@{ /** * Add a particle to the list of default ones. If one of the same * type alredy existed, it is removed from the list (but not from * the repository). */ static void defaultParticle(tPDPtr); /** * Get a pointer to the default particle of the given type or * generic name. */ static PDPtr defaultParticle(PID id); /** * Get a pointer to a particle based on the given path or name. The * argument is first treated as a path to an object. If no such * particle object is found, the argument is treated as a generic * particle PDGName and is searched for among the default set of * particles. */ static tPDPtr findParticle(string name); /** * Return the set of all particles in the repository. */ static const ParticleDataSet & allParticles() { return particles(); } /** * Return the set of all matchers in the repository. */ static const MatcherSet & allMatchers() { return matchers(); } /** * Find a matcher with a given generic name */ static tPMPtr findMatcher(string name); /** * Special function for copying particles. Also corresponding * anti-particle is copied to the same directory. In addition, their * decay modes are copied. */ static string copyParticle(tPDPtr, string); //@} /** @name Functions to isolate Eventgenerator objects. */ //@{ /** * Isolate an event generator, \a eg, and save it to disk in a file * named \a name (with .run appended. */ static EGPtr makeRun(tEGPtr eg, string name); /** * Isolate an event generatorn, named \a EGname, set its run \a name * and save it to a file named \a filename. */ static void saveRun(string EGname, string name, string filename); //@} /** @name I/O functions for the Repository. */ //@{ /** * Load a whole repository from the given file. All objects * previously in the Repository are discarded. Any errors will be * reported in the returned string. */ static string load(string filename); /** * Save the repository to the given file. */ static void save(string filename); /** * Save the repository to the default file. */ static void save() { save(currentFileName()); } /** * Write some statistics about the repository to the standard output. */ static void stats(ostream &); //@} /** @name Command-line interface functions. */ //@{ /** * Print out a help message. Extended text for a specific command if given. */ static void help(string command, ostream & os); /** * Remove the given object from the repository. If the object was * not present nothing will happen. */ static void remove(tIBPtr); /** * Remove objects. Remove the objects in \a rmset if there are no * other objects in the repository referring to them, otherwise * return an error message and the names of the objects refering to * them separated by new-line characters. */ static string remove(const ObjectSet & rmset); /** * Read commands from a stream and send them one by one to exec(). * * @param is the stream from which to read commands. * @param os the stream where output is written. * @param prompt before reading a command from \a is, this string is * written to \a os. */ static void read(istream & is, ostream & os, string prompt = ""); /** * Read commands from a file and send them one by one to exec(). * * Passes the call through to read(istream, ostream), but also sets * currentReadDirStack() correctly. * * Returns possible messages. * * @param filename the file from which to read commands. * @param os the stream where output is written. */ static string read(string filename, ostream & os); /** * Interpret the command in \a cmd and return possible * messages. This is the main function for the command-line * interface. The syntax is described elsewhere. The ostream * argument is currently unused. */ static string exec(string cmd, ostream &); //@} /** * Return the version number of ThePEG. */ static string version(); /** * Return a string with a ThePEG banner. */ static string banner(); private: /** * Used by Register. */ static void registerParticle(tPDPtr); /** * Used by Register. */ static void registerMatcher(tPMPtr); /** * Used by read() */ static void execAndCheckReply(string, ostream &); protected: /** @name Functions containing the static instances of objects used by the repository. */ //@{ /** * The set of default particles. */ static ParticleMap & defaultParticles(); /** * The set of all particles. */ static ParticleDataSet & particles(); /** * The set of all matchers. */ static MatcherSet & matchers(); /** * All isolated generators mapped to their run name. */ static GeneratorMap & generators(); /** * The default file name used by save(). */ static string & currentFileName(); public: /** * If non-zero the setup program will exit with this error code as * soon as an error is encountered. */ static int & exitOnError(); /** * Call this function to clean up the repository at the end of your * program if you are using the static functions directly without * going through a Repository object. There, the destructor would do * the job. */ static void cleanup(); //@} private: /** * It makes no sense to copy a Repository, so this constructor is * not implemented */ Repository(const Repository &); /** * It makes no sense to copy a Repository, so this assignment is * not implemented */ Repository & operator=(const Repository &); /** * Count the number of repositorys instantiated. */ static int ninstances; }; } #endif /* ThePEG_Repository_H */ thepeg-1.8.0.orig/Repository/BaseRepository.h0000644000175000017500000004072711747772425017463 0ustar sunsun// -*- C++ -*- // // BaseRepository.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BaseRepository_H #define ThePEG_BaseRepository_H // This is the declaration of the BaseRepository class. #include "ThePEG/Config/ThePEG.h" #include "BaseRepository.xh" #include "ThePEG/Interface/InterfaceBase.fh" #include "ThePEG/Interface/ClassDocumentation.fh" #include "ThePEG/Interface/InterfacedBase.h" #include "ThePEG/Utilities/ClassDescription.fh" namespace ThePEG { /** * BaseRepository is a purely static class which keeps a set of * InterfacedBase objects indexed by their name. The objects and their * names are divided up in a tree-like structure inspired by the Unix * file system. * * The InterfacedBase objects may be manipulated using InterfaceBase * objects. This may be done directly or via a simple command * interface using the exec() method. * * RepositoryBase is closely related to the Repository sub-class. The * division may seem unnecessary, but the idea is that BaseRepository * is a general repository for administrating and manipulating a set * of InterfacedBase objects, while the Repository adds on utilites * which are special to ThePEG where the objects are Interfaced (a * sub-class of InterfacedBase). * * @see Repository * @see InterfacedBase * @see InterfaceBase * @see Interfaced * */ class BaseRepository { public: /** A set of strings. */ typedef StringSet DirectorySet; /** A vector of character strings. */ typedef vector StringVector; /** A set of pointers to InterfaceBase objects. */ typedef set InterfaceSet; /** A map of sets of IterfaceBase objects indexed by pointers to ClassDescriptionBase objects. */ typedef map TypeInterfaceMap; /** A map of ClassDocumentationBase objects indexed by pointers to ClassDescriptionBase objects. */ typedef map TypeDocumentationMap; public: /** * Interpret the command in \a cmd and return possible * messages. This is the main function for the command-line * interface. The syntax is described elsewhere. The ostream * argument is currently unused. */ static string exec(string cmd, ostream &); /** @name Functions for adding and deleting objects and interfaces. */ //@{ /** * Register an interface. This is called automatically in the * InterfaceBase constructor and should never be called explicitly. */ static void Register(const InterfaceBase &, const type_info &); /** * Register a class documentation. This is called automatically in * the ClassDocumentationBase constructor and should never be called * explicitly. */ static void Register(const ClassDocumentationBase &, const type_info &); /** * Register a new object using the its current name. If the object * is already in the repository, nothing happens. If another object * already exists with the same name, the new object will have * #'s appended to its name to make it unique. */ static void Register(IBPtr); /** * Register a new object giving it a new \a name. If the object is * already in the repository, nothing happens. If another object * already exists with the same name, the new object will have * #'s appended to its name to make it unique. */ static void Register(IBPtr, string name); /** * Remove the given object from the repository. If the object was * not present nothing will happen. */ static void remove(tIBPtr); /** * Remove objects. Remove the objects in \a rmset if there are no * other objects in the repository referring to them, otherwise * return an error message and the names of the objects refering to * them separated by new-line characters. */ static string remove(const ObjectSet & rmset); /** * Rename a given \a object. Syntacticly the same as * remove(object); Register(object, newName);. */ static void rename(tIBPtr object, string newName); //@} /** @name Access the directory stack. */ //@{ /** * Create a new directory with the given name. If the given name * starts with a / the name is assumed to be an absolute * path, otherwise it is assumed to be a path relative to the * current directory. */ static void CreateDirectory(string); /** * Check if directory exixts. Check if the name given as argument * corresponds to an existing directory. If the argument string does * not end in a / it is assumed to be the name of an * object in a directory, and only the directory part of the name is * checked. If the given name starts with a / the name * is assumed to be an absolute path, otherwise it is assumed to be * a path relative to the current directory. * * @throws RepositoryNoDirectory if the correspinding directory is * non-existent. */ static void CheckObjectDirectory(string); /** * Check if directory exixts. Check if the name given as argument * corresponds to an existing directory. If the given name starts * with a / the name is assumed to be an absolute path, * otherwise it is assumed to be a path relative to the current * directory. * * @throws RepositoryNoDirectory if the correspinding directory is * non-existent. */ static void CheckDirectory(string); /** * Return the absolute path. If the given name starts with a * / the name is assumed to be an absolute path already, * otherwise it is assumed to be a path relative to the current * directory, and the absolute path is constructed. */ static void DirectoryAppend(string &); /** * Set the current directory to \a name. \a name can be aither a * relative or absolute path. The new directory replaces the * previous current directory on the directory stack. * * @throws RepositoryNoDirectory if the directory is non-existent. */ static void ChangeDirectory(string name); /** * Set the current directory to \a name. \a name can be aither a * relative or absolute path. The new directory is pushed onto the * directory stack. * * @throws RepositoryNoDirectory if the directory is non-existent. */ static void PushDirectory(string name); /** * Pop the directory stack. Leave the current directory and set the * directory which is on top of the popped directory stack. */ static void PopDirectory(); /** * A list of all globally loaded libraries. */ static vector & globalLibraries(); //@} /** @name Information on where to read input files. */ //@{ protected: /** * The stack of directories used by the "read" command. */ static stack & currentReadDirStack(); /** * List of directories to search for files for the "read" command. */ static vector & readDirs(); public: /** * Add a directory to readDirs(). */ static void prependReadDir(string); /** * Add a directory to readDirs(). */ static void appendReadDir(string); //@} /** @name Access objects in the repository. */ //@{ /** * Return a reference counted pointer to the given object. This * currently not needed when ThePEG is used with the * ThePEG::Pointer::RCPtr class of pointers. */ template static typename Ptr::pointer GetPtr(const T &); /** * Return a pointer of the specified type to an object with the * given name. If such an object does not exist, GetPtr will return * a null pointer. */ template static PtrType GetPtr(string); /** * Return a pointer of the specified type to an object with the * given name. If such an object does not exist an exception will be * thrown. * @throws RepositoryNotFound if the object was not found. * @throws RepositoryClassMisMatch if the object exists but is of * the wrong class. */ template static PtrType GetObject(string); /** * Return a pointer to an object with the given name or null if no * such object exists. */ static IBPtr GetPointer(string); /** * Return all objects in the directory \a name. Optionally only return * objects of class \a className or of a sub-class thereof. */ static IVector SearchDirectory(string name, string className = ""); /** * Find an object. If the \a name does not begin with '/', the * current directory is prepended. If the string is on the form * object:interface (or * object:interface[i]) and interface * corresponds to an Reference (or RefVector) interface, the * corresponding referenced object is returned. (also * object:interface:interface is allowed etc.) */ static IBPtr TraceObject(string name); /** * Return a string containing the name of the given class * description and its base classes, one on each line. */ static string GetInterfacedBaseClasses(const ClassDescriptionBase * cdb); /** * Get an object. Decompose a string of the form * object:interface or * object:vector-interface[pos]. Retrun a pointer to * the corresponding object. */ static IBPtr getObjectFromNoun(string noun); //@} /** @name Access references between object in the repository. */ //@{ /** * Get referring objects. Return all object which refers to the * given object through a Reference of RefVector interface. */ static IVector GetObjectsReferringTo(IBPtr); /** * Get direct references. Return all objects the given object refers * to directly through a Reference of RefVector interface. */ static IVector DirectReferences(IBPtr); /** * Get all references. If \a obj contains references to other objects, * either through a Reference or RefVector interface or through the * virtual getReferences member function, add these to refs. Do the * same to the references recursively. */ static void addReferences(tIBPtr obj, ObjectSet & refs); //@} /** @name Access the interfaces of the objects in the repository. */ //@{ /** * Get interfaces. Return the interfaces defined for the * InterfacedBase class with the given type_info, \a ti, mapped to * their name. If several interfaces with the same name exists only * the one which correspond to the most derived class will be given, * except if \a all is true in which case all interfaces are given * (prefixed by '+'s to become unique). */ static InterfaceMap getInterfaces(const type_info & ti, bool all = true); /** * Return an interface with the given \a name to the given \a object. */ static const InterfaceBase * FindInterface(IBPtr object, string name); /** * Get an interface name. Decompose a string of the form * object:interface or * object:vector-interface[pos]. Return the interface * name (without the [pos]). */ static string getInterfaceFromNoun(string noun); /** * Get interface index. Decompose a string of the form * object:interface or * object:vector-interface[pos]. Return the * pos part or empty string if not present. */ static string getPosArgFromNoun(string noun); /** * Return a list of the interfaces which do not have their default * values for the given objects. */ template static vector< pair > getNonDefaultInterfaces(const Cont &); //@} /** @name Manipulate objects in the repository. */ //@{ /** * Call the InterfacedBase::update() function of all objects. */ static void update(); /** * Clear the InterfacedBase::touched() flag in all objects in the * given container. */ template static void clearAll(const Cont & c) { for_each(c, mem_fun(&InterfacedBase::clear)); } /** * Set the status of all objects in the given container to * InterfacedBase::uninitialized. */ template static void resetAll(const Cont & c) { for_each(c, mem_fun(&InterfacedBase::reset)); } /** * Setup an object. Execute the InterfacedBase::readSetup() method * of \a ip with the stream \a is as argument. */ static void readSetup(tIBPtr ip, istream & is); /** * Lock the given object. Locked objects cannot be * changed through an interface. */ static void lock(tIBPtr ip) { ip->lock(); } /** * Unlock the given object. Locked objects cannot be changed through * an interface. */ static void unlock(tIBPtr ip) { ip->unlock(); } //@} /** @name Access the documentation of objects. */ //@{ /** * Return the class documentation of a given object */ static const ClassDocumentationBase * getDocumentation(tcIBPtr ip); /** * Get the description for the model implemented in the class of the * given object. */ static string getModelDescription(tcIBPtr ip); /** * Get the references for the model implemented in the class of the * given object. */ static string getModelReferences(tcIBPtr ip); //@} /** @name Manipulate the output streams of the repository. */ //@{ /** * Set the standard output stream */ static void cout(ostream & os) { coutp() = &os; } /** * Get the standard output stream */ static ostream & cout() { return *coutp(); } /** * Set the standard error stream */ static void cerr(ostream & os) { cerrp() = &os; } /** * Get the standard error stream */ static ostream & cerr() { return *cerrp(); } /** * Set the standard log stream */ static void clog(ostream & os) { clogp() = &os; } /** * Get the standard log stream */ static ostream & clog() { return *clogp(); } //@} protected: /** @name Access standard InterfacedBase functions. */ //@{ /** * Return a clone of the given object. Calls the * InterfacedBase::clone() function of \a t and casts the resulting * pointer to the correct type. */ template static typename Ptr::pointer clone(const T & t); /** * Return a clone of the given object. Calls the * InterfacedBase::fullclone() function of \a t and casts the * resulting pointer to the correct type. */ template static typename Ptr::pointer fullclone(const T & t); /** * Rebind references. For all objects directly referenced by \a obj, * replace them with the translation found in \a trans. If \a obj has a * Reference or a member of a RefVector interface which is null, and * the corresponding interface has the RefInterfaceBase::defaultIfNull() flag set, * translate the null pointer to the first acceptable object in * defaults. */ static void rebind(InterfacedBase & obj, const TranslationMap & trans, const IVector & defaults); //@} /** * Add interfaces to the given map for the class with the given * class description. Recursively do the same with the base classes. */ static void addInterfaces(const ClassDescriptionBase &, InterfaceMap &, bool all = true); /** @name Functions containing the static instances of objects used by the repository. */ //@{ /** * All InterfacedBase objects mapped to their name. */ static ObjectMap & objects(); /** * All InterfacedBase objects. */ static ObjectSet & allObjects(); /** * Sets of InterfaceBase objects mapped to the class description of * the class for which they are defined. */ static TypeInterfaceMap & interfaces(); /** * Sets of ClassDocumentationBase objects mapped to the class * description of the class for which they are defined. */ static TypeDocumentationMap & documentations(); /** * All defined directories. */ static DirectorySet & directories(); /** * The current directory stack. */ static StringVector & directoryStack(); /** * Flag to say if we are in the middle of an update procedure. */ static bool & updating(); /** * The current current standard output stream. */ static ostream *& coutp(); /** * The current current standard error stream. */ static ostream *& cerrp(); /** * The current current standard log stream. */ static ostream *& clogp(); //@} }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "BaseRepository.tcc" #endif #endif /* ThePEG_BaseRepository_H */ thepeg-1.8.0.orig/Repository/StandardRandom.cc0000644000175000017500000000440411747772425017540 0ustar sunsun// -*- C++ -*- // // StandardRandom.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StandardRandom class. // #include "StandardRandom.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr StandardRandom::clone() const { return new_ptr(*this); } IBPtr StandardRandom::fullclone() const { return new_ptr(*this); } void StandardRandom::setSeed(long seed) { if ( seed == -1 ) seed = 19940801; long ij = seed/30082; long kl = seed - 30082*ij; long i = (ij/177) % 177 + 2; long j = ij % 177 + 2; long k = (kl/169) % 178 + 1; long l = kl % 169; for ( int n = 1 ; n < 98 ; n++ ) { double s = 0.0; double t = 0.5; for ( int m = 1 ; m < 25 ; m++) { int mm = ( ( (i*j) % 179 ) * k ) % 179; i = j; j = k; k = mm; l = ( 53 * l + 1 ) % 169; if ( (l*mm % 64 ) >= 32 ) s += t; t *= 0.5; } u[n-1] = s; } c = 362436.0 / 16777216.0; cd = 7654321.0 / 16777216.0; cm = 16777213.0 / 16777216.0; i97 = 96; j97 = 32; flush(); } void StandardRandom::fill() { for ( int i = 0, N = theNumbers.size(); i < N; ++i ) { double & uni = theNumbers[i]; do { uni = u[i97] - u[j97]; if ( uni < 0.0 ) uni++; u[i97] = uni; if (i97 == 0) i97 = 96; else i97--; if (j97 == 0) j97 = 96; else j97--; c -= cd; if (c < 0.0) c += cm; uni -= c; if (uni < 0.0) uni += 1.0; } while ( uni <= 0.0 || uni >= 1.0 ); } nextNumber = theNumbers.begin(); } void StandardRandom::persistentOutput(PersistentOStream & os) const { os << u << c << cd << cm << i97 << j97; } void StandardRandom::persistentInput(PersistentIStream & is, int) { is >> u >> c >> cd >> cm >> i97 >> j97; } ClassDescription StandardRandom::initStandardRandom; void StandardRandom::Init() { static ClassDocumentation documentation ("Interface to the CLHEP::JamesRandom engine class."); } thepeg-1.8.0.orig/Repository/StandardRandom.h0000644000175000017500000000676511747772425017416 0ustar sunsun// -*- C++ -*- // // StandardRandom.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardRandom_H #define ThePEG_StandardRandom_H // This is the declaration of the StandardRandom class. #include "RandomGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" namespace ThePEG { /** * StandardRandom inherits from the RandomGenerator class and is an * interface to the CLHEP::JamesRandom engine class. * * @see \ref StandardRandomInterfaces "The interfaces" * defined for StandardRandom. */ class StandardRandom: public RandomGenerator { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ StandardRandom() : u(97) { if ( theSeed != 0 ) setSeed(theSeed); } //@} public: /** * Reset the underlying random algorithm with the given seed. If the * \a seed is set to -1 a standard seed will be used. */ virtual void setSeed(long seed); protected: /** * Fill the cache with random numbers. */ virtual void fill(); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The internal state vector. */ vector u; /** * Parameter for the internal state. */ double c; /** * Parameter for the internal state. */ double cd; /** * Parameter for the internal state. */ double cm; /** * Index for the internal state. */ int i97; /** * Index for the internal state. */ int j97; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStandardRandom; /** * Private and non-existent assignment operator. */ StandardRandom & operator=(const StandardRandom &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of StandardRandom. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of StandardRandom. */ typedef RandomGenerator NthBase; }; /** This template specialization informs ThePEG about the name of the * StandardRandom class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::StandardRandom"; } }; /** @endcond */ } #endif /* ThePEG_StandardRandom_H */ thepeg-1.8.0.orig/Repository/Strategy.fh0000644000175000017500000000066511747772425016456 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Strategy_FH #define ThePEG_Strategy_FH // // This is the forward declaration of the Strategy class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class Strategy; /** Declare a pointer to a Strategy object. */ typedef Ptr::pointer StrategyPtr; /** Declare a pointer to a const Strategy object. */ typedef Ptr::const_pointer cStrategyPtr; } #endif /* ThePEG_Strategy_FH */ thepeg-1.8.0.orig/Repository/EventGenerator.tcc0000644000175000017500000000240011747772425017745 0ustar sunsun// -*- C++ -*- // // EventGenerator.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the EventGenerator class. // namespace ThePEG { template typename Ptr::pointer EventGenerator::getPtr(const T & t) const { typedef typename Ptr::pointer ptr; ObjectSet::const_iterator it = objects().find(ptr_cast_const(&t)); return it == objects().end()? ptr(): dynamic_ptr_cast(*it); } template typename Ptr::pointer EventGenerator::getDefault() const { typedef typename Ptr::pointer ptr; ptr ret; for ( vector::const_iterator it = defaultObjects().begin(); it != defaultObjects().end(); ++it ) { ret = dynamic_ptr_cast(*it); if ( ret ) return ret; } if ( strategy() ) { for ( vector::const_iterator it = strategy()->defaultObjects().begin(); it != strategy()->defaultObjects().end(); ++it ) { ret = dynamic_ptr_cast(*it); if ( ret ) return ret; } } return ret; } } thepeg-1.8.0.orig/Repository/BaseRepository.tcc0000644000175000017500000000447411747772425020004 0ustar sunsun// -*- C++ -*- // // BaseRepository.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the BaseRepository class. // namespace ThePEG { template typename Ptr::pointer BaseRepository::GetPtr(const T & t) { typedef typename Ptr::pointer ptr; ObjectSet::iterator it = allObjects().find (IBPtr(const_cast(dynamic_cast(&t)))); return it == allObjects().end()? ptr(): dynamic_ptr_cast(*it); } template PtrType BaseRepository::GetPtr(string name) { return dynamic_ptr_cast(GetPointer(name)); } template PtrType BaseRepository::GetObject(string name) { typedef ClassTraits::value_type> Traits; IBPtr ip = GetPointer(name); if ( !ip ) throw RepositoryNotFound(name); PtrType p = dynamic_ptr_cast(ip); if ( !p ) throw RepositoryClassMisMatch(*ip, Traits::className()); return p; } template typename Ptr::pointer BaseRepository::clone(const T & t) { typedef typename Ptr::pointer ptr; const InterfacedBase & ib = t; ptr ret; try { ret = dynamic_ptr_cast(ib.clone()); } catch ( ... ) { throw BadClone(t); } if ( !ret ) throw BadClassClone(t); return ret; } template typename Ptr::pointer BaseRepository::fullclone(const T & t) { typedef typename Ptr::pointer ptr; ptr ret; try { ret = dynamic_ptr_cast(t.fullclone()); } catch ( ... ) { throw BadClone(t); } if ( !ret ) throw BadClassClone(t); return ret; } template vector< pair > BaseRepository::getNonDefaultInterfaces(const Cont & c) { vector< pair > ret; for ( typename Cont::const_iterator it = c.begin(); it != c.end(); ++it ) { InterfaceMap im = getInterfaces(typeid(**it)); for ( InterfaceMap::iterator iit = im.begin(); iit != im.end(); ++iit ) if ( iit->second->notDefault(**it) ) ret.push_back(make_pair(*it, iit->second)); } return ret; } } thepeg-1.8.0.orig/Repository/Strategy.h0000644000175000017500000001460711747772425016311 0ustar sunsun// -*- C++ -*- // // Strategy.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Strategy_H #define ThePEG_Strategy_H // This is the declaration of the Strategy class. #include "ThePEG/Config/ThePEG.h" #include "Strategy.fh" #include "ThePEG/Interface/Interfaced.h" namespace ThePEG { /** * The Strategy class represents a general strategy to be assigned to * an EventGenerator. It contains a set of default ParticleData * objects which takes presedence over the ones in the Repository * (although not over the ones in the EventGenerator). It also * contains a set of other default objects which are automatically * assigned to all Reference and RefVector interfaces which have the * InterfaceBase::defaultIfNull() flag set. In this case each of the * objects in defaultObjects() are tested in turn, and the first * object which has the correct class and can be set will be used. * * Sub-classes may implement other behaviors by overriding the * doinit() function. * * @see \ref StrategyInterfaces "The interfaces" * defined for Strategy. * @see EventGenerator * @see ParticleData * @see Repository * @see Reference * */ class Strategy: public Interfaced { public: /** @name Access the special objects in this Strategy. */ //@{ /** * Return the map of local particles indexed by their PDG id number. */ const ParticleMap & particles() const { return theParticles; } /** * A directory in the repository which will be scanned for particles * which will be included as default particles in a run. These * particles will be overridden by particles specified in * LocalParticles and default particles * specified directly in the EventGenerator. */ string localParticlesDir() const; /** * By default all particles in the Repository are included in a run, * although only one particle per PDG id number. If directories are * listed here, only particles in these will be considered for * inclusion in a run. Only particles which have a PDG id which is * not given by particles in localParticlesDir(), particles(), or in * EventGenerator::localParticles() will be considered. */ const vector & defaultParticlesDirs() const { return theDefaultParticlesDirs; } /** * Return the vector of default objects. */ const vector & defaultObjects() const { return theDefaultObjects; } //@} /** * Return a freeform version string. Client code should not rely on the * string's format. It can be used e.g. to annotate plots. */ virtual const string versionstring() const { return ""; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Return the map of local particles. */ ParticleMap & particles() { return theParticles; } private: /** * the map of default particles. */ ParticleMap theParticles; /** * A directory in the repository which will be scanned for particles * which will be included as default particles in a run. These * particles will be overridden by particles specified in * LocalParticles and default particles * specified directly in the EventGenerator. */ string theLocalParticlesDir; /** * A vector of default objects. */ vector theDefaultObjects; /** * By default all particles in the Repository are included in a run, * although only one particle per PDG id number. If directories are * listed in theDefaultParticlesDirs, only particles in these will * be considered for inclusion in a run. Only particles which have a * PDG id which is not given by particles in localParticlesDir(), * particles(), or in EventGenerator::localParticles() will be * considered. */ vector theDefaultParticlesDirs; private: /** * Utility function used by the interface. */ void setLocalParticles(PDPtr pd, int); /** * Utility function used by the interface. */ void insLocalParticles(PDPtr pd, int); /** * Utility function used by the interface. */ void delLocalParticles(int place); /** * Utility function used by the interface. */ vector getLocalParticles() const; /** * Utility function used by the interface. */ void setLocalParticlesDir(string); /** * Utility function used by the interface. */ void setDefaultParticlesDirs(string,int); /** * Utility function used by the interface. */ void insDefaultParticlesDirs(string,int); /** * Utility function used by the interface. */ static bool checkDir(string); private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStrategy; /** * Private and non-existent assignment operator. */ Strategy & operator=(const Strategy &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of Strategy. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Strategy. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * Strategy class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Strategy"; } }; /** @endcond */ } #endif /* ThePEG_Strategy_H */ thepeg-1.8.0.orig/Repository/BaseRepository.xh0000644000175000017500000000401311747772425017637 0ustar sunsun// -*- C++ -*- // // BaseRepository.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BaseRepository_XH #define ThePEG_BaseRepository_XH // // This is the declarations of the exception classes used by the // BaseRepository class. // #include "ThePEG/Interface/InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by BaseRepository if an object does not implement the InterfacedBase::clone() function properly. */ struct BadClassClone: public InterfaceException { /** Standard constructor. */ BadClassClone(const InterfacedBase &); }; /** Exception class used by BaseRepository if an objects InterfacedBase::clone() function throws an exception. */ struct BadClone: public InterfaceException { /** Standard constructor. */ BadClone(const InterfacedBase &); }; /** Exception class used by BaseRepository if the name of an object in the repository has been changed outside the repository. */ struct RepoNameException: public InterfaceException { /** Standard constructor. */ RepoNameException(string); }; /** Exception class used by BaseRepository when trying to access a non-existing directory. */ struct RepositoryNoDirectory: public InterfaceException { /** Standard constructor. */ RepositoryNoDirectory(string); }; /** Exception class used by BaseRepository when trying to access a non-existent object. */ struct RepositoryNotFound: public InterfaceException { /** Standard constructor. */ RepositoryNotFound(string name); }; /** Exception class used by BaseRepository if a specified object was not of the expected class. */ struct RepositoryClassMisMatch: public InterfaceException { /** Standard constructor. */ RepositoryClassMisMatch(const InterfacedBase & o, string name); }; /** @endcond */ } #endif /* ThePEG_BaseRepository_XH */ thepeg-1.8.0.orig/Repository/EventGenerator.fh0000644000175000017500000000050411747772425017574 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_EventGenerator_FH #define ThePEG_EventGenerator_FH // // This is the forward declaration of the EventGenerator class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class EventGenerator; ThePEG_DECLARE_CLASS_POINTERS(EventGenerator,EGPtr); } #endif /* ThePEG_EventGenerator_FH */ thepeg-1.8.0.orig/Repository/MultiEventGenerator.h0000644000175000017500000001335311747772425020447 0ustar sunsun// -*- C++ -*- // // MultiEventGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MultiEventGenerator_H #define ThePEG_MultiEventGenerator_H // This is the declaration of the MultiEventGenerator class. #include "EventGenerator.h" namespace ThePEG { /** * The MultiEventGenerator class is derived from the * EventGenerator class and is capable of making several runs with * a pre-defined set of parameter and switch values. * * With the Command interface AddInterface set of * parameters for an included object can be specified as eg. * object:interface arg1, arg2, arg3 .... The event * generator will then be run once with the specified objects * interface set to arg1, then once with * arg2 etc. If several AddInterface commands are given * the event generator will be run once for each possible combination * arguments to object interfaces. * * @see EventGenerator * */ class MultiEventGenerator: public EventGenerator { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~MultiEventGenerator(); //@} protected: /** @name Public virtual functions required by the base class. */ //@{ /** * Run this EventGenerator session. Is called from * EventGenerator::go(long,long,bool). */ virtual void doGo(long next, long maxevent, bool tics); //@} /** @name Functions used by the Command interfaces to set up the different parameters of the runs. */ //@{ /** * Used to add an interface of an object which should be used with a * set of different values. The argument should be given as * "object:interface arg1, arg2, ..." */ string addInterface(string); /** * Used to remove an interface of an object which should be used * with a set of different values. The argument should be given as * "object:interface arg1, arg2, ..." */ string removeInterface(string); //@} /** * Write out header for each sub-run. */ void heading(ostream &, long, const vector &, string) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans); /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** A vector of character strings. */ typedef vector StringVector; /** * The objects for which there are different interface settings. */ IVector theObjects; /** * The interfaces to be modified for the corresponding objects in * theObjects. */ StringVector theInterfaces; /** * If the there are positional arguments to theInterfaces these are * specified here. */ StringVector thePosArgs; /** * The arguments to be used for each of theInterfaces. */ vector theValues; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initMultiEventGenerator; /** * Private and non-existent assignment operator. */ MultiEventGenerator & operator=(const MultiEventGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of MultiEventGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MultiEventGenerator. */ typedef EventGenerator NthBase; }; /** This template specialization informs ThePEG about the name of the * MultiEventGenerator class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MultiEventGenerator"; } /** Return the name of the shared library be loaded to get access to * the MultiEventGenerator class and every other class it uses * (except the base class). */ static string library() { return "MultiEventGenerator.so"; } }; /** @endcond */ } #endif /* ThePEG_MultiEventGenerator_H */ thepeg-1.8.0.orig/Repository/EventGenerator.xh0000644000175000017500000000142511747772425017621 0ustar sunsun// -*- C++ -*- // // EventGenerator.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EventGenerator_XH #define ThePEG_EventGenerator_XH // // This is the declarations of the exception classes used by the // EventGenerator class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by EventGenerator if a directory could not be found/created. */ struct EGNoPath: public Exception { /** Standard constructor. */ EGNoPath(string); }; /** @endcond */ } #endif /* ThePEG_EventGenerator_XH */ thepeg-1.8.0.orig/Repository/UseRandom.h0000644000175000017500000001600711754473671016377 0ustar sunsun// -*- C++ -*- // // UseRandom.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_UseRandom_H #define ThePEG_UseRandom_H // This is the declaration of the UseRandom class. #include "ThePEG/Repository/RandomGenerator.h" namespace ThePEG { /** * This UseRandom class keeps a static stack of RandomGenerator * objects which can be used anywhere by any class. When an * EventGenerator is initialized or run it adds a RandomGenerator * object to the stack which can be used by any other object being * initialized or run through the static functions of the UseRandom * class. If someone needs to use an alternative RandomGenerator * object a new UseRandom object can be constructed with a pointer to * the desired RandomGenerator object as argument and that object will * the be used by the static UseRandom functions until the UseRandom * object is destructed. * * @see RandomGenerator * @see EventGenerator * */ class UseRandom { public: /** * Default constructor does nothing. */ UseRandom() : randomPushed(false) {} /** * Copy-constructor does nothing. */ UseRandom(const UseRandom &) : randomPushed(false) {} /** * Construct a new object specifying a new RandomGenerator, \a r, to * be used during this objects lifetime */ UseRandom(const RanGenPtr & r) : randomPushed(false) { if ( r ) { theRandomStack.push_back(r); randomPushed = true; } } /** * The destructor removing the RandomGenerator specified in the * constructor from the stack. */ ~UseRandom() { if ( randomPushed ) theRandomStack.pop_back(); } public: /** * Return a reference to the currently chosen RandomGenerator object. */ static RandomGenerator & current() { return *theRandomStack.back(); } /** * Return a pointer to the currently chosen RandomGenerator object. */ // static RandomEngine * currentEngine() { // return &(current().randomGenerator()); // } /** * Return a simple flat random number (from the current * RandomGenerator object) in the range ]0,1[. */ static double rnd() { return current().rnd(); } /** * Return \a n simple flat random number (from the current * RandomGenerator object) in the range ]0,1[. */ static RandomGenerator::RndVector rndvec(int n) { return current().rndvec(n); } /** * Return a simple flat random number (from the current * RandomGenerator object) in the range ]0,\a xu[. */ template static Unit rnd(Unit xu) { return current().rnd(xu); } /** * Return a simple flat random number (from the current * RandomGenerator object) in the range ]\a xl,\a xu[. */ template static Unit rnd(Unit xl, Unit xu) { return current().rnd(xl, xu); } /** * Return a true with probability \a p (default 0.5). */ static bool rndbool(double p = 0.5) { return current().rndbool(p); } /** * Return a true with probability \a p1/(\a p1+\a p2). */ static bool rndbool(double p1, double p2) { return current().rndbool(p1, p2); } /** * Return -1, 0, or 1 with relative probabilities \a p1, \a p2, \a * p3. */ static int rndsign(double p1, double p2, double p3) { return current().rndsign(p1, p2, p3); } /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a * p1). */ static int rnd2(double p0, double p1) { return current().rnd2(p0, p1); } /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a * p1+\a p2). */ static int rnd3(double p0, double p1, double p2) { return current().rnd3(p0, p1, p2); } /** * Return an integer/ \f$i\f$ with probability p\f$i\f$(\a p0+\a * p1+\a p2+\a p3). */ static int rnd4(double p0, double p1, double p2, double p3) { return current().rnd4(p0, p1, p2, p3); } /** * Return a simple flat random integrer number in the range [0,\a xu[. */ static long irnd(long xu = 2) { return long(rnd() * xu); } /** * Return a simple flat random integrer number in the range [\a xl,\a xu[. */ static long irnd(long xl, long xu) { return xl + irnd(xu-xl); } /** * Return a number between zero and infinity, distributed according * to \f$e^-x\f$. */ static double rndExp() { return current().rndExp(); } /** * Return a number between zero and infinity, distributed according * to \f$e^-{x/\mu}\f$ where \f$\mu\f$ is the \a mean value. */ template static Unit rndExp(Unit mean) { return current().rndExp(mean); } /** * Return a number distributed according to a Gaussian distribution * with zero mean and unit variance. */ static double rndGauss() { return current().rndGauss(); } /** * Return a number distributed according to a Gaussian distribution * with a given standard deviation, \a sigma, and a given \a mean. */ template static Unit rndGauss(Unit sigma, Unit mean = Unit()) { return current().rndGauss(sigma, mean); } /** * Return a positive number distributed according to a * non-relativistic Breit-Wigner with a given width, \a gamma, and a * given \a mean. */ template static Unit rndBW(Unit mean, Unit gamma) { return current().rndBW(mean, gamma); } /** * Return a positive number distributed according to a * non-relativistic Breit-Wigner with a given width, \a gamma, and a * given \a mean. The distribution is cut-off so that the number is * between \a mean - \a cut and \a mean + \a cut */ template static Unit rndBW(Unit mean, Unit gamma, Unit cut) { return current().rndBW(mean, gamma, cut); } /** * Return a positive number distributed according to a relativistic * Breit-Wigner with a given width, \a gamma, and a given \a mean. */ template static Unit rndRelBW(Unit mean, Unit gamma) { return current().rndRelBW(mean, gamma); } /** * Return a positive number distributed according to a relativistic * Breit-Wigner with a given width, \a gamma, and a given \a * mean. The distribution is cut-off so that the number is between * \a mean - \a cut and \a mean + \a cut */ template static Unit rndRelBW(Unit mean, Unit gamma, Unit cut) { return current().rndRelBW(mean, gamma, cut); } /** * Return a non-negative number generated according to a Poissonian * distribution with a given \a mean. */ static long rndPoisson(double mean) { return current().rndPoisson(mean); } private: /** * The stack of RandomGenerators requested. */ static vector theRandomStack; /** * True if this object is responsible for pushing a RandomGenerator * onto the stack. */ bool randomPushed; private: /** * Private and non-existent assignment operator. */ UseRandom & operator=(const UseRandom &); }; } #endif /* ThePEG_UseRandom_H */ thepeg-1.8.0.orig/Repository/ThePEGStrategy.h0000644000175000017500000000451311747772425017301 0ustar sunsun// -*- C++ -*- // // ThePEGStrategy.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ThePEGStrategy_H #define ThePEG_ThePEGStrategy_H // This is the declaration of the ThePEGStrategy class. #include "ThePEG/Repository/Strategy.h" namespace ThePEG { /** * The ThePEGStrategy class is a sub-class of the Strategy class, * simply implementing the correct citation for ThePEG in the * ClassDocumentation interface. * * @see Strategy * */ class ThePEGStrategy: public Strategy { public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe concrete class without persistent data. */ static NoPIOClassDescription initThePEGStrategy; /** * Private and non-existent assignment operator. */ ThePEGStrategy & operator=(const ThePEGStrategy &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of ThePEGStrategy. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ThePEGStrategy. */ typedef Strategy NthBase; }; /** This template specialization informs ThePEG about the name of the * ThePEGStrategy class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ThePEGStrategy"; } /** Return the name of the shared library be loaded to get access to * the ThePEGStrategy class and every other class it uses * (except the base class). */ static string library() { return "ThePEGStrategy.so"; } }; /** @endcond */ } #endif /* ThePEG_ThePEGStrategy_H */ thepeg-1.8.0.orig/Repository/Main.cc0000644000175000017500000000117211747772425015522 0ustar sunsun// -*- C++ -*- // // Main.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Main class. // #include "Main.h" using namespace ThePEG; AbstractNoPIOClassDescription
Main::initMain; // Definition of the static class description member. EGPtr Main::theEventGenerator; long Main::theN = 0; vector Main::theArguments; thepeg-1.8.0.orig/Repository/Repository.cc0000644000175000017500000010704611747772425017024 0ustar sunsun// -*- C++ -*- // // Repository.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Repository class. // // macro is passed in from -D compile flag #ifndef THEPEG_PKGLIBDIR #error Makefile.am needs to define THEPEG_PKGLIBDIR #endif #include "Repository.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Repository/Strategy.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Utilities/DynamicLoader.h" #include "ThePEG/Utilities/StringUtils.h" #include // readline options taken from // http://autoconf-archive.cryp.to/vl_lib_readline.html // Copyright © 2008 Ville Laurikari // Copying and distribution of this file, with or without // modification, are permitted in any medium without royalty provided // the copyright notice and this notice are preserved. #ifdef HAVE_LIBREADLINE # if defined(HAVE_READLINE_READLINE_H) # include # elif defined(HAVE_READLINE_H) # include # else extern "C" char *readline (const char *); # endif #endif #ifdef HAVE_READLINE_HISTORY # if defined(HAVE_READLINE_HISTORY_H) # include # elif defined(HAVE_HISTORY_H) # include # else extern "C" void add_history (const char *); # endif #endif using namespace ThePEG; ParticleMap & Repository::defaultParticles() { static ParticleMap theMap; return theMap; } ParticleDataSet & Repository::particles() { static ParticleDataSet theSet; return theSet; } MatcherSet & Repository::matchers() { static MatcherSet theSet; return theSet; } Repository::GeneratorMap & Repository::generators() { static GeneratorMap theMap;; return theMap; } string & Repository::currentFileName() { static string theCurrentFileName; return theCurrentFileName; } int & Repository::exitOnError() { static int exitonerror = 0; return exitonerror; } void Repository::cleanup() { generators().clear(); } void Repository::Register(IBPtr ip) { BaseRepository::Register(ip); registerParticle(dynamic_ptr_cast(ip)); registerMatcher(dynamic_ptr_cast(ip)); } void Repository::Register(IBPtr ip, string newName) { DirectoryAppend(newName); BaseRepository::Register(ip, newName); registerParticle(dynamic_ptr_cast(ip)); registerMatcher(dynamic_ptr_cast(ip)); } void Repository::registerParticle(tPDPtr pd) { if ( !pd ) return; if ( !member(particles(), pd) ) { particles().insert(pd); CreateDirectory(pd->fullName()); } if ( pd->id() == 0 ) return; if ( !member(defaultParticles(), pd->id()) ) defaultParticles()[pd->id()] = pd; for ( MatcherSet::iterator it = matchers().begin(); it != matchers().end(); ++it) (*it)->addPIfMatch(pd); } void Repository::registerMatcher(tPMPtr pm) { if ( !pm || member(matchers(), pm) ) return; pm->addPIfMatchFrom(particles()); for ( MatcherSet::iterator it = matchers().begin(); it != matchers().end(); ++it) { (*it)->addMIfMatch(pm); pm->addMIfMatch(*it); } matchers().insert(pm); } tPDPtr Repository::findParticle(string name) { tPDPtr pd; string path = name; DirectoryAppend(path); pd = dynamic_ptr_cast(GetPointer(path)); if ( pd ) return pd; for ( ParticleMap::iterator pit = defaultParticles().begin(); pit != defaultParticles().end(); ++pit ) if ( pit->second->PDGName() == name ) return pit->second; for ( ParticleDataSet::iterator pit = particles().begin(); pit != particles().end(); ++pit ) if ( (**pit).PDGName() == name ) return *pit; return pd; } tPMPtr Repository::findMatcher(string name) { for ( MatcherSet::iterator mit = matchers().begin(); mit != matchers().end(); ++mit ) if ( name == (**mit).name() ) return *mit; return tPMPtr(); } void Repository::saveRun(string EGname, string name, string filename) { EGPtr eg = BaseRepository::GetObject(EGname); EGPtr run = makeRun(eg, name); PersistentOStream os(filename, globalLibraries()); if ( ThePEG_DEBUG_ITEM(3) ) clog() << "Saving event generator '" << name << "'... " << flush; os << run; if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done" << endl; } EGPtr Repository::makeRun(tEGPtr eg, string name) { // Clone all objects relevant for the OldEventGenerator. This is // the OldEventGenerator itself, all particles and all particle // matchers. 'localObject' is the set of all object refered to by // the generator particles and matcher and in the end these are // cloned as well. // Clone all Particle matchers if ( ThePEG_DEBUG_ITEM(3) ) clog() << "Making event generator '" << name << "':" << endl << "Updating all objects... " << flush; if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done\nCloning matchers and particles... " << flush; MatcherSet localMatchers; ObjectSet localObjects; ObjectSet clonedObjects; TranslationMap trans; for ( MatcherSet::iterator mit = matchers().begin(); mit != matchers().end(); ++mit ) { PMPtr pm = clone(**mit); pm->clear(); trans[*mit] = pm; localMatchers.insert(pm); clonedObjects.insert(pm); localObjects.insert(*mit); addReferences(*mit, localObjects); } // Clone the particles. But only the ones which should be // used. First select the localParticles of the EventGenerator, then // add particles from the strategy of the EventGenerator which have // not already been selected. Finally add particles from the global // default if no default directories has been specified in the // strategy which have not already been selected. PDVector allParticles; for ( ParticleMap::const_iterator pit = eg->localParticles().begin(); pit != eg->localParticles().end(); ++pit ) allParticles.push_back(pit->second); if ( eg->strategy() ) { tcStrategyPtr strat = eg->strategy(); for ( ParticleMap::const_iterator pit = strat->particles().begin(); pit != strat->particles().end(); ++pit ) allParticles.push_back(pit->second); vector pdirs; if ( eg->strategy()->localParticlesDir().length() ) pdirs.push_back(eg->strategy()->localParticlesDir()); pdirs.insert(pdirs.end(), eg->strategy()->defaultParticlesDirs().begin(), eg->strategy()->defaultParticlesDirs().end()); for ( int i = 0, N = pdirs.size(); i < N; ++i ) { string dir = pdirs[i]; for ( ParticleDataSet::iterator pit = particles().begin(); pit != particles().end(); ++pit ) if ( (**pit).fullName().substr(0, dir.length()) == dir ) allParticles.push_back(*pit); } } if ( !eg->strategy() || eg->strategy()->defaultParticlesDirs().empty() ) for ( ParticleMap::iterator pit = defaultParticles().begin(); pit != defaultParticles().end(); ++pit ) allParticles.push_back(pit->second); for ( ParticleDataSet::iterator pit = particles().begin(); pit != particles().end(); ++pit ) allParticles.push_back(*pit); ParticleMap localParticles; for ( PDVector::iterator pit = allParticles.begin(); pit != allParticles.end(); ++pit ) { ParticleMap::iterator it = localParticles.find((**pit).id()); if ( it == localParticles.end() ) { PDPtr pd = clone(**pit); trans[*pit] = pd; localParticles[pd->id()] = pd; clonedObjects.insert(pd); localObjects.insert(*pit); addReferences(*pit, localObjects); } else { trans[*pit] = it->second; } } if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done\nCloning other objects... " << flush; // Clone the OldEventGenerator object to be used: localObjects.insert(eg); addReferences(eg, localObjects); EGPtr egrun = clone(*eg); clonedObjects.insert(egrun); trans[eg] = egrun; for ( ObjectSet::iterator it = localObjects.begin(); it != localObjects.end(); ++it ) { if ( member(trans.map(), *it) ) continue; IBPtr ip = clone(**it); trans[*it] = ip; clonedObjects.insert(ip); } if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done\nRebind references... " << flush; IVector defaults; trans.translate(inserter(defaults), eg->defaultObjects().begin(), eg->defaultObjects().end()); if ( eg->strategy() ) trans.translate(inserter(defaults), eg->strategy()->defaultObjects().begin(), eg->strategy()->defaultObjects().end()); for ( ObjectSet::iterator it = clonedObjects.begin(); it != clonedObjects.end(); ++it ) { dynamic_cast(**it).theGenerator = egrun; rebind(**it, trans, defaults); } // Now, dependencies may have changed, so we do a final round of // updates. if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done\nUpdating cloned objects... " << flush; if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done\nInitializing... " << flush; clonedObjects.erase(egrun); egrun->setup(name, clonedObjects, localParticles, localMatchers); if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done" << endl; generators()[name] = egrun; return egrun; } PDPtr Repository::defaultParticle(PID id) { ParticleMap::iterator pit = defaultParticles().find(id); return pit == defaultParticles().end()? PDPtr(): pit->second; } void Repository::defaultParticle(tPDPtr pdp) { if ( pdp ) defaultParticles()[pdp->id()] = pdp; } struct ParticleOrdering { bool operator()(tcPDPtr p1, tcPDPtr p2) { return abs(p1->id()) > abs(p2->id()) || ( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) || ( p1->id() == p2->id() && p1->fullName() > p2->fullName() ); } }; struct MatcherOrdering { bool operator()(tcPMPtr m1, tcPMPtr m2) { return m1->name() < m2->name() || ( m1->name() == m2->name() && m1->fullName() < m2->fullName() ); } }; struct InterfaceOrdering { bool operator()(tcIBPtr i1, tcIBPtr i2) { return i1->fullName() < i2->fullName(); } }; void Repository::save(string filename) { if ( ThePEG_DEBUG_ITEM(3) ) clog() << "saving '" << filename << "'... " << flush; PersistentOStream os(filename, globalLibraries()); set part(particles().begin(), particles().end()); set match(matchers().begin(), matchers().end()); os << objects().size(); for ( ObjectMap::iterator it = objects().begin(); it != objects().end(); ++it ) os << it->second; os << defaultParticles() << part << match << generators() << directories() << directoryStack() << globalLibraries(); if ( ThePEG_DEBUG_ITEM(3) ) clog() << "(" << objects().size() << " objects in " << directories().size() << " directories) done" << endl; } string Repository::load(string filename) { if ( ThePEG_DEBUG_ITEM(3) ) clog() << "loading '" << filename << "'... " << flush; currentFileName() = filename; PersistentIStream * is = new PersistentIStream(filename); if ( !*is ) { delete is; // macro is passed in from -D compile flag string fullpath = string(THEPEG_PKGLIBDIR) + '/' + filename; is = new PersistentIStream(fullpath); if ( !*is ) { delete is; return "Error: Could not find repository '" + filename + "'."; } } *is >> allObjects() >> defaultParticles() >> particles() >> matchers() >> generators() >> directories() >> directoryStack() >> globalLibraries(); delete is; objects().clear(); for ( ObjectSet::iterator it = allObjects().begin(); it != allObjects().end(); ++it ) objects()[(**it).fullName()] = *it; if ( ThePEG_DEBUG_ITEM(3) ) clog() << "(" << objects().size() << " objects in " << directories().size() << " directories) done\nUpdating... " << flush; BaseRepository::resetAll(allObjects()); BaseRepository::update(); if ( ThePEG_DEBUG_ITEM(3) ) clog() << "done" << endl; return ""; } void Repository::stats(ostream & os) { os << "number of objects: " << setw(6) << objects().size() << endl; os << "number of objects (all): " << setw(6) << allObjects().size() << endl; os << "number of particles: " << setw(6) << particles().size() << endl; os << "number of matchers: " << setw(6) << matchers().size() << endl; } string Repository::read(string filename, ostream & os) { ifstream is; string file = filename; if ( file[0] == '/' ) is.open(file.c_str()); else { vector dirs(readDirs().rbegin(), readDirs().rend()); dirs.push_back(currentReadDirStack().top()); while ( dirs.size() ) { string dir = dirs.back(); if ( dir != "" && dir[dir.length() -1] != '/' ) dir += '/'; file = dir + filename; is.clear(); is.open(file.c_str()); if ( is ) break; dirs.pop_back(); } } if ( !is ) { return "Error: Could not find input file '" + filename + "'"; } currentReadDirStack().push(StringUtils::dirname(file)); try { Repository::read(is, os); currentReadDirStack().pop(); } catch ( ... ) { currentReadDirStack().pop(); throw; } return ""; } void Repository::execAndCheckReply(string line, ostream & os) { string reply = exec(line, os); if ( reply.size() ) os << reply; if ( reply.size() && reply[reply.size()-1] != '\n' ) os << endl; if ( exitOnError() && reply.size() >= 7 && reply.substr(0, 7) == "Error: " ) exit(exitOnError()); } void Repository::read(istream & is, ostream & os, string prompt) { #ifdef HAVE_LIBREADLINE if ( is == std::cin ) { char * line_read = 0; do { if ( line_read ) { free(line_read); line_read = 0; } line_read = readline(prompt.c_str()); if ( line_read && *line_read ) { string line = line_read; while ( !line.empty() && line[line.size() - 1] == '\\' ) { line[line.size() - 1] = ' '; char * cont_read = readline("... "); if ( cont_read ) { line += cont_read; free(cont_read); } } if ( prompt.empty() && ThePEG_DEBUG_LEVEL > 0 ) os << "(" << line << ")" << endl; #ifdef HAVE_READLINE_HISTORY add_history(line.c_str()); #endif // HAVE_READLINE_HISTORY execAndCheckReply(line, os); } } while ( line_read ); } else { #endif // HAVE_LIBREADLINE string line; if ( prompt.size() ) os << prompt; while ( getline(is, line) ) { while ( !line.empty() && line[line.size() - 1] == '\\' ) { line[line.size() - 1] = ' '; string cont; if ( prompt.size() ) os << "... "; getline(is, cont); line += cont; } if ( prompt.empty() && ThePEG_DEBUG_LEVEL > 0 ) os << "(" << line << ")" << endl; execAndCheckReply(line, os); if ( prompt.size() ) os << prompt; } #ifdef HAVE_LIBREADLINE } #endif if ( prompt.size() ) os << endl; } string Repository::copyParticle(tPDPtr p, string newname) { DirectoryAppend(newname); string newdir = newname.substr(0, newname.rfind('/')+1); newname =newname.substr(newname.rfind('/')+1); if ( newname.empty() ) newname = p->name(); if ( GetPointer(newdir + newname) ) return "Error: Cannot create particle " + newdir + newname + ". Object already exists."; if ( p->CC() && GetPointer(newdir + p->CC()->name()) ) return "Error: Cannot create anti-particle " + newdir + newname + ". Object already exists."; PDPtr pd = p->pdclone(); Register(pd, newdir + newname); pd->theDecaySelector.clear(); pd->theDecayModes.clear(); if ( p->CC() ) { PDPtr apd = p->CC()->pdclone(); Register(apd, newdir + apd->name()); apd->theDecaySelector.clear(); apd->theDecayModes.clear(); pd->theAntiPartner = apd; apd->theAntiPartner = pd; pd->syncAnti = p->syncAnti; apd->syncAnti = p->CC()->syncAnti; } HoldFlag<> dosync(pd->syncAnti, true); for ( DecaySet::const_iterator it = p->theDecayModes.begin(); it != p->theDecayModes.end(); ++it ) pd->addDecayMode(*it); return ""; } void Repository::remove(tIBPtr ip) { ObjectMap::iterator it = objects().find(ip->fullName()); if ( it == objects().end() || ip != it->second ) return; objects().erase(it); allObjects().erase(ip); if ( dynamic_ptr_cast(ip) ) { particles().erase(dynamic_ptr_cast(ip)); defaultParticles().erase(dynamic_ptr_cast(ip)->id()); } if ( dynamic_ptr_cast(ip) ) matchers().erase(dynamic_ptr_cast(ip)); } string Repository::remove(const ObjectSet & rmset) { ObjectSet refset; for ( ObjectMap::const_iterator i = objects().begin(); i != objects().end(); ++i ) { if ( member(rmset, i->second) ) continue; IVector ov = DirectReferences(i->second); for ( int j = 0, M = ov.size(); j < M; ++j ) if ( member(rmset, ov[j]) ) { refset.insert(i->second); break; } } if ( refset.empty() ) { for ( ObjectSet::iterator oi = rmset.begin(); oi != rmset.end(); ++oi ) remove(*oi); return ""; } string ret = "Error: cannot remove the objects because the following " "objects refers to some of them:\n"; for ( ObjectSet::iterator oi = refset.begin(); oi != refset.end(); ++oi ) ret += (**oi).fullName() + "\n"; return ret; } string Repository::exec(string command, ostream & os) { string cpcmd = command; try { string verb = StringUtils::car(command); command = StringUtils::cdr(command); if ( verb == "help" ) { help(command, os); return ""; } if ( verb == "rm" ) { ObjectSet rmset; while ( !command.empty() ) { string name = StringUtils::car(command); DirectoryAppend(name); IBPtr obj = GetPointer(name); if ( !obj ) return "Error: Could not find object named " + name; rmset.insert(obj); command = StringUtils::cdr(command); } return remove(rmset); } if ( verb == "rmdir" || verb == "rrmdir" ) { string dir = StringUtils::car(command); DirectoryAppend(dir); if ( dir[dir.size() - 1] != '/' ) dir += '/'; if ( !member(directories(), dir) ) return verb == "rmdir"? "Error: No such directory.": ""; IVector ov = SearchDirectory(dir); if ( ov.size() && verb == "rmdir" ) return "Error: Cannot remove a non-empty directory. " "(Use rrmdir do remove all object and subdirectories.)"; ObjectSet rmset(ov.begin(), ov.end()); string ret = remove(rmset); if ( !ret.empty() ) return ret; StringVector dirs(directories().begin(), directories().end()); for ( int i = 0, N = dirs.size(); i < N; ++ i ) if ( dirs[i].substr(0, dir.size()) == dir ) directories().erase(dirs[i]); for ( int i = 0, N = directoryStack().size(); i < N; ++i ) if ( directoryStack()[i].substr(0, dir.size()) == dir ) directoryStack()[i] = '/'; return ""; } if ( verb == "cp" ) { string name = StringUtils::car(command); DirectoryAppend(name); tPDPtr p = dynamic_ptr_cast(GetPointer(name)); if ( p ) return copyParticle(p, StringUtils::cdr(command)); return BaseRepository::exec(cpcmd, os); } if ( verb == "setup" ) { string name = StringUtils::car(command); DirectoryAppend(name); IBPtr obj = GetPointer(name); if ( !obj ) return "Error: Could not find object named " + name; istringstream is(StringUtils::cdr(command)); readSetup(obj, is); // A particle may have been registered before but under the wrong id(). registerParticle(dynamic_ptr_cast(obj)); return ""; } if ( verb == "decaymode" ) { string tag = StringUtils::car(command); DMPtr dm = DecayMode::constructDecayMode(tag); if ( !dm ) return "Error: Could not create decay mode from the tag " + StringUtils::car(command); istringstream is(StringUtils::cdr(command)); readSetup(dm, is); if ( !dm->CC() ) return ""; if ( dm->CC()->parent()->synchronized() ) { dm->CC()->synchronize(); return ""; } if ( !dm->CC()->decayer() ) return FindInterface(dm, "Decayer")-> exec(*dm->CC(), "set", dm->decayer()->fullName()); return ""; } if ( verb == "makeanti" ) { string name = StringUtils::car(command); DirectoryAppend(name); tPDPtr p = dynamic_ptr_cast(GetPointer(name)); if ( !p ) return "Error: No particle named " + name; name = StringUtils::car(StringUtils::cdr(command)); DirectoryAppend(name); tPDPtr ap = dynamic_ptr_cast(GetPointer(name)); if ( !ap ) return "Error: No particle named " + name; ParticleData::antiSetup(PDPair(p, ap)); return ""; } if ( verb == "read" ) { string filename = StringUtils::car(command); return read(filename, os); } if ( verb == "load" ) { return load(StringUtils::car(command)); } if ( verb == "save" ) { save(StringUtils::car(command)); return ""; } if ( verb == "lsruns" ) { string ret; for ( GeneratorMap::iterator ieg = generators().begin(); ieg != generators().end(); ++ieg ) ret += ieg->first + "\n"; return ret; } if ( verb == "makerun" ) { string runname = StringUtils::car(command); string generator = StringUtils::car(StringUtils::cdr(command)); DirectoryAppend(generator); EGPtr eg = BaseRepository::GetObject(generator); makeRun(eg, runname); return ""; } if ( verb == "rmrun" ) { string runname = StringUtils::car(command); generators().erase(runname); return ""; } if ( verb == "saverun" || verb == "saverunfile" || verb == "run" ) { string runname = StringUtils::car(command); string generator = StringUtils::car(StringUtils::cdr(command)); DirectoryAppend(generator); GeneratorMap::iterator ieg = generators().find(runname); EGPtr eg; if ( ieg == generators().end() ) { eg = BaseRepository::GetObject(generator); eg = makeRun(eg, runname); } else eg = ieg->second; if ( !eg ) return "Error: Could not create/find run named'" + runname + "'."; if ( verb == "run" ) eg->go(); else if ( verb == "saverunfile" ) { string file = generator; PersistentOStream os(file, globalLibraries()); os << eg; if ( !os ) return "Save failed! (I/O error)"; } else { string file = eg->path() + "/" + eg->filename() + ".run"; PersistentOStream os(file, globalLibraries()); os << eg; if ( !os ) return "Save failed! (I/O error)"; } return ""; } if ( verb == "removerun" ) { string runname = StringUtils::car(command); GeneratorMap::iterator ieg = generators().find(runname); if ( ieg != generators().end() ) { generators().erase(ieg); return ""; } else return "Error: No run named '" + runname + "' available."; } if ( verb == "create" ) { string className = StringUtils::car(command); command = StringUtils::cdr(command); string name = StringUtils::car(command); const ClassDescriptionBase * db = DescriptionList::find(className); command = StringUtils::cdr(command); while ( !db && command.length() ) { string library = StringUtils::car(command); command = StringUtils::cdr(command); DynamicLoader::load(library); db = DescriptionList::find(className); } if ( !db ) { string msg = "Error: " + className + ": No such class found."; if ( !DynamicLoader::lastErrorMessage.empty() ) msg += "\nerror message from dynamic loader:\n" + DynamicLoader::lastErrorMessage; return msg; } IBPtr obj = dynamic_ptr_cast(db->create()); if ( !obj ) return "Error: Could not create object of this class class."; if ( name.empty() ) return "Error: No name specified."; Register(obj, name); return ""; } if ( verb == "defaultparticle" ) { while ( !command.empty() ) { string name = StringUtils::car(command); DirectoryAppend(name); tPDPtr p = dynamic_ptr_cast(GetPointer(name)); if ( !p ) return "Error: No particle named " + name; defaultParticle(p); command = StringUtils::cdr(command); } return ""; } if ( verb == "EXITONERROR" ) { exitOnError() = 1; return ""; } } catch (const Exception & e) { e.handle(); return "Error: " + e.message(); } return BaseRepository::exec(cpcmd, os); } void Repository::help(string cmd, ostream & os) { cmd = StringUtils::car(cmd); if ( cmd == "cd" ) os << "Usage: cd " << endl << "Set the current directory to ." << endl; else if ( cmd == "mkdir" ) os << "Usage: mkdir " << endl << "Create a new directory called with the given path name." << endl; else if ( cmd == "rmdir" ) os << "Usage: rmdir " << endl << "Remove an empty directory." << endl; else if ( cmd == "rrmdir" ) os << "Usage: rrmdir " << endl << "Remove a directory and everything that is in it recursively." << endl << "Will only succeed if no other objects refers to the ones to " << "be deleted." << endl; else if ( cmd == "cp" ) os << "Usage: cp " << endl << "Copy the given object to a new object with the given name." << endl; else if ( cmd == "setup" ) os << "Usage: setup ..." << endl << "Tell a given object to read information given by the arguments." << endl; else if ( cmd == "decaymode" ) os << "Usage: decaymode " << endl << "Construct a decay mode from the given decay tag. The resulting " << "object will be inserted in the directory with the same path as " << "the decaying particle object. The given brancing fraction will " << "be set as well as the given decayer object. If the mode should " << "be switched on by default 1(on) should be specified (otherwise " << "0(off))." << endl; else if ( cmd == "makeanti" ) os << "Usage: makeanti " << endl << "Indicate that the two given particle objects are eachothers " << "anti-partnets." << endl; else if ( cmd == "read" ) os << "Usage: read " << endl << "Read more commands from the given file. The file name can be " << "given relative to the current directory in the shell, or " << "relative to standard directories, or as an absolute path." << endl; else if ( cmd == "load" ) os << "Usage: load " << endl << "Discard everything in the reopsitory and read in a completely " << "new repository from the given file." << endl; else if ( cmd == "save" ) os << "Usage: save " << endl << "Save the complete repository to the given file." << endl; else if ( cmd == "lsruns" ) os << "Usage: lsruns" << endl << "List the run names of all initialized event generators." << endl; else if ( cmd == "makerun" ) os << "Usage: makerun " << endl << "Initialize the given event generator and assign a run name." << endl; else if ( cmd == "rmrun" ) os << "Usage: rmrun " << endl << "Remove the initialized event generator given by the run name." << endl; else if ( cmd == "saverun" ) os << "Usage: saverun " << endl << "Initialize the given event generator and assign a run name " << "and save it to a file named .run" << endl; else if ( cmd == "run" ) os << "Usage: run " << endl << "Run the initialized event generator given b the run name." << endl; else if ( cmd == "create" ) os << "Usage: create {}" << endl << "Create an object of the given class and assign the given name. " << "Optionally supply a dynamically loaded library where the class " << "is included." << endl; else if ( cmd == "pushd" ) os << "Usage: pushd " << endl << "Set the current directory to , but keep the previous " << "working directory on the directory stack." << endl; else if ( cmd == "popd" ) os << "Usage: popd" << endl << "Leave the current working directory and set the current " << "directory to the previous one on the directory stack." << endl; else if ( cmd == "pwd" ) os << "Usage: pwd" << endl << "Print the current working directory." << endl; else if ( cmd == "dirs" ) os << "Usage: dirs" << endl << " Print the contents of the directory stack." << endl; else if ( cmd == "mv" ) os << "Usage: mv " << endl << "Rename the given object to a new path name." << endl; else if ( cmd == "ls" ) os << "Usage: ls {}" << endl << "List the objects and subdirectories in the current or given " << "directory." << endl; else if ( cmd == "library" ) os << "Usage: library " << endl << "Make new classes available to the repository by dynamically " << "linking the given library." << endl; else if ( cmd == "globallibrary" ) os << "Usage: globallibrary " << endl << "Make new classes available to the repository by dynamically " << "linking the given library. If this repository is saved and read " << "in again, this library will be linked in from the beginning." << endl; else if ( cmd == "rmgloballibrary" ) os << "Usage: rmgloballibrary " << endl << "Remove a dynamic library previously added with globallibrary." << endl; else if ( cmd == "appendpath" ) os << "Usage: appendpath " << endl << "Add a search path for dynamic libraries to the end of the " << "search list." << endl; else if ( cmd == "lspaths" ) os << "Usage: lspaths" << endl << "List search paths for dynamic libraries." << endl; else if ( cmd == "prependpath" ) os << "Usage: prependpath " << endl << "Add a search path for dynamic libraries to the beginning of the " << "search list." << endl; else if ( cmd == "doxygendump" ) os << "Usage: doxygendump " << endl << "Extract doxygen documentation of all loaded classes in the " << "given name space and weite it to a file.." << endl; else if ( cmd == "mset" || cmd == "minsert" || cmd == "mdo" ) os << "Usage: " << cmd << " " << endl << "Recursively find in the given directory all objects of the " << "given class and call '" << cmd.substr(1) << "' with the given value for the given interface." << endl; else if ( cmd == "msetdef" || cmd == "mget" || cmd == "mdef" || cmd == "mmin" || cmd == "mmax" || cmd == "merase" ) os << "Usage: " << cmd << " " << endl << "Recursively find in the given directory all objects of the given " << "class and call '" << cmd.substr(1) << "' for the given interface." << endl; else if ( cmd == "set" ) os << "Usage: set : " << endl << "Set the interface for the given object to the given value." << endl; else if ( cmd == "setdef" ) os << "Usage: setdef :" << endl << "Set the interface for the given object to its default value." << endl; else if ( cmd == "insert" ) os << "Usage: insert : " << endl << "Insert a value in the vector interface of the given object." << endl; else if ( cmd == "erase" ) os << "Usage: erase :" << endl << "Erase a value from the vector interface of the given object." << endl; else if ( cmd == "do" ) os << "Usage: do : " << endl << "Call the command interface of the given object with the " << "given arguments." << endl; else if ( cmd == "get" ) os << "Usage: get :" << endl << "Print the value of the interface of the given object." << endl; else if ( cmd == "def" ) os << "Usage: def :" << endl << "Print the default value of the interface of the given object." << endl; else if ( cmd == "min" ) os << "Usage: min :" << endl << "Print the minimum value of the interface of the given object." << endl; else if ( cmd == "max" ) os << "Usage: max :" << endl << "Print the maximum value of the interface of the given object." << endl; else if ( cmd == "describe" ) os << "Usage: describe {:}" << endl << "Describe the given object or an interface of the object." << endl; else if ( cmd == "lsclass" ) os << "Usage: lsclass" << endl << "List all classes available in the repository." << endl; else if ( cmd == "all" ) { os << "Available commands:" << endl << "* cd, mkdir, rmdir, rrmdir, pwd, cp, mv, rm, pushd, popd, dirs, ls:\n" << " Manipulate the repository structure. Analogous to unix " << "shell commands." << endl << "* create, setup, decaymode makeanti:\n" << " Create or setup an object." << endl << "* set, get, insert, erase, do, detdef, def, min, max, describe\n" << " mset, minsert, mdo, msetdef, mdef, mmin, mmax, merase:\n" << " Manipulate interfaces to objects." << endl << "* makerun, saverun, run, lsruns, rmrun:\n" << " Create and handle initialized event genrators which can be run." << endl << "* read, load, library globallibrary, rmgloballibrary,\n" << " appendpath, prependpath, lspaths, doxygendump:\n" << " Handle files external files and libraries." << endl; os << "Do 'help syntax' for help on syntax." << endl << "Do 'help ' for help on a particular command." << endl; } else if ( cmd == "syntax" ) os << "* = '/' | | /" << endl << " = | / | :\n" << " Analogous to a unix file structure, an object can be " << "specified with an\n absolute path or a path relative to " << "the current directory." << endl << "* = |[]" << endl << " An interface can be a parameter (floating point, integer or " << "string),\n a switch (integer, possibly named), a reference to " << "another object in the\n repository or a command which takes " << "an arbitrary string as argument.\n There are also vector interfaces " << "of parameters and references for which\n an index must be supplied." << endl; else { if ( !cmd.empty() ) os << "No command '" << cmd << "' found." << endl; os << "Common commands:" << endl << "* cd, mkdir, rmdir, pwd, cp, mv, rm:\n" << " Manipulate the repository structure. Analogous to unix " << "shell commands." << endl << "* create, setup:\n" << " Create an object." << endl << "set, get, insert, erase, do:\n" << " Manipulate interfaces to objects." << endl << "* makerun, saverun, run, lsruns:\n" << " Create and handle initialized event genrators which can be run." << endl; os << "Do 'help all' for a complete list of commands." << endl << "Do 'help syntax' for help on syntax." << endl << "Do 'help ' for help on a particular command." << endl; } } Repository::Repository() { ++ninstances; } Repository::~Repository() { --ninstances; if ( ninstances <= 0 ) { generators().clear(); } } int Repository::ninstances = 0; string Repository::version() { return PACKAGE_VERSION; } string Repository::banner() { string line = ">>>>>>>>> ThePEG - Toolkit for HEP Event Generation - version " + Repository::version() + " "; line += string(78 - line.size(), '<'); return string(78, '>') + "\n" + line + "\n" + string(78, '<') + "\n"; } thepeg-1.8.0.orig/Repository/UseRandom.cc0000644000175000017500000000076311747772425016540 0ustar sunsun// -*- C++ -*- // // UseRandom.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the UseRandom class. // #include "UseRandom.h" using namespace ThePEG; vector UseRandom::theRandomStack; thepeg-1.8.0.orig/Repository/Main.h0000644000175000017500000000616611747772425015374 0ustar sunsun// -*- C++ -*- // // Main.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_Main_H #define THEPEG_Main_H // This is the declaration of the Main class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Repository/EventGenerator.h" namespace ThePEG { /** * This is a base class for classes implementing a main steering * routine for running an EventGenerator, in case the standard * 'go()' function in the EventGenerator is not enough. An example * is a EventGenerator where the class deriving from Main specifies an * initial set of partons which should be cascaded and hadronized etc. * * The derived class will be dynamically loaded by the standard * runThePEG program and the static Init() function will * be run. The loaded EventGenerator will then be available in the * static eventGenerator() function. In addition the number of events * requested from the command line will be available from the N() * function. All other command-line arguments will be available from * the arguments() function. * * @see EventGenerator */ class Main: public Base { public: /** * Set the global event generator. */ static void eventGenerator(tEGPtr eg) { theEventGenerator = eg; } /** * Get the global event generator. */ static tEGPtr eventGenerator() { return theEventGenerator; } /** * Set the number of events requested. */ static void N(long n) { theN = n; } /** * Get the number of events requested. */ static long N() { return theN; } /** * Set the command-line arguments. */ static void arguments(const vector & args) { theArguments = args; } /** * Get the command-line arguments. */ static const vector & arguments() { return theArguments; } public: /** * Standard Init function used to initialize the interfaces. */ static void Init() {} private: /** * The global event generator. */ static EGPtr theEventGenerator; /** * The number of events requested. */ static long theN; /** * The command-line arguments. */ static vector theArguments; private: /** * Describe an abstract base class without persistent data. */ static AbstractNoPIOClassDescription
initMain; /** * Private and non-existent assignment operator. */ Main & operator=(const Main &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of Main. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Main. */ typedef int NthBase; }; /** This template specialization informs ThePEG about the name of the * Main class. */ template <> struct ClassTraits
: public ClassTraitsBase
{ /** Return a platform-independent class name */ static string className() { return "ThePEG::Main"; } }; /** @endcond */ } #endif /* THEPEG_Main_H */ thepeg-1.8.0.orig/Repository/Strategy.cc0000644000175000017500000001501111747772425016435 0ustar sunsun// -*- C++ -*- // // Strategy.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Strategy class. // #include "Strategy.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ParVector.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Utilities/Throw.h" using namespace ThePEG; string Strategy::localParticlesDir() const { return theLocalParticlesDir; } bool Strategy::checkDir(string x) { if ( x == "" ) return false; if ( x[0] != '/' ) Throw() << "Directory name must start with a '/'." << Exception::setuperror; if ( x[x.length() - 1] != '/' ) x += '/'; try { Repository::CheckObjectDirectory(x); } catch ( Exception & e ) { e.handle(); Throw() << "No directory named " << x << " in the repository." << Exception::setuperror; } return true; } void Strategy::setDefaultParticlesDirs(string dir, int i) { if ( i < 0 || unsigned(i) >= theDefaultParticlesDirs.size() ) Throw() << "Index out of range in DefaultParticlesDirs" << Exception::setuperror; if ( !checkDir(dir) ) Throw() << "Empty directory name not allowd in DefaultParticlesDirs" << Exception::setuperror; theDefaultParticlesDirs[i] = dir; } void Strategy::insDefaultParticlesDirs(string dir, int i) { if ( i < 0 || unsigned(i) > theDefaultParticlesDirs.size() ) Throw() << "Index out of range in DefaultParticlesDirs" << Exception::setuperror; if ( !checkDir(dir) ) Throw() << "Empty directory name not allowd in DefaultParticlesDirs" << Exception::setuperror; theDefaultParticlesDirs.insert(theDefaultParticlesDirs.begin() + i, dir); } void Strategy::setLocalParticlesDir(string x) { if ( checkDir(x) ) theLocalParticlesDir = x; } IBPtr Strategy::clone() const { return new_ptr(*this); } IBPtr Strategy::fullclone() const { return new_ptr(*this); } void Strategy::persistentOutput(PersistentOStream & os) const { os << theParticles << theLocalParticlesDir << theDefaultObjects << theDefaultParticlesDirs; } void Strategy::persistentInput(PersistentIStream & is, int) { is >> theParticles >> theLocalParticlesDir >> theDefaultObjects >> theDefaultParticlesDirs; } ClassDescription Strategy::initStrategy; void Strategy::setLocalParticles(PDPtr pd, int) { particles()[pd->id()] = pd; } void Strategy::insLocalParticles(PDPtr pd, int) { particles()[pd->id()] = pd; } void Strategy::delLocalParticles(int place) { ParticleMap::iterator it = particles().begin(); while ( place-- && it != particles().end() ) ++it; if ( it != particles().end() ) particles().erase(it); } vector Strategy::getLocalParticles() const { vector ret; for ( ParticleMap::const_iterator it = particles().begin(); it != particles().end(); ++it ) ret.push_back(it->second); return ret; } void Strategy::Init() { static ClassDocumentation documentation ("Represents a general strategy to be assigned to an EventGenerator. " "It contains a set of default ParticleData objects which takes " "presedence over the ones in the Repository (although not over " "the ones in the EventGenerator). It also contains a set of other " "default objects which are automatically assigned to all Reference " "and RefVector interfaces which have the " "InterfaceBase::defaultIfNull() flag set."); static RefVector interfaceLocalParticles ("LocalParticles", "Special versions of ThePEG::ParticleData objects to be used. Note " "that to delete an object, its number in the list " "should be given, rather than its id number.", 0, 0, false, false, true, false, &Strategy::setLocalParticles, &Strategy::insLocalParticles, &Strategy::delLocalParticles, &Strategy::getLocalParticles); static RefVector interfaceDefaultObjects ("DefaultObjects", "A vector of pointers to default objects. In a ThePEG::Reference or " "ThePEG::RefVector interface with the defaultIfNull() flag set, if a " "null pointer is encountered this vector is gone through until an " "acceptable object is found in which case the null pointer is replaced " "by a pointer to this object. Note that the default objects given in the " "ThePEG::EventGenerator are gone through first and are given precedence.", &Strategy::theDefaultObjects, 0, true, false, true, false, false); static Parameter interfaceLocalParticlesDir ("LocalParticlesDir", "A directory in the repository which will be scanned for particles " "which will be included as default particles in a run. These particles " "will be overridden by particles specified in " "LocalParticles and default particles " "specified directly in the EventGenerator.", &Strategy::theLocalParticlesDir, "", true, false, &Strategy::setLocalParticlesDir, (string(Strategy::*)()const)(0), (string(Strategy::*)()const)(0)); static ParVector interfaceDefaultParticlesDirs ("DefaultParticlesDirs", "By default all particles in the Repository are included in a run, " "although only one particle object per PDG id number. If directories are " "listed in DefaultParticlesDirs, only particles in these will be " "considered for default inclusion in a run. Only particles which have " "a PDG id which is not given by particles in " "LocalParticlesDir, " "LocalParticles, or in " "EventGenerator::LocalParticles will be " "considered.", &Strategy::theDefaultParticlesDirs, -1, "", "", "", true, false, Interface::nolimits, &Strategy::setDefaultParticlesDirs, &Strategy::insDefaultParticlesDirs); interfaceLocalParticles.rank(10); interfaceLocalParticlesDir.rank(11); interfaceDefaultObjects.rank(9); interfaceDefaultParticlesDirs.rank(8); } thepeg-1.8.0.orig/Repository/RandomGenerator.h0000644000175000017500000002666311754473671017602 0ustar sunsun// -*- C++ -*- // // RandomGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RandomGenerator_H #define ThePEG_RandomGenerator_H // This is the declaration of the RandomGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Interface/Interfaced.h" #include "gsl/gsl_rng.h" namespace ThePEG { /** * RandomGenerator is an interface to the CLHEP::RandomEngine * classes. To avoid excessive virtual function calls, the * RandomGenerator caches random numbers generated by the engine which * are then retrieved by the non-virtual inlined rnd() method. * * Sub-classes of RandomGenerator should be used to * implement a particular random engine. * * RandomGenerator only provides a flat distribution between 0 and * 1. Any other distribution can be achieved using the CLHEP random * classes using the engine returned from the randomGenerator() * method. * * @see \ref RandomGeneratorInterfaces "The interfaces" * defined for RandomGenerator. * @see UseRandom */ class RandomGenerator: public Interfaced { public: /** A vector of doubles. */ typedef vector RndVector; /** The size_type of RndVector. */ typedef RndVector::size_type size_type; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ RandomGenerator(); /** * Copy-constructor. */ RandomGenerator(const RandomGenerator &); /** * Destructor. */ virtual ~RandomGenerator(); //@} /** * Reset the underlying random engine with the given \a seed. If the * \a seed is set to -1 a standard seed will be used. */ virtual void setSeed(long seed) = 0; /** @name Functions to return random numbers. */ //@{ /** * Return a (possibly cached) flat random number in the interval * \f$]0,1[\f$. */ double rnd() { if ( nextNumber == theNumbers.end() ) fill(); return *nextNumber++; } /** * Return a flat random number in the interval * \f$]0,b[\f$. */ template Unit rnd(Unit b) { return b*rnd(); } /** * Return a flat random number in the interval * \f$]a,b[\f$. */ template Unit rnd(Unit a, Unit b) { return a + rnd(b - a); } /** * Return \a n flat random number in the interval * \f$]0,1[\f$. */ RndVector rndvec(int n) { RndVector ret(n); for ( int i = 0; i < n; ++i ) ret[i] = rnd(); return ret; } /** * Return a (possibly cached) flat random number in the interval * \f$]0,1[\f$. */ double operator()() { return rnd(); } /** * Return a (possibly cached) flat integer random number in the * interval \f$[0,N[\f$. */ long operator()(long N) { return long(rnd() * N); } /** * Return a true with probability \a p. Uses rnd(). Also uses * push_back(double). */ bool rndbool(double p = 0.5); /** * Return a true with probability \a p1/(\a p1+\a p2). Uses * rnd(). Also uses push_back(double). */ bool rndbool(double p1, double p2) { return rndbool(p1/(p1 + p2)); } /** * Return -1, 0, or 1 with relative probabilities \a p1, \a p2, \a * p3. Uses rnd(). Also uses push_back(double). */ int rndsign(double p1, double p2, double p3); /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a * p1). Uses rnd(). */ int rnd2(double p0, double p1) { return rndbool(p0, p1)? 0: 1; } /** * Return an integer \f$i\f$ with probability p\f$i\f$/(\a p0+\a * p1+\a p2). Uses rnd(). */ int rnd3(double p0, double p1, double p2) { return 1 + rndsign(p0, p1, p2); } /** * Return an integer/ \f$i\f$ with probability p\f$i\f$(\a p0+\a * p1+\a p2+\a p3). Uses rnd(). */ int rnd4(double p0, double p1, double p2, double p3); /** * Return a number between zero and infinity, distributed according * to \f$e^-x\f$. */ double rndExp() { return -log(rnd()); } /** * Return a number between zero and infinity, distributed according * to \f$e^-{x/\mu}\f$ where \f$\mu\f$ is the \a mean value. */ template Unit rndExp(Unit mean) { return mean*rndExp(); } /** * Return a number distributed according to a Gaussian distribution * with zero mean and unit variance. */ double rndGauss() { if ( gaussSaved ) { gaussSaved = false; return savedGauss; } double r = sqrt(-2.0*log(rnd())); double phi = rnd()*2.0*Constants::pi; savedGauss = r*cos(phi); gaussSaved = true; return r*sin(phi); } /** * Return a number distributed according to a Gaussian distribution * with a given standard deviation, \a sigma, and a given \a mean. */ template Unit rndGauss(Unit sigma, Unit mean = Unit()) { return mean + sigma*rndGauss(); } /** * Return a positive number distributed according to a * non-relativistic Breit-Wigner with a given width, \a gamma, and a * given \a mean. */ template Unit rndBW(Unit mean, Unit gamma) { if ( gamma <= Unit() ) return mean; return mean + 0.5*gamma*tan(rnd(atan(-2.0*mean/gamma), Constants::pi/2)); } /** * Return a positive number distributed according to a * non-relativistic Breit-Wigner with a given width, \a gamma, and a * given \a mean. The distribution is cut-off so that the number is * between \a mean - \a cut and \a mean + \a cut */ template Unit rndBW(Unit mean, Unit gamma, Unit cut) { if ( gamma <= Unit() || cut <= Unit() ) return mean; return mean + 0.5*gamma*tan(rnd(atan(-2.0*min(mean,cut)/gamma), atan(2.0*cut/gamma))); } /** * Return a positive number distributed according to a relativistic * Breit-Wigner with a given width, \a gamma, and a given \a mean. */ template Unit rndRelBW(Unit mean, Unit gamma) { if ( gamma <= Unit() ) return mean; return sqrt(sqr(mean) + mean*gamma*tan(rnd(atan(-mean/gamma), Constants::pi/2))); } /** * Return a positive number distributed according to a relativistic * Breit-Wigner with a given width, \a gamma, and a given \a * mean. The distribution is cut-off so that the number is between * \a mean - \a cut and \a mean + \a cut */ template Unit rndRelBW(Unit mean, Unit gamma, Unit cut) { if ( gamma <= Unit() || cut <= Unit() ) return mean; double minarg = cut > mean? -mean/gamma: (sqr(mean - cut) - sqr(mean))/(gamma*mean); double maxarg = (sqr(mean + cut) - sqr(mean))/(mean*gamma); return sqrt(sqr(mean) + mean*gamma*tan(rnd(atan(minarg), atan(maxarg)))); } /** * Return a non-negative number generated according to a Poissonian * distribution with a given \a mean. Warning: the method * implemented is very slow for large mean and large return * values. For this reason the maximum return value is given by \a * nmax. */ long rndPoisson(double mean); //@} /** @name Access the cached random numbers from the underlying engine. */ //@{ /** * Give back a partly unused random number. This is typically used * when generating integral random numbers. In eg. rndbool(double p) * a random number r is drawn and if it is less than * p true is returned, but r is still a * good random number in the interval ]0,p[. Hence * r/p is still a good random number in the interval * ]0,1[ and this is then pushed back into the cache * and is used by the next call to rnd(). Note that the resulting * random number is of lesser quality, and successive calls to * push_back() should be avoided. To ensure a highest quality random * number random number in the next call to rnd(), pop_back() should * be used. */ void push_back(double r) { if ( r > 0.0 && r < 1.0 && nextNumber != theNumbers.begin() ) *--nextNumber = r; } /** * Discard the next random number in the cache. */ void pop_back() { if ( nextNumber != theNumbers.end() ) ++nextNumber; } /** * Discard all random numbers in the cache. Typically used after the * internal random engine has been reinitialized for some reason. */ void flush() { nextNumber = theNumbers.end(); } /** * Generate n random numbers between 0 and 1 and put them in the * output iterator. */ template void rnd(OutputIterator o, size_type n) { while ( n-- ) *o++ = rnd(); } //@} protected: /** * Initializes this random generator. This should be done first of * all before the initialization of any other object associated with * an event generator. */ virtual void doinit(); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); /** * Return a gsl_rng interface to this random generator. */ gsl_rng * getGslInterface() { return gsl; } protected: /** * Utility function for the interface. */ void setSize(size_type newSize); /** * Fill the cache with random numbers. */ virtual void fill() = 0; /** * A vector of cached numbers. */ RndVector theNumbers; /** * Iterator pointing to the next number to be extracted */ RndVector::iterator nextNumber; /** * The size of the cache. */ size_type theSize; /** * The seed to initialize the random generator with. */ long theSeed; /** * A saved Gaussian random number. */ mutable double savedGauss; /** * Indicate the precense of a saved Gaussian random number. */ mutable bool gaussSaved; /** * A pinter to a gsl_rng interface to this generator. */ gsl_rng * gsl; private: /** * Describe a concrete class with persistent data. Note that the * class should in principle be abstract. */ static ClassDescription initRandomGenerator; /** * Private and non-existent assignment operator. */ RandomGenerator & operator=(const RandomGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of RandomGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of RandomGenerator. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * RandomGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RandomGenerator"; } /** This class should in principle be abstract, therefore the create() method will throw a std::logic_error if called. */ static TPtr create() { throw std::logic_error("Tried to instantiate abstract class" "'Pythis7::RandomGenerator'"); } }; /** @endcond */ } #endif /* ThePEG_RandomGenerator_H */ thepeg-1.8.0.orig/Repository/RandomGenerator.fh0000644000175000017500000000042411747772425017734 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_RandomGenerator_FH #define ThePEG_RandomGenerator_FH // // This is the forward declaration of the RandomGenerator class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class RandomGenerator; } #endif /* ThePEG_RandomGenerator_FH */ thepeg-1.8.0.orig/Repository/CurrentGenerator.cc0000644000175000017500000000101611747772425020124 0ustar sunsun// -*- C++ -*- // // CurrentGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CurrentGenerator class. // #include "CurrentGenerator.h" using namespace ThePEG; vector CurrentGenerator::theGeneratorStack; thepeg-1.8.0.orig/Repository/CurrentGenerator.h0000644000175000017500000001605111747772425017773 0ustar sunsun// -*- C++ -*- // // CurrentGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_CurrentGenerator_H #define ThePEG_CurrentGenerator_H // This is the declaration of the CurrentGenerator class. #include "ThePEG/Repository/EventGenerator.h" #include "CurrentGenerator.fh" namespace ThePEG { /** * This CurrentGenerator class keeps a static stack of EventGenerators * which can be used anywhere by any class. When an EventGenerator is * initialized or run it adds itself to the stack which can be used by * any other object being initialized or run through the static * functions of the CurrentGenerator class. If someone * needs to use an alternative EventGenerator object a new * CurrentGenerator object can be constructed with a * pointer to the desired EventGenerator object as argument and that * object will the be used by the static CurrentGenerator * functions until the CurrentGenerator object is destructed. * * @see EventGenerator * */ class CurrentGenerator { public: /** * Default constructor does nothing. */ CurrentGenerator() : generatorPushed(false) {} /** * Copy-constructor does nothing. */ CurrentGenerator(const CurrentGenerator &) : generatorPushed(false) {} /** * Construct a new object specifying a new EventGenerator, \a eg, to * be used during this objects lifetime. */ CurrentGenerator(const EGPtr & eg) : generatorPushed(false) { if ( eg ) { theGeneratorStack.push_back(eg); generatorPushed = true; } } /** * The destructor removing the EventGenerator specified in the * constructor from the stack. */ ~CurrentGenerator() { if ( generatorPushed ) theGeneratorStack.pop_back(); } public: /** * Returns true if there is no currently chosen EventGenerator * object. */ static bool isVoid() { return theGeneratorStack.empty() || !(theGeneratorStack.back()); } /** * Return a reference to the currently chosen EventGenerator object. */ static EventGenerator & current() { return *theGeneratorStack.back(); } /** * Return a reference to the currently chosen object. */ EventGenerator & operator*() const { return *theGeneratorStack.back(); } /** * Return a pointer to the currently chosen object. */ EventGenerator * operator->() const { return theGeneratorStack.back(); } /** * Pointer to the stack */ static EventGenerator * ptr() { return theGeneratorStack.back(); } /** * Test for existance */ operator bool() const { return ptr(); } /** * Test for existance */ bool operator!() const { return !ptr(); } /** * Return a pointer to the standard model parameters used by the * current generator. */ static tSMPtr standardModel() { return current().standardModel(); } /** * Return a pointer to the strategy object containing eg. a set of * non-default particles to be used by the current generator. */ static tStrategyPtr strategy() { return current().strategy(); } /** * Get the current standard output stream. Return a reference to the * stream connected to the file for general output of the current * generator. If no file is connected, the BaseRepository::cout() * will be used instead. */ static ostream & out() { return current().out(); } /** * Get the current standard log stream. Return a reference to the * stream connected to the file for logging information of the * current generator. If no file is connected, the * BaseRepository::clog() will be used instead. */ static ostream & log() { return current().log(); } /** * Get the current standard ref stream. Return a reference to the * stream connected to the file for references from used objects of * the current generator. If no file is connected, the * BaseRepository::cout() will be used instead. */ static ostream & ref() { return current().ref(); } /** * Get object. Return a garbage collected pointer to a given object * in the current EventGenerator. If the object is not found, a null * pointer will be returned. */ template static typename Ptr::pointer getPtr(const T & t) { return current().getPtr(t); } /** * Get object. Return a pointer to an object present in the current * EventGenerator given its full name. Return the null pointer if * non-existent. */ static IBPtr getPointer(string name) { return current().getPointer(name); } /** * Get object. Return a pointer to an object of type T present in * the current EventGenerator given its full name. Return the null * pointer if non-existent. */ template static typename Ptr::pointer getObject(string name) { return current().getObject(name); } /** * Get default object. Return the default object for class T in the * current EventGenerator. Returns the null pointer if non-existent. */ template static typename Ptr::pointer getDefault() { return current().getDefault(); } public: /** * Class used to temporarily redirect a given ostream to the misc() * stream of the current EventGenerator. */ class Redirect { public: /** * Constructor taking the stream to be redirected as input. If the * \a internal flag false the output will be stored in the Event * Generator and written to the log file in the end of the run. If * \internal is true the output is instead stored internally in * this object and is accessible through the str() function until * the object is destroyed. */ Redirect(ostream & os, bool internal = false) : theStream(&os), theBuffer(os.rdbuf()) { if ( internal ) theStream->rdbuf(intStream.rdbuf()); else if ( !current().useStdOut() ) theStream->rdbuf(current().misc().rdbuf()); } /** * The destructor which restores the original destination of the * stream. */ ~Redirect() { theStream->rdbuf(theBuffer); } /** * If output is stored internally, acces what has been written so * far. */ string str() const { return intStream.str(); } /** * The stream which is redirected. */ ostream * theStream; /** * The original buffer of the redirected stream. */ std::streambuf * theBuffer; /** * An internal buffer, the content of which will be discarded when * the this object is destructed. */ ostringstream intStream; }; private: /** * The stack of EventGenerators requested. */ static vector theGeneratorStack; /** * True if this object is responsible for pushing a EventGenerator * onto the stack. */ bool generatorPushed; private: /** * Private and non-existent assignment operator. */ CurrentGenerator & operator=(const CurrentGenerator &); }; } #endif /* ThePEG_CurrentGenerator_H */ thepeg-1.8.0.orig/Repository/CurrentGenerator.fh0000644000175000017500000000043111747772425020134 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_CurrentGenerator_FH #define ThePEG_CurrentGenerator_FH // // This is the forward declaration of the CurrentGenerator class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class CurrentGenerator; } #endif /* ThePEG_CurrentGenerator_FH */ thepeg-1.8.0.orig/Repository/Makefile.in0000644000175000017500000010561711756366735016410 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Repository ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) MultiEventGenerator_la_LIBADD = am_MultiEventGenerator_la_OBJECTS = MultiEventGenerator.lo MultiEventGenerator_la_OBJECTS = $(am_MultiEventGenerator_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent MultiEventGenerator_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(MultiEventGenerator_la_LDFLAGS) \ $(LDFLAGS) -o $@ ThePEGStrategy_la_LIBADD = am_ThePEGStrategy_la_OBJECTS = ThePEGStrategy.lo ThePEGStrategy_la_OBJECTS = $(am_ThePEGStrategy_la_OBJECTS) ThePEGStrategy_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ThePEGStrategy_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGRepo_la_LIBADD = am__objects_1 = libThePEGRepo_la-EventGenerator.lo \ libThePEGRepo_la-RandomGenerator.lo \ libThePEGRepo_la-Strategy.lo \ libThePEGRepo_la-BaseRepository.lo \ libThePEGRepo_la-Repository.lo \ libThePEGRepo_la-StandardRandom.lo \ libThePEGRepo_la-UseRandom.lo \ libThePEGRepo_la-CurrentGenerator.lo libThePEGRepo_la-Main.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGRepo_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGRepo_la_OBJECTS = $(am_libThePEGRepo_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(MultiEventGenerator_la_SOURCES) \ $(ThePEGStrategy_la_SOURCES) $(libThePEGRepo_la_SOURCES) DIST_SOURCES = $(MultiEventGenerator_la_SOURCES) \ $(ThePEGStrategy_la_SOURCES) $(libThePEGRepo_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = EventGenerator.cc RandomGenerator.cc Strategy.cc \ BaseRepository.cc Repository.cc StandardRandom.cc \ UseRandom.cc CurrentGenerator.cc Main.cc DOCFILES = BaseRepository.h EventGenerator.h RandomGenerator.h \ Repository.h StandardRandom.h Strategy.h \ UseRandom.h CurrentGenerator.h Main.h INCLUDEFILES = $(DOCFILES) BaseRepository.tcc \ BaseRepository.xh EventGenerator.fh \ EventGenerator.tcc EventGenerator.xh \ Strategy.fh RandomGenerator.fh UseRandom.fh \ CurrentGenerator.fh noinst_LTLIBRARIES = libThePEGRepo.la pkglib_LTLIBRARIES = ThePEGStrategy.la MultiEventGenerator.la libThePEGRepo_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGRepo_la_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" \ -DTHEPEG_PKGDATADIR="\"$(pkgdatadir)\"" # Version info should be updated if any interface or persistent I/O # function is changed ThePEGStrategy_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ThePEGStrategy_la_SOURCES = ThePEGStrategy.cc ThePEGStrategy.h # Version info should be updated if any interface or persistent I/O # function is changed MultiEventGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MultiEventGenerator_la_SOURCES = MultiEventGenerator.cc MultiEventGenerator.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Repository/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Repository/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } MultiEventGenerator.la: $(MultiEventGenerator_la_OBJECTS) $(MultiEventGenerator_la_DEPENDENCIES) $(EXTRA_MultiEventGenerator_la_DEPENDENCIES) $(AM_V_CXXLD)$(MultiEventGenerator_la_LINK) -rpath $(pkglibdir) $(MultiEventGenerator_la_OBJECTS) $(MultiEventGenerator_la_LIBADD) $(LIBS) ThePEGStrategy.la: $(ThePEGStrategy_la_OBJECTS) $(ThePEGStrategy_la_DEPENDENCIES) $(EXTRA_ThePEGStrategy_la_DEPENDENCIES) $(AM_V_CXXLD)$(ThePEGStrategy_la_LINK) -rpath $(pkglibdir) $(ThePEGStrategy_la_OBJECTS) $(ThePEGStrategy_la_LIBADD) $(LIBS) libThePEGRepo.la: $(libThePEGRepo_la_OBJECTS) $(libThePEGRepo_la_DEPENDENCIES) $(EXTRA_libThePEGRepo_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGRepo_la_OBJECTS) $(libThePEGRepo_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MultiEventGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThePEGStrategy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-BaseRepository.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-CurrentGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-EventGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-Main.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-RandomGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-Repository.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-StandardRandom.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-Strategy.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGRepo_la-UseRandom.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< libThePEGRepo_la-EventGenerator.lo: EventGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-EventGenerator.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-EventGenerator.Tpo -c -o libThePEGRepo_la-EventGenerator.lo `test -f 'EventGenerator.cc' || echo '$(srcdir)/'`EventGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-EventGenerator.Tpo $(DEPDIR)/libThePEGRepo_la-EventGenerator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='EventGenerator.cc' object='libThePEGRepo_la-EventGenerator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-EventGenerator.lo `test -f 'EventGenerator.cc' || echo '$(srcdir)/'`EventGenerator.cc libThePEGRepo_la-RandomGenerator.lo: RandomGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-RandomGenerator.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-RandomGenerator.Tpo -c -o libThePEGRepo_la-RandomGenerator.lo `test -f 'RandomGenerator.cc' || echo '$(srcdir)/'`RandomGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-RandomGenerator.Tpo $(DEPDIR)/libThePEGRepo_la-RandomGenerator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RandomGenerator.cc' object='libThePEGRepo_la-RandomGenerator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-RandomGenerator.lo `test -f 'RandomGenerator.cc' || echo '$(srcdir)/'`RandomGenerator.cc libThePEGRepo_la-Strategy.lo: Strategy.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-Strategy.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-Strategy.Tpo -c -o libThePEGRepo_la-Strategy.lo `test -f 'Strategy.cc' || echo '$(srcdir)/'`Strategy.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-Strategy.Tpo $(DEPDIR)/libThePEGRepo_la-Strategy.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Strategy.cc' object='libThePEGRepo_la-Strategy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-Strategy.lo `test -f 'Strategy.cc' || echo '$(srcdir)/'`Strategy.cc libThePEGRepo_la-BaseRepository.lo: BaseRepository.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-BaseRepository.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-BaseRepository.Tpo -c -o libThePEGRepo_la-BaseRepository.lo `test -f 'BaseRepository.cc' || echo '$(srcdir)/'`BaseRepository.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-BaseRepository.Tpo $(DEPDIR)/libThePEGRepo_la-BaseRepository.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BaseRepository.cc' object='libThePEGRepo_la-BaseRepository.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-BaseRepository.lo `test -f 'BaseRepository.cc' || echo '$(srcdir)/'`BaseRepository.cc libThePEGRepo_la-Repository.lo: Repository.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-Repository.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-Repository.Tpo -c -o libThePEGRepo_la-Repository.lo `test -f 'Repository.cc' || echo '$(srcdir)/'`Repository.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-Repository.Tpo $(DEPDIR)/libThePEGRepo_la-Repository.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Repository.cc' object='libThePEGRepo_la-Repository.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-Repository.lo `test -f 'Repository.cc' || echo '$(srcdir)/'`Repository.cc libThePEGRepo_la-StandardRandom.lo: StandardRandom.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-StandardRandom.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-StandardRandom.Tpo -c -o libThePEGRepo_la-StandardRandom.lo `test -f 'StandardRandom.cc' || echo '$(srcdir)/'`StandardRandom.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-StandardRandom.Tpo $(DEPDIR)/libThePEGRepo_la-StandardRandom.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StandardRandom.cc' object='libThePEGRepo_la-StandardRandom.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-StandardRandom.lo `test -f 'StandardRandom.cc' || echo '$(srcdir)/'`StandardRandom.cc libThePEGRepo_la-UseRandom.lo: UseRandom.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-UseRandom.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-UseRandom.Tpo -c -o libThePEGRepo_la-UseRandom.lo `test -f 'UseRandom.cc' || echo '$(srcdir)/'`UseRandom.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-UseRandom.Tpo $(DEPDIR)/libThePEGRepo_la-UseRandom.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='UseRandom.cc' object='libThePEGRepo_la-UseRandom.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-UseRandom.lo `test -f 'UseRandom.cc' || echo '$(srcdir)/'`UseRandom.cc libThePEGRepo_la-CurrentGenerator.lo: CurrentGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-CurrentGenerator.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-CurrentGenerator.Tpo -c -o libThePEGRepo_la-CurrentGenerator.lo `test -f 'CurrentGenerator.cc' || echo '$(srcdir)/'`CurrentGenerator.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-CurrentGenerator.Tpo $(DEPDIR)/libThePEGRepo_la-CurrentGenerator.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CurrentGenerator.cc' object='libThePEGRepo_la-CurrentGenerator.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-CurrentGenerator.lo `test -f 'CurrentGenerator.cc' || echo '$(srcdir)/'`CurrentGenerator.cc libThePEGRepo_la-Main.lo: Main.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGRepo_la-Main.lo -MD -MP -MF $(DEPDIR)/libThePEGRepo_la-Main.Tpo -c -o libThePEGRepo_la-Main.lo `test -f 'Main.cc' || echo '$(srcdir)/'`Main.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGRepo_la-Main.Tpo $(DEPDIR)/libThePEGRepo_la-Main.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Main.cc' object='libThePEGRepo_la-Main.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGRepo_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGRepo_la-Main.lo `test -f 'Main.cc' || echo '$(srcdir)/'`Main.cc mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Repository/EventGenerator.cc0000644000175000017500000012424111747772425017571 0ustar sunsun// -*- C++ -*- // // EventGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the EventGenerator class. // #include "EventGenerator.h" #include "EventGenerator.xh" #include "ThePEG/Handlers/EventHandler.h" #include "Repository.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/DebugItem.h" #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/MatcherBase.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Repository/Strategy.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Handlers/AnalysisHandler.h" #include "ThePEG/Analysis/FactoryBase.h" #include "ThePEG/Handlers/EventManipulator.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/MatrixElement/MEBase.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Handlers/SubProcessHandler.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Handlers/HadronizationHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Utilities/DynamicLoader.h" #include #include "ThePEG/Repository/Main.h" #include #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "EventGenerator.tcc" #endif using namespace ThePEG; namespace { volatile sig_atomic_t THEPEG_SIGNAL_STATE = 0; } // signal handler function // very restricted in what it is allowed do // without causing undefined behaviour extern "C" { void thepegSignalHandler(int id) { THEPEG_SIGNAL_STATE=id; signal(id,SIG_DFL); } } void EventGenerator::checkSignalState() { if (THEPEG_SIGNAL_STATE) { finalize(); exit(0); } } EventGenerator::EventGenerator() : thePath("."), theNumberOfEvents(1000), theQuickSize(7000), preinitializing(false), ieve(0), weightSum(0.0), theDebugLevel(0), logNonDefault(-1), printEvent(0), dumpPeriod(0), debugEvent(0), maxWarnings(10), maxErrors(10), theCurrentRandom(0), theCurrentGenerator(0), useStdout(false) {} EventGenerator::EventGenerator(const EventGenerator & eg) : Interfaced(eg), theDefaultObjects(eg.theDefaultObjects), theLocalParticles(eg.theLocalParticles), theStandardModel(eg.theStandardModel), theStrategy(eg.theStrategy), theRandom(eg.theRandom), theEventHandler(eg.theEventHandler), theAnalysisHandlers(eg.theAnalysisHandlers), theHistogramFactory(eg.theHistogramFactory), theEventManipulator(eg.theEventManipulator), thePath(eg.thePath), theRunName(eg.theRunName), theNumberOfEvents(eg.theNumberOfEvents), theObjects(eg.theObjects), theObjectMap(eg.theObjectMap), theParticles(eg.theParticles), theQuickParticles(eg.theQuickParticles), theQuickSize(eg.theQuickSize), preinitializing(false), theMatchers(eg.theMatchers), usedObjects(eg.usedObjects), ieve(eg.ieve), weightSum(eg.weightSum), theDebugLevel(eg.theDebugLevel), logNonDefault(eg.logNonDefault), printEvent(eg.printEvent), dumpPeriod(eg.dumpPeriod), debugEvent(eg.debugEvent), maxWarnings(eg.maxWarnings), maxErrors(eg.maxErrors), theCurrentRandom(0), theCurrentGenerator(0), theCurrentEventHandler(eg.theCurrentEventHandler), theCurrentStepHandler(eg.theCurrentStepHandler), useStdout(eg.useStdout) {} EventGenerator::~EventGenerator() { if ( theCurrentRandom ) delete theCurrentRandom; if ( theCurrentGenerator ) delete theCurrentGenerator; } IBPtr EventGenerator::clone() const { return new_ptr(*this); } IBPtr EventGenerator::fullclone() const { return new_ptr(*this); } tcEventPtr EventGenerator::currentEvent() const { return eventHandler()->currentEvent(); } CrossSection EventGenerator::histogramScale() const { return eventHandler()->histogramScale(); } CrossSection EventGenerator::integratedXSec() const { return eventHandler()->integratedXSec(); } CrossSection EventGenerator::integratedXSecErr() const { return eventHandler()->integratedXSecErr(); } void EventGenerator::setup(string newRunName, ObjectSet & newObjects, ParticleMap & newParticles, MatcherSet & newMatchers) { HoldFlag debug(Debug::level, Debug::isset? Debug::level: theDebugLevel); theRunName = newRunName; theObjects.swap(newObjects); theParticles.swap(newParticles); theMatchers.swap(newMatchers); theObjectMap.clear(); for ( ObjectSet::const_iterator it = objects().begin(); it != objects().end(); ++it ) theObjectMap[(**it).fullName()] = *it; UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); // Force update of all objects and then reset. touch(); for_each(theObjects, mem_fun(&InterfacedBase::touch)); update(); for_each(theObjects, mem_fun(&InterfacedBase::update)); clear(); BaseRepository::clearAll(theObjects); init(); } IBPtr EventGenerator::getPointer(string name) const { ObjectMap::const_iterator it = objectMap().find(name); if ( it == objectMap().end() ) return IBPtr(); else return it->second; } void EventGenerator::openOutputFiles() { if ( !useStdout ) { logfile().open((filename() + ".log").c_str()); theOutFileName = filename() + ".out"; outfile().open(theOutFileName.c_str()); outfile().close(); theOutStream.str(""); } out() << Repository::banner() << endl; log() << Repository::banner() << endl; } void EventGenerator::closeOutputFiles() { flushOutputFile(); if ( !useStdout ) logfile().close(); } void EventGenerator::flushOutputFile() { if ( !useStdout ) { outfile().open(theOutFileName.c_str(), ios::out|ios::app); outfile() << theOutStream.str(); outfile().close(); } else BaseRepository::cout() << theOutStream.str(); theOutStream.str(""); } void EventGenerator::doinit() { HoldFlag debug(Debug::level, Debug::isset? Debug::level: theDebugLevel); // First initialize base class and random number generator. Interfaced::doinit(); random().init(); // Make random generator and this available in standard static // classes. UseRandom useRandom(theRandom); CurrentGenerator currentGenerator(this); // First initialize all objects which have requested this by // implementing a InterfacedBase::preInitialize() function which // returns true. while ( true ) { HoldFlag hold(preinitializing, true); ObjectSet preinits; for ( ObjectSet::iterator it = objects().begin(); it != objects().end(); ++it ) if ( (**it).preInitialize() && (**it).state() == InterfacedBase::uninitialized ) preinits.insert(*it); if ( preinits.empty() ) break; for_each(preinits, mem_fun(&InterfacedBase::init)); } // Initialize the quick access to particles. theQuickParticles.clear(); theQuickParticles.resize(2*theQuickSize); for ( ParticleMap::const_iterator pit = theParticles.begin(); pit != theParticles.end(); ++pit ) if ( abs(pit->second->id()) < theQuickSize ) theQuickParticles[pit->second->id()+theQuickSize] = pit->second; // Then call the init method for all objects. Start with the // standard model and the strategy. standardModel()->init(); if ( strategy() ) strategy()->init(); eventHandler()->init(); // initialize particles first for(ParticleMap::const_iterator pit = particles().begin(); pit != particles().end(); ++pit) pit->second->init(); for_each(objects(), mem_fun(&InterfacedBase::init)); // Then initialize the Event Handler calculating initial cross // sections and stuff. eventHandler()->initialize(); } void EventGenerator::doinitrun() { HoldFlag debug(Debug::level, Debug::isset? Debug::level: theDebugLevel); signal(SIGHUP, thepegSignalHandler); signal(SIGINT, thepegSignalHandler); signal(SIGTERM,thepegSignalHandler); currentEventHandler(eventHandler()); Interfaced::doinitrun(); random().initrun(); // Then call the init method for all objects. Start with the // standard model and the strategy. standardModel()->initrun(); if ( strategy() ) strategy()->initrun(); // initialize particles first for(ParticleMap::const_iterator pit = particles().begin(); pit != particles().end(); ++pit) { pit->second->initrun(); } eventHandler()->initrun(); for_each(objects(), mem_fun(&InterfacedBase::initrun)); if ( logNonDefault > 0 || ( ThePEG_DEBUG_LEVEL && logNonDefault == 0 ) ) { vector< pair > changed = Repository::getNonDefaultInterfaces(objects()); if ( changed.size() ) { log() << string(78, '=') << endl << "The following interfaces have non-default values (default):" << endl << string(78, '-') << endl; for ( int i = 0, N = changed.size(); i < N; ++i ) { log() << changed[i].first->fullName() << ":" << changed[i].second->name() << " = " << changed[i].second->exec(*changed[i].first, "notdef", "") << endl; } log() << string(78,'=') << endl; } } weightSum = 0.0; } PDPtr EventGenerator::getParticleData(PID id) const { long newId = id; if ( abs(newId) < theQuickSize && theQuickParticles.size() ) return theQuickParticles[newId+theQuickSize]; ParticleMap::const_iterator it = theParticles.find(newId); if ( it == theParticles.end() ) return PDPtr(); return it->second; } PPtr EventGenerator::getParticle(PID newId) const { tcPDPtr pd = getParticleData(newId); if ( !pd ) return PPtr(); return pd->produceParticle(); } void EventGenerator::finalize() { UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); finish(); finally(); } void EventGenerator::dofinish() { HoldFlag debug(Debug::level, Debug::isset? Debug::level: theDebugLevel); // first write out statistics from the event handler. eventHandler()->statistics(out()); // Call the finish method for all other objects. for_each(objects(), mem_fun(&InterfacedBase::finish)); if ( theExceptions.empty() ) { log() << "No exceptions reported in this run.\n"; } else { log() << "\nThe following exception classes were reported in this run:\n"; for ( ExceptionMap::iterator it = theExceptions.begin(); it != theExceptions.end(); ++it ) { string severity; switch ( it->first.second ) { case Exception::info : severity="info"; break; case Exception::warning : severity="warning"; break; case Exception::setuperror : severity="setuperror"; break; case Exception::eventerror : severity="eventerror"; break; case Exception::runerror : severity="runerror"; break; case Exception::maybeabort : severity="maybeabort"; break; case Exception::abortnow : severity="abortnow"; break; default : severity="unknown"; } log() << it->first.first << ' ' << severity << " (" << it->second << " times)\n"; } } theExceptions.clear(); const string & msg = theMiscStream.str(); if ( ! msg.empty() ) { log() << endl << "Miscellaneous output from modules to the standard output:\n\n" << msg; theMiscStream.str(""); } flushOutputFile(); } void EventGenerator::finally() { generateReferences(); closeOutputFiles(); if ( theCurrentRandom ) delete theCurrentRandom; if ( theCurrentGenerator ) delete theCurrentGenerator; theCurrentRandom = 0; theCurrentGenerator = 0; } void EventGenerator::initialize() { UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); doInitialize(); } bool EventGenerator::loadMain(string file) { initialize(); UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); Main::eventGenerator(this); bool ok = DynamicLoader::load(file); finish(); finally(); return ok; } void EventGenerator::go(long next, long maxevent, bool tics) { UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); doGo(next, maxevent, tics); } EventPtr EventGenerator::shoot() { static DebugItem debugfpu("ThePEG::FPU", 1); if ( debugfpu ) Debug::unmaskFpuErrors(); UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); checkSignalState(); EventPtr event = doShoot(); if ( event ) weightSum += event->weight(); DebugItem::tic(); return event; } EventPtr EventGenerator::doShoot() { EventPtr event; if ( N() >= 0 && ++ieve > N() ) return event; HoldFlag debug(Debug::level, Debug::isset? Debug::level: theDebugLevel); do { int state = 0; int loop = 1; eventHandler()->clearEvent(); try { do { // Generate a full event or part of an event if ( eventHandler()->empty() ) event = eventHandler()->generateEvent(); else event = eventHandler()->continueEvent(); if ( eventHandler()->empty() ) loop = -loop; // Analyze the possibly uncomplete event for ( AnalysisVector::iterator it = analysisHandlers().begin(); it != analysisHandlers().end(); ++it ) (**it).analyze(event, ieve, loop, state); // Manipulate the current event, possibly deleting some steps // and telling the event handler to redo them. if ( manipulator() ) state = manipulator()->manipulate(eventHandler(), event); // If the event was not completed, continue generation and continue. loop = abs(loop) + 1; } while ( !eventHandler()->empty() ); } catch (Exception & ex) { if ( logException(ex, eventHandler()->currentEvent()) ) throw; } catch (...) { dump(); event = eventHandler()->currentEvent(); if ( event ) log() << *event; else log() << "An exception occurred before any event object was created!"; log() << endl; throw; } if ( ThePEG_DEBUG_LEVEL ) { if ( ( ThePEG_DEBUG_LEVEL == Debug::printEveryEvent || ieve < printEvent ) && event ) log() << *event; if ( debugEvent > 0 && ieve + 1 >= debugEvent ) Debug::level = Debug::full; if ( dumpPeriod > 0 && ieve%dumpPeriod == 0 ) dump(); } } while ( !event ); return event; } EventPtr EventGenerator::doGenerateEvent(tEventPtr e) { if ( N() >= 0 && ++ieve > N() ) return EventPtr(); EventPtr event = e; try { event = eventHandler()->generateEvent(e); } catch (Exception & ex) { if ( logException(ex, eventHandler()->currentEvent()) ) throw; } catch (...) { dump(); event = eventHandler()->currentEvent(); if ( !event ) event = e; log() << *event << endl; throw; } return event; } EventPtr EventGenerator::doGenerateEvent(tStepPtr s) { if ( N() >= 0 && ++ieve > N() ) return EventPtr(); EventPtr event; try { event = eventHandler()->generateEvent(s); } catch (Exception & ex) { if ( logException(ex, eventHandler()->currentEvent()) ) throw; } catch (...) { dump(); event = eventHandler()->currentEvent(); if ( event ) log() << *event << endl; throw; } return event; } EventPtr EventGenerator::generateEvent(Event & e) { UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); EventPtr event = doGenerateEvent(tEventPtr(&e)); if ( event ) weightSum += event->weight(); return event; } EventPtr EventGenerator::generateEvent(Step & s) { UseRandom currentRandom(theRandom); CurrentGenerator currentGenerator(this); EventPtr event = doGenerateEvent(tStepPtr(&s)); if ( event ) weightSum += event->weight(); return event; } Energy EventGenerator::maximumCMEnergy() const { tcEHPtr eh = eventHandler(); return eh->lumiFnPtr()? eh->lumiFn().maximumCMEnergy(): ZERO; } void EventGenerator::doInitialize() { openOutputFiles(); init(); initrun(); if ( !ThePEG_DEBUG_LEVEL ) Exception::noabort = true; } void EventGenerator::doGo(long next, long maxevent, bool tics) { if ( maxevent >= 0 ) N(maxevent); if ( next >= 0 ) { if ( tics ) cerr << "event> " << setw(9) << "init\r" << flush; initialize(); ieve = next-1; } else { openOutputFiles(); } if ( tics ) tic(); try { while ( shoot() ) { if ( tics ) tic(); } } catch ( ... ) { finish(); throw; } finish(); finally(); } void EventGenerator::tic(long currev, long totev) const { if ( !currev ) currev = ieve; if ( !totev ) totev = N(); long i = currev; long n = totev; bool skip = currev%(max(totev/100, 1L)); if ( i > n/2 ) i = n-i; while ( skip && i >= 10 && !(i%10) ) i /= 10; if ( i == 1 || i == 2 || i == 5 ) skip = false; if ( skip ) return; cerr << "event> " << setw(8) << currev << " " << setw(8) << totev << "\r"; cerr.flush(); if ( currev == totev ) cerr << endl; } void EventGenerator::dump() const { if ( dumpPeriod > -1 ) { PersistentOStream file(filename() + ".dump", globalLibraries()); file << tcEGPtr(this); } } void EventGenerator::use(const Interfaced & i) { IBPtr ip = getPtr(i); if ( ip ) usedObjects.insert(ip); } void EventGenerator::generateReferences() { typedef map StringMap; StringMap references; // First get all model descriptions and model references from the // used objects. Put them in a map indexed by the description to // avoid duplicates. for ( ObjectSet::iterator it = usedObjects.begin(); it != usedObjects.end(); ++it ) { if ( *it == strategy() ) continue; string desc = Repository::getModelDescription(*it); if ( desc.empty() ) continue; if ( dynamic_ptr_cast(*it) ) desc = "A " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "B " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "C " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "D " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "E " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "F " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "Y " + desc; else if ( dynamic_ptr_cast(*it) ) desc = "Z " + desc; else if ( dynamic_ptr_cast::const_pointer>(*it) ) desc = "G " + desc; else desc = "H " + desc; references[desc] = Repository::getModelReferences(*it); } // Now get the main strategy description which should put first and // remove it from the map. string stratdesc; string stratref; if ( strategy() ) { stratdesc = Repository::getModelDescription(strategy()); stratref = Repository::getModelReferences(strategy()); references.erase(stratdesc); } // Open the file and write out an appendix header if ( !useStdout ) reffile().open((filename() + ".tex").c_str()); ref() << "\\documentclass{article}\n" << "\\usepackage{graphics}\n" << "\\begin{document}\n" << "\\appendix\n" << "\\section[xxx]{\\textsc{ThePEG} version " << Repository::version() << " \\cite{ThePEG} Run Information}\n" << "Run name: \\textbf{" << runName() << "}:\\\\\n"; if ( !stratdesc.empty() ) ref() << "This run was generated using " << stratdesc << " and the following models:\n"; else ref() << "The following models were used:\n"; ref() << "\\begin{itemize}\n"; // Write out all descriptions. for ( StringMap::iterator it = references.begin(); it != references.end(); ++it ) ref() << "\\item " << it->first.substr(2) << endl; // Write out thebibliography header and all references. ref() << "\\end{itemize}\n\n" << "\\begin{thebibliography}{99}\n" << "\\bibitem{ThePEG} L.~L\\\"onnblad, " << "Comput.~Phys.~Commun.\\ {\\bf 118} (1999) 213.\n"; if ( !stratref.empty() ) ref() << stratref << '\n'; for ( StringMap::iterator it = references.begin(); it != references.end(); ++it ) ref() << it->second << '\n'; ref() << "\\end{thebibliography}\n" << "\\end{document}" << endl; if ( !useStdout ) reffile().close(); } void EventGenerator::strategy(StrategyPtr s) { theStrategy = s; } int EventGenerator::count(const Exception & ex) { return ++theExceptions[make_pair(StringUtils::typeName(typeid(ex)), ex.severity())]; } void EventGenerator::printException(const Exception & ex) { switch ( ex.severity() ) { case Exception::info: log() << "* An information"; break; case Exception::warning: log() << "* A warning"; break; case Exception::setuperror: log() << "** A setup"; break; case Exception::eventerror: log() << "** An event"; break; case Exception::runerror: log() << "*** An run"; break; case Exception::maybeabort: case Exception::abortnow: log() << "**** A serious"; break; default: log() << "**** An unknown"; break; } if ( ieve > 0 ) log() << " exception of type " << StringUtils::typeName(typeid(ex)) << " occurred while generating event number " << ieve << ": \n" << ex.message() << endl; else log() << " exception occurred in the initialization of " << name() << ": \n" << ex.message() << endl; if ( ex.severity() == Exception::eventerror ) log() << "The event will be discarded." << endl; } void EventGenerator::logWarning(const Exception & ex) { if ( ex.severity() != Exception::info && ex.severity() != Exception::warning ) throw ex; ex.handle(); int c = count(ex); if ( c > maxWarnings ) return; printException(ex); if ( c == maxWarnings ) log() << "No more warnings of this kind will be reported." << endl; } bool EventGenerator:: logException(const Exception & ex, tcEventPtr event) { bool noEvent = !event; ex.handle(); int c = count(ex); if ( c <= maxWarnings ) { printException(ex); if ( c == maxWarnings ) log() << "No more warnings of this kind will be reported." << endl; } if ( ex.severity() == Exception::info || ex.severity() == Exception::warning ) { ex.handle(); return false; } if ( ex.severity() == Exception::eventerror ) { if ( c < maxErrors || maxErrors <= 0 ) { ex.handle(); if ( ThePEG_DEBUG_LEVEL > 0 && !noEvent ) log() << *event; return false; } if ( c > maxErrors ) printException(ex); log() << "Too many (" << c << ") exceptions of this kind has occurred. " "Execution will be stopped.\n"; } else { log() << "This exception is too serious. Execution will be stopped.\n"; } if ( !noEvent ) log() << *event; else log() << "An exception occurred before any event object was created!\n"; dump(); return true; } struct MatcherOrdering { bool operator()(tcPMPtr m1, tcPMPtr m2) { return m1->name() < m2->name() || ( m1->name() == m2->name() && m1->fullName() < m2->fullName() ); } }; struct ObjectOrdering { bool operator()(tcIBPtr i1, tcIBPtr i2) { return i1->fullName() < i2->fullName(); } }; void EventGenerator::persistentOutput(PersistentOStream & os) const { set match(theMatchers.begin(), theMatchers.end()); set usedset(usedObjects.begin(), usedObjects.end()); os << theDefaultObjects << theLocalParticles << theStandardModel << theStrategy << theRandom << theEventHandler << theAnalysisHandlers << theHistogramFactory << theEventManipulator << thePath << theRunName << theNumberOfEvents << theObjectMap << theParticles << theQuickParticles << theQuickSize << match << usedset << ieve << weightSum << theDebugLevel << logNonDefault << printEvent << dumpPeriod << debugEvent << maxWarnings << maxErrors << theCurrentEventHandler << theCurrentStepHandler << useStdout << theMiscStream.str(); } void EventGenerator::persistentInput(PersistentIStream & is, int) { string dummy; theGlobalLibraries = is.globalLibraries(); is >> theDefaultObjects >> theLocalParticles >> theStandardModel >> theStrategy >> theRandom >> theEventHandler >> theAnalysisHandlers >> theHistogramFactory >> theEventManipulator >> thePath >> theRunName >> theNumberOfEvents >> theObjectMap >> theParticles >> theQuickParticles >> theQuickSize >> theMatchers >> usedObjects >> ieve >> weightSum >> theDebugLevel >> logNonDefault >> printEvent >> dumpPeriod >> debugEvent >> maxWarnings >> maxErrors >> theCurrentEventHandler >> theCurrentStepHandler >> useStdout >> dummy; theMiscStream.str(dummy); theMiscStream.seekp(0, std::ios::end); theObjects.clear(); for ( ObjectMap::iterator it = theObjectMap.begin(); it != theObjectMap.end(); ++it ) theObjects.insert(it->second); } void EventGenerator::setLocalParticles(PDPtr pd, int) { localParticles()[pd->id()] = pd; } void EventGenerator::insLocalParticles(PDPtr pd, int) { localParticles()[pd->id()] = pd; } void EventGenerator::delLocalParticles(int place) { ParticleMap::iterator it = localParticles().begin(); while ( place-- && it != localParticles().end() ) ++it; if ( it != localParticles().end() ) localParticles().erase(it); } vector EventGenerator::getLocalParticles() const { vector ret; for ( ParticleMap::const_iterator it = localParticles().begin(); it != localParticles().end(); ++it ) ret.push_back(it->second); return ret; } void EventGenerator::setPath(string newPath) { if ( std::system(("mkdir -p " + newPath).c_str()) ) throw EGNoPath(newPath); if ( std::system(("touch " + newPath + "/.ThePEG").c_str()) ) throw EGNoPath(newPath); if ( std::system(("rm -f " + newPath + "/.ThePEG").c_str()) ) throw EGNoPath(newPath); thePath = newPath; } string EventGenerator::defPath() const { char * env = std::getenv("ThePEG_RUN_DIR"); if ( env ) return string(env); return string("."); } ostream & EventGenerator::out() { return theOutStream; } ostream & EventGenerator::log() { return logfile().is_open()? logfile(): BaseRepository::cout(); } ostream & EventGenerator::ref() { return reffile().is_open()? reffile(): BaseRepository::cout(); } string EventGenerator::doSaveRun(string runname) { runname = StringUtils::car(runname); if ( runname.empty() ) runname = theRunName; if ( runname.empty() ) runname = name(); EGPtr eg = Repository::makeRun(this, runname); string file = eg->path() + "/" + eg->filename() + ".run"; PersistentOStream os(file); os << eg; if ( !os ) return "Error: Save failed! (I/O error)"; return ""; } string EventGenerator::doMakeRun(string runname) { runname = StringUtils::car(runname); if ( runname.empty() ) runname = theRunName; if ( runname.empty() ) runname = name(); Repository::makeRun(this, runname); return ""; } bool EventGenerator::preinitRegister(IPtr obj, string fullname) { if ( !preinitializing ) throw InitException() << "Tried to register a new object in the initialization of an " << "EventGenerator outside of the pre-initialization face. " << "The preinitRegister() can only be called from a doinit() function " << "in an object for which preInitialize() returns true."; if ( objectMap().find(fullname) != objectMap().end() ) return false; obj->name(fullname); objectMap()[fullname] = obj; objects().insert(obj); obj->theGenerator = this; PDPtr pd = dynamic_ptr_cast(obj); if ( pd ) theParticles[pd->id()] = pd; PMPtr pm = dynamic_ptr_cast(obj); if ( pm ) theMatchers.insert(pm); return true; } IPtr EventGenerator:: preinitCreate(string classname, string fullname, string libraries) { if ( !preinitializing ) throw InitException() << "Tried to create a new object in the initialization of an " << "EventGenerator outside of the pre-initialization face. " << "The preinitCreate() can only be called from a doinit() function " << "in an object for which preInitialize() returns true."; if ( objectMap().find(fullname) != objectMap().end() ) return IPtr(); const ClassDescriptionBase * db = DescriptionList::find(classname); while ( !db && libraries.length() ) { string library = StringUtils::car(libraries); libraries = StringUtils::cdr(libraries); DynamicLoader::load(library); db = DescriptionList::find(classname); } if ( !db ) return IPtr(); IPtr obj = dynamic_ptr_cast(db->create()); if ( !obj ) return IPtr(); if ( !preinitRegister(obj, fullname) ) return IPtr(); return obj; } string EventGenerator:: preinitInterface(IPtr obj, string ifcname, string cmd, string value) { if ( !preinitializing ) throw InitException() << "Tried to manipulate an external object in the initialization of an " << "EventGenerator outside of the pre-initialization face. " << "The preinitSet() can only be called from a doinit() function " << "in an object for which preInitialize() returns true."; if ( !obj ) return "Error: No object found."; const InterfaceBase * ifc = Repository::FindInterface(obj, ifcname); if ( !ifc ) return "Error: No such interface found."; try { return ifc->exec(*obj, cmd, value); } catch ( const InterfaceException & ex) { ex.handle(); return "Error: " + ex.message(); } } string EventGenerator:: preinitInterface(IPtr obj, string ifcname, int index, string cmd, string value) { ostringstream os; os << index; return preinitInterface(obj, ifcname, cmd, os.str() + " " + value); } string EventGenerator:: preinitInterface(string fullname, string ifcname, string cmd, string value) { return preinitInterface(getObject(fullname), ifcname, cmd, value); } string EventGenerator:: preinitInterface(string fullname, string ifcname, int index, string cmd, string value) { return preinitInterface(getObject(fullname), ifcname, index, cmd, value); } tDMPtr EventGenerator::findDecayMode(string tag) const { for ( ObjectSet::const_iterator it = objects().begin(); it != objects().end(); ++it ) { tDMPtr dm = dynamic_ptr_cast(*it); if ( dm && dm->tag() == tag ) return dm; } return tDMPtr(); } tDMPtr EventGenerator::preinitCreateDecayMode(string tag) { return constructDecayMode(tag); } DMPtr EventGenerator::constructDecayMode(string & tag) { DMPtr rdm; DMPtr adm; int level = 0; string::size_type end = 0; while ( end < tag.size() && ( tag[end] != ']' || level ) ) { switch ( tag[end++] ) { case '[': ++level; break; case ']': --level; break; } } rdm = findDecayMode(tag.substr(0,end)); if ( rdm ) return rdm; string::size_type next = tag.find("->"); if ( next == string::npos ) return rdm; if ( tag.find(';') == string::npos ) return rdm; tPDPtr pd = getObject(tag.substr(0,next)); if ( !pd ) pd = findParticle(tag.substr(0,next)); if ( !pd ) return rdm; rdm = ptr_new(); rdm->parent(pd); if ( pd->CC() ) { adm = ptr_new(); adm->parent(pd->CC()); rdm->theAntiPartner = adm; adm->theAntiPartner = rdm; } bool error = false; tag = tag.substr(next+2); tPDPtr lastprod; bool dolink = false; do { switch ( tag[0] ) { case '[': { tag = tag.substr(1); tDMPtr cdm = constructDecayMode(tag); if ( cdm ) rdm->addCascadeProduct(cdm); else error = true; } break; case '=': dolink = true; case ',': case ']': tag = tag.substr(1); break; case '?': { next = min(tag.find(','), tag.find(';')); tPMPtr pm = findMatcher(tag.substr(1,next-1)); if ( pm ) rdm->addProductMatcher(pm); else error = true; tag = tag.substr(next); } break; case '!': { next = min(tag.find(','), tag.find(';')); tPDPtr pd = findParticle(tag.substr(1,next-1)); if ( pd ) rdm->addExcluded(pd); else error = true; tag = tag.substr(next); } break; case '*': { next = min(tag.find(','), tag.find(';')); tPMPtr pm = findMatcher(tag.substr(1,next-1)); if ( pm ) rdm->setWildMatcher(pm); else error = true; tag = tag.substr(next); } break; default: { next = min(tag.find('='), min(tag.find(','), tag.find(';'))); tPDPtr pdp = findParticle(tag.substr(0,next)); if ( pdp ) rdm->addProduct(pdp); else error = true; tag = tag.substr(next); if ( dolink && lastprod ) { rdm->addLink(lastprod, pdp); dolink = false; } lastprod = pdp; } break; } } while ( tag[0] != ';' && tag.size() ); if ( tag[0] != ';' || error ) { return DMPtr(); } tag = tag.substr(1); DMPtr ndm = findDecayMode(rdm->tag()); if ( ndm ) return ndm; pd->addDecayMode(rdm); if ( !preinitRegister(rdm, pd->fullName() + "/" + rdm->tag()) ) return DMPtr(); if ( adm ) { preinitRegister(adm, pd->CC()->fullName() + "/" + adm->tag()); rdm->CC(adm); adm->CC(rdm); } return rdm; } tPDPtr EventGenerator::findParticle(string pdgname) const { for ( ParticleMap::const_iterator it = particles().begin(); it != particles().end(); ++it ) if ( it->second->PDGName() == pdgname ) return it->second; return tPDPtr(); } tPMPtr EventGenerator::findMatcher(string name) const { for ( MatcherSet::const_iterator it = matchers().begin(); it != matchers().end(); ++it ) if ( (**it).name() == name ) return *it; return tPMPtr(); } ClassDescription EventGenerator::initEventGenerator; void EventGenerator::Init() { static ClassDocumentation documentation ("This is the main class used to administer an event generation run. " "The actual generation of each event is handled by the assigned " "EventHandler object. When the event generator" "is properly set up it can be initialized with the command " "MakeRun and/or saved to a file with the command " "SaveRun. If saved to a file, the event generator " "can be read into another program to produce events. The file can also " "be read into the runThePEG program where a number of events " "determined by the parameter NumberOfEvents is " "generated with each event analysed by the list of assigned " "AnalysisHandlers."); static Reference interfaceStandardModel ("StandardModelParameters", "The ThePEG::StandardModelBase object to be used to access standard " "model parameters in this run.", &EventGenerator::theStandardModel, false, false, true, false); static Reference interfaceEventHandler ("EventHandler", "The ThePEG::EventHandler object to be used to generate the " "individual events in this run.", &EventGenerator::theEventHandler, false, false, true, false); static RefVector interfaceAnalysisHandlers ("AnalysisHandlers", "ThePEG::AnalysisHandler objects to be used to analyze the produced " "events in this run.", &EventGenerator::theAnalysisHandlers, 0, true, false, true, false); static Reference interfaceHistogramFactory ("HistogramFactory", "An associated factory object for handling histograms to be used by " "AnalysisHandlers.", &EventGenerator::theHistogramFactory, true, false, true, true, true); static Reference interfaceEventManip ("EventManipulator", "An ThePEG::EventManipulator called each time the generation of an " "event is stopped. The ThePEG::EventManipulator object is able to " "manipulate the generated event, as opposed to an " "ThePEG::AnalysisHandler which may only look at the event.", &EventGenerator::theEventManipulator, true, false, true, true); static RefVector interfaceLocalParticles ("LocalParticles", "Special versions of ThePEG::ParticleData objects to be used " "in this run. Note that to delete an object, its number in the list " "should be given, rather than its id number.", 0, 0, false, false, true, false, &EventGenerator::setLocalParticles, &EventGenerator::insLocalParticles, &EventGenerator::delLocalParticles, &EventGenerator::getLocalParticles); static RefVector interfaceDefaultObjects ("DefaultObjects", "A vector of pointers to default objects. In a ThePEG::Reference or " "ThePEG::RefVector interface with the defaultIfNull() flag set, if a " "null pointer is encountered this vector is gone through until an " "acceptable object is found in which case the null pointer is replaced " "by a pointer to this object.", &EventGenerator::theDefaultObjects, 0, true, false, true, false, false); static Reference interfaceStrategy ("Strategy", "An ThePEG::Strategy with additional ThePEG::ParticleData objects to " "be used in this run.", &EventGenerator::theStrategy, false, false, true, true); static Reference interfaceRandomGenerator ("RandomNumberGenerator", "An ThePEG::RandomGenerator object which should typically interaface to " "a CLHEP Random object. This will be the default random number generator " "for the run, but individual objects may use their own random generator " "if they wish.", &EventGenerator::theRandom, true, false, true, false); static Parameter interfacePath ("Path", "The directory where the output files are put.", &EventGenerator::thePath, ".", true, false, &EventGenerator::setPath, 0, &EventGenerator::defPath); interfacePath.directoryType(); static Parameter interfaceRunName ("RunName", "The name of this run. This name will be used in the output filenames. " "The files wil be placed in the directory specified by the " "Path parameter" "If empty the name of the event generator will be used instead.", &EventGenerator::theRunName, "", true, false, 0, 0, &EventGenerator::name); static Parameter interfaceNumberOfEvents ("NumberOfEvents", "The number of events to be generated in this run. If less than zero, " "the number of events is unlimited", &EventGenerator::theNumberOfEvents, 1000, -1, Constants::MaxInt, true, false, Interface::lowerlim); static Parameter interfaceDebugLevel ("DebugLevel", "The level of debug information sent out to the log file in the run. " "Level 0 only gives a limited ammount of warnings and error messages. " "Level 1 will print the first few events. " "Level 5 will print every event. " "Level 9 will print every step in every event.", &EventGenerator::theDebugLevel, 0, 0, 9, true, false, true); static Parameter interfacePrintEvent ("PrintEvent", "If the debug level is above zero, print the first 'PrintEvent' events.", &EventGenerator::printEvent, 0, 0, 1000, true, false, Interface::lowerlim); static Parameter interfaceDumpPeriod ("DumpPeriod", "If the debug level is above zero, dump the full state of the run every " "'DumpPeriod' events. Set it to -1 to disable dumping even in the case of errors.", &EventGenerator::dumpPeriod, 0, -1, Constants::MaxInt, true, false, Interface::lowerlim); static Parameter interfaceDebugEvent ("DebugEvent", "If the debug level is above zero, step up to the highest debug level " "befor event number 'DebugEvent'.", &EventGenerator::debugEvent, 0, 0, Constants::MaxInt, true, false, Interface::lowerlim); static Parameter interfaceMaxWarnings ("MaxWarnings", "The maximum number of warnings of each type which will be printed.", &EventGenerator::maxWarnings, 10, 1, 100, true, false, Interface::lowerlim); static Parameter interfaceMaxErrors ("MaxErrors", "The maximum number of errors of each type which will be tolerated. " "If more errors are reported, the run will be aborted.", &EventGenerator::maxErrors, 10, -1, 100000, true, false, Interface::lowerlim); static Parameter interfaceQuickSize ("QuickSize", "The max absolute id number of particle data objects which are accessed " "quickly through a vector indexed by the id number.", &EventGenerator::theQuickSize, 7000, 0, 50000, true, false, Interface::lowerlim); static Command interfaceSaveRun ("SaveRun", "Isolate, initialize and save this event generator to a file, from which " "it can be read in and run in another program. If an agument is given " "this is used as the run name, otherwise the run name is taken from the " "RunName parameter.", &EventGenerator::doSaveRun, true); static Command interfaceMakeRun ("MakeRun", "Isolate and initialize this event generator and give it a run name. " "If no argument is given, the run name is taken from the " "RunName parameter.", &EventGenerator::doMakeRun, true); interfaceEventHandler.rank(11.0); interfaceSaveRun.rank(10.0); interfaceMakeRun.rank(9.0); interfaceRunName.rank(8.0); interfaceNumberOfEvents.rank(7.0); interfaceAnalysisHandlers.rank(6.0); static Switch interfaceUseStdout ("UseStdout", "Redirect the logging and output to stdout instead of files.", &EventGenerator::useStdout, false, true, false); static SwitchOption interfaceUseStdoutYes (interfaceUseStdout, "Yes", "Use stdout instead of log files.", true); static SwitchOption interfaceUseStdoutNo (interfaceUseStdout, "No", "Use log files.", false); static Switch interfaceLogNonDefault ("LogNonDefault", "Controls the printout of important interfaces which has been changed from their default values.", &EventGenerator::logNonDefault, -1, true, false); static SwitchOption interfaceLogNonDefaultYes (interfaceLogNonDefault, "Yes", "Always print changed interfaces.", 1); static SwitchOption interfaceLogNonDefaultOnDebug (interfaceLogNonDefault, "OnDebug", "Only print changed interfaces if debugging is turned on.", 0); static SwitchOption interfaceLogNonDefaultNo (interfaceLogNonDefault, "No", "Don't print changed interfaces.", -1); interfaceLogNonDefault.setHasDefault(false); } EGNoPath::EGNoPath(string path) { theMessage << "Cannot set the directory path for output files to '" << path << "' because the directory did not exist and could not be " << "created."; severity(warning); } thepeg-1.8.0.orig/Repository/UseRandom.fh0000644000175000017500000000036611747772425016547 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_UseRandom_FH #define ThePEG_UseRandom_FH // // This is the forward declaration of the UseRandom class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class UseRandom; } #endif /* ThePEG_UseRandom_FH */ thepeg-1.8.0.orig/Repository/RandomGenerator.cc0000644000175000017500000001176611747772425017737 0ustar sunsun// -*- C++ -*- // // RandomGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RandomGenerator class. // #include "RandomGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "gsl/gsl_randist.h" extern "C" { typedef struct { ThePEG::RandomGenerator * r; } thepeg_random_state_t; void thepeg_random_set(void *, unsigned long int) {} double thepeg_random_get_double(void * s) { return static_cast(s)->r->rnd(); } unsigned long int thepeg_random_get(void * s) { return static_cast(std::numeric_limits::max()*thepeg_random_get_double(s)); } static const gsl_rng_type thepeg_random_type = {"thepeg_random", (unsigned long int)std::numeric_limits::max(), 0, sizeof(thepeg_random_state_t), &thepeg_random_set, &thepeg_random_get, &thepeg_random_get_double}; const gsl_rng_type *gsl_rng_thepeg_random = &thepeg_random_type; } using namespace ThePEG; RandomGenerator::RandomGenerator() : theNumbers(1000), theSize(1000), theSeed(-1), savedGauss(0.0), gaussSaved(false) { nextNumber = theNumbers.end(); gsl = gsl_rng_alloc(gsl_rng_thepeg_random); static_cast(gsl->state)->r = this; } RandomGenerator::RandomGenerator(const RandomGenerator & rg) : Interfaced(rg), theNumbers(rg.theNumbers), theSize(rg.theSize), theSeed(rg.theSeed), savedGauss(rg.savedGauss), gaussSaved(rg.gaussSaved) { nextNumber = theNumbers.begin() + ( RndVector::const_iterator(rg.nextNumber) - rg.theNumbers.begin() ); gsl = gsl_rng_alloc(gsl_rng_thepeg_random); static_cast(gsl->state)->r = this; } RandomGenerator::~RandomGenerator() { gsl_rng_free(gsl); } void RandomGenerator::doinit() { if ( theSeed != 0 ) setSeed(theSeed); flush(); } void RandomGenerator::setSize(size_type newSize) { RndVector newNumbers(newSize); RndVector::iterator nextNew = newNumbers.end() - min( int(theNumbers.end() - nextNumber), int(newSize) ); for ( RndVector::iterator i = nextNew; i != newNumbers.end(); ++i ) *i = *nextNumber++; RndVector::difference_type pos = nextNew - newNumbers.begin(); theNumbers.swap(newNumbers); nextNumber = theNumbers.begin() + pos; } bool RandomGenerator::rndbool(double p) { if ( p >= 1.0 ) return true; if ( p <= 0.0 ) return false; double r = rnd(); if ( r < p ) { push_back(r/p); return true; } else { push_back((r - p)/(1.0 - p)); return false; } } int RandomGenerator::rndsign(double p1, double p2, double p3) { double sum = p1 + p2 + p3; double r = rnd()*sum; if ( r < p1 ) { push_back(r/p1); return -1; } else if ( r < p1 + p2 ) { push_back((r - p1)/p2); return 0; } else { push_back((r - p1 - p2)/p3); return 1; } } int RandomGenerator::rnd4(double p0, double p1, double p2, double p3) { double sum = p0 + p1 + p2 + p3; double r = rnd()*sum; if ( r < p0 ) { push_back(r/p0); return 0; } else if ( r < p0 + p1 ) { push_back((r - p0)/p1); return 1; } else if ( r < p0 + p1 + p2 ) { push_back((r - p0 - p1)/p2); return 2; } else { push_back((r - p0 - p1 - p2)/p3); return 3; } } long RandomGenerator::rndPoisson(double mean) { return gsl_ran_poisson(gsl, mean); } void RandomGenerator::persistentOutput(PersistentOStream & os) const { os << theNumbers << RndVector::const_iterator(nextNumber) - theNumbers.begin() << theSize << theSeed << savedGauss << gaussSaved; } void RandomGenerator::persistentInput(PersistentIStream & is, int) { RndVector::difference_type pos; is >> theNumbers >> pos >> theSize >> theSeed >> savedGauss >> gaussSaved; nextNumber = theNumbers.begin() + pos; } ClassDescription RandomGenerator::initRandomGenerator; void RandomGenerator::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::RandomGenerator class"); static Parameter interfaceSize ("CacheSize", "The Random numbers are generated in chunks of this size.", &RandomGenerator::theSize, 1000, 10, 100000, true, false, true, &RandomGenerator::setSize); static Parameter interfaceSeed ("Seed", "The seed with which this random generator is initialized. " "If set to -1, the default build-in seed will be used. If set to zero, no seed will " "be set.", &RandomGenerator::theSeed, -1, -1, 100000000, true, false, false); interfaceSeed.setHasDefault(false); interfaceSize.rank(10); interfaceSeed.rank(9); } thepeg-1.8.0.orig/Repository/Makefile.am0000644000175000017500000000260311747772425016363 0ustar sunsunmySOURCES = EventGenerator.cc RandomGenerator.cc Strategy.cc \ BaseRepository.cc Repository.cc StandardRandom.cc \ UseRandom.cc CurrentGenerator.cc Main.cc DOCFILES = BaseRepository.h EventGenerator.h RandomGenerator.h \ Repository.h StandardRandom.h Strategy.h \ UseRandom.h CurrentGenerator.h Main.h INCLUDEFILES = $(DOCFILES) BaseRepository.tcc \ BaseRepository.xh EventGenerator.fh \ EventGenerator.tcc EventGenerator.xh \ Strategy.fh RandomGenerator.fh UseRandom.fh \ CurrentGenerator.fh noinst_LTLIBRARIES = libThePEGRepo.la pkglib_LTLIBRARIES = ThePEGStrategy.la MultiEventGenerator.la libThePEGRepo_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGRepo_la_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" \ -DTHEPEG_PKGDATADIR="\"$(pkgdatadir)\"" # Version info should be updated if any interface or persistent I/O # function is changed ThePEGStrategy_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ThePEGStrategy_la_SOURCES = ThePEGStrategy.cc ThePEGStrategy.h # Version info should be updated if any interface or persistent I/O # function is changed MultiEventGenerator_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MultiEventGenerator_la_SOURCES = MultiEventGenerator.cc MultiEventGenerator.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Repository/MultiEventGenerator.cc0000644000175000017500000001675311747772425020614 0ustar sunsun// -*- C++ -*- // // MultiEventGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MultiEventGenerator class. // #include "MultiEventGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Repository/BaseRepository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Utilities/StringUtils.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Repository/CurrentGenerator.h" #include using namespace ThePEG; MultiEventGenerator::~MultiEventGenerator() {} IBPtr MultiEventGenerator::clone() const { return new_ptr(*this); } IBPtr MultiEventGenerator::fullclone() const { return new_ptr(*this); } string MultiEventGenerator::removeInterface(string cmd) { string noun = StringUtils::car(cmd); IBPtr ip = BaseRepository::getObjectFromNoun(noun); const InterfaceBase * ifb = BaseRepository:: FindInterface(ip, BaseRepository::getInterfaceFromNoun(noun)); string posarg = BaseRepository::getPosArgFromNoun(noun); for ( string::size_type i = 0; i < theObjects.size(); ++i ) { if ( theObjects[i] == ip && theInterfaces[i] == ifb->name() && thePosArgs[i] == posarg ) { theObjects.erase(theObjects.begin() + i); theInterfaces.erase(theInterfaces.begin() + i); thePosArgs.erase(thePosArgs.begin() + i); theValues.erase(theValues.begin() + i); return ""; } } return "No such object/interface defined for this MultiEventGenerator."; } string MultiEventGenerator::addInterface(string cmd) { breakThePEG(); string noun = StringUtils::car(cmd); IBPtr ip = BaseRepository::getObjectFromNoun(noun); const InterfaceBase * ifb = BaseRepository:: FindInterface(ip, BaseRepository::getInterfaceFromNoun(noun)); string posarg = BaseRepository::getPosArgFromNoun(noun); cmd = StringUtils::cdr(cmd); if ( cmd.empty() ) return "Error: empty argument list."; StringVector args; do { args.push_back(StringUtils::car(cmd, ",")); cmd = StringUtils::cdr(cmd, ","); } while ( !cmd.empty() ); string ret; string oldvalue = ifb->exec(*ip, "get", posarg); try { for ( string::size_type i = 0; i < args.size(); ++i ) ifb->exec(*ip, "set", args[i]); } catch (const Exception & e) { e.handle(); ret = "Error: " + e.message(); } ifb->exec(*ip, "set", posarg + " " + oldvalue); if ( !ret.empty() ) return ret; for ( string::size_type i = 0; i < theObjects.size(); ++i ) { if ( theObjects[i] == ip && theInterfaces[i] == ifb->name() && thePosArgs[i] == posarg ) { theValues[i].insert(theValues[i].end(), args.begin(), args.end()); return ""; } } theObjects.push_back(ip); theInterfaces.push_back(ifb->name()); thePosArgs.push_back(posarg); theValues.push_back(args); return ""; } void MultiEventGenerator::doGo(long next, long maxevent, bool tics) { if ( theObjects.empty() || next < 0 ) { EventGenerator::doGo(next, maxevent, tics); return; } if ( maxevent >= 0 ) N(maxevent); vector interfaces; long nargs = 1; for ( string::size_type i = 0; i < theObjects.size(); ++i ) { nargs *= theValues[i].size(); interfaces.push_back(BaseRepository::FindInterface(theObjects[i], theInterfaces[i])); } openOutputFiles(); string baseName = runName(); if ( tics ) tic(next - 1, nargs*N()); for ( long iargs = 0; iargs < nargs; ++iargs ) { ostringstream subname; subname << baseName << ":" << iargs + 1; runName(subname.str()); heading(log(), iargs, interfaces, baseName); heading(out(), iargs, interfaces, baseName); reset(); for_each(objects(), mem_fun(&InterfacedBase::reset)); init(); initrun(); ieve = next-1; try { while ( shoot() ) { if ( tics ) tic(ieve + iargs*N(), nargs*N()); } } catch ( ... ) { finish(); throw; } finish(); } runName(baseName); finally(); } void MultiEventGenerator:: heading(ostream & os, long iargs, const vector & interfaces, string baseName) const { long div = 1; if ( iargs > 0 ) os << endl; os << ">> " << baseName << " sub-run number " << iargs + 1 << " using the following interface values:" << endl; for ( string::size_type i = 0; i < theObjects.size(); ++i ) { long iarg = (iargs/div)%theValues[i].size(); interfaces[i]->exec(*theObjects[i], "set", thePosArgs[i] + " " + theValues[i][iarg]); os << " set " << theObjects[i]->name() << ":" << theInterfaces[i]; if ( !thePosArgs[i].empty() ) os << "[" << thePosArgs[i] << "]"; os << " " << theValues[i][iarg] << endl; div *= theValues[i].size(); } os << endl; } void MultiEventGenerator::persistentOutput(PersistentOStream & os) const { os << theObjects << theInterfaces << thePosArgs << theValues; } void MultiEventGenerator::persistentInput(PersistentIStream & is, int) { is >> theObjects >> theInterfaces >> thePosArgs >> theValues; } IVector MultiEventGenerator::getReferences() { IVector ret = EventGenerator::getReferences(); ret.insert(ret.end(), theObjects.begin(), theObjects.end()); return ret; } void MultiEventGenerator::rebind(const TranslationMap & trans) { for ( string::size_type i = 0; i < theObjects.size(); ++i ) theObjects[i] = trans.translate(theObjects[i]); EventGenerator::rebind(trans); } ClassDescription MultiEventGenerator::initMultiEventGenerator; // Definition of the static class description member. void MultiEventGenerator::Init() { static ClassDocumentation documentation ("The ThePEG::MultiEventGenerator class is derived from the " "ThePEG::EventGenerator and is capable of making " "several runs with a pre-defined set of parameter and switch values."); static Command interfaceAddInterface ("AddInterface", "If arguments are given on the form 'object-name:interface-name arg1, " "arg2, arg3' or 'object-name:vectorinterface-name[pos] arg1, arg2, arg3' " "the generator will be run three times with the corresonding interface of " "the given object set to arg1, arg2, arg3 in each run respectively. If " "another interface with e.g. 4 different arguments, the generator will " "be run 12 times once for each combination of arguments. If called with " "an object and interface wich has already been given in a previous call, " "the new arguments will be added to the previously specified list without " "checking if any argument is doubled.", &MultiEventGenerator::addInterface); static Command interfaceRemoveInterface ("RemoveInterface", "If arguments are given on the form 'object-name:interface-name' and " "the same interface and object was previously with an " "AddInterface}, the corresponding arguments are " "removed and the interfaced will be left unchanged during the generation.", &MultiEventGenerator::removeInterface); interfaceAddInterface.rank(10.7); interfaceRemoveInterface.rank(10.5); } thepeg-1.8.0.orig/Repository/BaseRepository.cc0000644000175000017500000007723611747772425017626 0ustar sunsun// -*- C++ -*- // // BaseRepository.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the BaseRepository class. // // macro is passed in from -D compile flag #ifndef THEPEG_PKGDATADIR #error Makefile.am needs to define THEPEG_PKGDATADIR #endif #include "BaseRepository.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/InterfaceBase.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/DescriptionList.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/TypeInfo.h" #include "ThePEG/Utilities/DynamicLoader.h" #include "ThePEG/Utilities/StringUtils.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/PDT/DecayMode.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "BaseRepository.tcc" #endif using namespace ThePEG; ostream *& BaseRepository::coutp() { static ostream * theCout = &std::cout; return theCout; } ostream *& BaseRepository::cerrp() { static ostream * theCerr = &std::cerr; return theCerr; } ostream *& BaseRepository::clogp() { static ostream * theClog = &std::clog; return theClog; } bool & BaseRepository::updating() { static bool theBool = false; return theBool; } ObjectMap & BaseRepository::objects() { static ObjectMap theObjectMap; return theObjectMap; } ObjectSet & BaseRepository::allObjects() { static ObjectSet theObjectSet; return theObjectSet; } BaseRepository::TypeInterfaceMap & BaseRepository::interfaces() { static TypeInterfaceMap theInterfaceMap; return theInterfaceMap; } BaseRepository::TypeDocumentationMap & BaseRepository::documentations() { static TypeDocumentationMap theDocumentationMap; return theDocumentationMap; } BaseRepository::DirectorySet & BaseRepository::directories() { static char root[1][2] = {"/"}; static DirectorySet theDirectories(root, root+1); return theDirectories; } vector & BaseRepository::globalLibraries() { static vector theGlobalLibraries; return theGlobalLibraries; } stack & BaseRepository::currentReadDirStack() { static stack theCurrentReadDirStack; if ( theCurrentReadDirStack.empty() ) theCurrentReadDirStack.push(""); return theCurrentReadDirStack; } vector & BaseRepository::readDirs() { // macro is passed in from -D compile flag static vector theReadDirs(1, THEPEG_PKGDATADIR); return theReadDirs; } void BaseRepository::prependReadDir(string dir) { readDirs().insert(readDirs().begin(), dir); } void BaseRepository::appendReadDir(string dir) { readDirs().push_back(dir); } BaseRepository::StringVector & BaseRepository::directoryStack() { static StringVector theDirectoryStack(1, "/"); return theDirectoryStack; } void BaseRepository::Register(const InterfaceBase & ib, const type_info & i) { const ClassDescriptionBase * db = DescriptionList::find(i); if ( db ) interfaces()[db].insert(&ib); } void BaseRepository:: Register(const ClassDocumentationBase & cd, const type_info & i) { const ClassDescriptionBase * db = DescriptionList::find(i); if ( db ) documentations()[db] = &cd; } void BaseRepository::Register(IBPtr ip, string newName) { DirectoryAppend(newName); ip->name(newName); Register(ip); } void BaseRepository::Register(IBPtr ip) { if ( !ip || member(allObjects(), ip) ) return; while ( member(objects(), ip->fullName()) ) ip->name(ip->fullName() + "#"); objects()[ip->fullName()] = ip; allObjects().insert(ip); ip->clear(); ip->update(); ip->touch(); } void BaseRepository::DirectoryAppend(string & name) { if ( name == "." ) name = directoryStack().back(); if ( name[0] != '/' ) name = directoryStack().back() + name; } void BaseRepository::CreateDirectory(string name) { DirectoryAppend(name); if ( name[name.size()-1] != '/' ) name += "/"; if ( member(directories(), name) ) return; directories().insert(name); name = name.substr(0, name.size() - 1); name = name.substr(0, name.rfind('/')); if ( name.size() ) CreateDirectory(name); } void BaseRepository::CheckObjectDirectory(string name) { if ( name[name.size() - 1] != '/' ) name = name.substr(0, name.rfind('/') + 1); CheckDirectory(name); } void BaseRepository::CheckDirectory(string name) { DirectoryAppend(name); if ( name[name.size()-1] != '/' ) name += "/"; if ( member(directories(), name) ) return; throw RepositoryNoDirectory(name); } void BaseRepository::ChangeDirectory(string name) { DirectoryAppend(name); if ( name[name.size()-1] != '/' ) name += "/"; if ( member(directories(), name) ) { directoryStack().back() = name; return; } throw RepositoryNoDirectory(name); } void BaseRepository::PushDirectory(string name) { DirectoryAppend(name); if ( name[name.size()-1] != '/' ) name += "/"; if ( member(directories(), name) ) { directoryStack().push_back(name); return; } throw RepositoryNoDirectory(name); } void BaseRepository::PopDirectory() { if ( directoryStack().size() > 1 ) directoryStack().pop_back(); } IBPtr BaseRepository::GetPointer(string name) { ObjectMap::iterator it = objects().find(name); return it == objects().end()? IBPtr(): it->second; } IVector BaseRepository::SearchDirectory(string name, string className) { IVector ret; DirectoryAppend(name); const ClassDescriptionBase * cdb = 0; if ( className.size() ) { cdb = DescriptionList::find(className); if ( !cdb ) return ret; } if ( name[name.size()-1] != '/' ) name += "/"; string::size_type size = name.size(); for ( ObjectMap::const_iterator i = objects().begin(); i != objects().end(); ++i ) { if ( cdb && !DescriptionList::find(typeid(*(i->second)))->isA(*cdb) ) continue; if ( i->first.substr(0, size) == name ) ret.push_back(i->second); } return ret; } IVector BaseRepository::GetObjectsReferringTo(IBPtr obj) { IVector ret; for ( ObjectMap::const_iterator i = objects().begin(); i != objects().end(); ++i ) { if ( obj == i->second ) continue; IVector ov = DirectReferences(i->second); if ( member(ov, obj) ) ret.push_back(i->second); } return ret; } IVector BaseRepository::DirectReferences(IBPtr obj) { IVector ov = obj->getReferences(); InterfaceMap interfaceMap = getInterfaces(typeid(*obj)); for ( InterfaceMap::iterator iit = interfaceMap.begin(); iit != interfaceMap.end(); ++iit ) { IVector ovi = iit->second->getReferences(*obj); ov.insert(ov.end(), ovi.begin(), ovi.end()); } return ov; } void BaseRepository:: addReferences(tIBPtr obj, ObjectSet & refs) { if ( !obj ) return; refs.insert(obj); IVector ov = obj->getReferences(); for ( IVector::const_iterator it = ov.begin(); it != ov.end(); ++it ) if ( !member(refs, *it) ) addReferences(*it, refs); InterfaceMap interfaceMap = getInterfaces(typeid(*obj)); for ( InterfaceMap::iterator iit = interfaceMap.begin(); iit != interfaceMap.end(); ++iit ) { IVector ov = iit->second->getReferences(*obj); for ( IVector::const_iterator it = ov.begin(); it != ov.end(); ++it ) if ( !member(refs, *it) ) addReferences(*it, refs); } } void BaseRepository:: addInterfaces(const ClassDescriptionBase & db, InterfaceMap & interfaceMap, bool all) { for ( ClassDescriptionBase::DescriptionVector::const_iterator it = db.descriptions().begin(); it != db.descriptions().end(); ++it ) if ( *it ) addInterfaces(**it, interfaceMap, all); TypeInterfaceMap::const_iterator cit = interfaces().find(&db); if ( cit == interfaces().end() ) return; for ( InterfaceSet::const_iterator iit = (cit->second).begin(); iit != (cit->second).end(); ++iit ) { string n = (**iit).name(); while ( all && member(interfaceMap, n) ) n = "+" + n; interfaceMap[n] = *iit; } } InterfaceMap BaseRepository::getInterfaces(const type_info & ti, bool all) { InterfaceMap interfaceMap; const ClassDescriptionBase * db = DescriptionList::find(ti); if ( !db ) return interfaceMap; addInterfaces(*db, interfaceMap, all); return interfaceMap; } void BaseRepository:: rebind(InterfacedBase & i, const TranslationMap & trans, const IVector & defaults) { InterfaceMap interfaceMap = getInterfaces(typeid(i), true); for ( InterfaceMap::iterator iit = interfaceMap.begin(); iit != interfaceMap.end(); ++iit ) iit->second->rebind(i, trans, defaults); i.rebind(trans); } void BaseRepository::update() { for_each(allObjects(), mem_fun(&InterfacedBase::update)); clearAll(allObjects()); } template bool overlap(const Set1 & s1, const Set2 & s2) { typename Set1::const_iterator i1 = s1.begin(); typename Set2::const_iterator i2 = s2.begin(); while ( i1 != s1.end() && i2 != s2.end() ) { if ( *i1 == *i2 ) return true; if ( *i1 < *i2 ) { i1 = s1.lower_bound(*i2); if ( *i1 == *i2 ) return true; ++i1; } else { i2 = s2.lower_bound(*i1); if ( *i1 == *i2 ) return true; ++i2; } } return false; } void BaseRepository::remove(tIBPtr ip) { ObjectMap::iterator it = objects().find(ip->fullName()); if ( it == objects().end() || ip != it->second ) return; objects().erase(it); allObjects().erase(ip); } string BaseRepository::remove(const ObjectSet & rmset) { ObjectSet refset; for ( ObjectSet::const_iterator oi = rmset.begin(); oi != rmset.end(); ++oi ) { IVector ov = GetObjectsReferringTo(*oi); refset.insert(ov.begin(), ov.end()); } for ( ObjectSet::iterator oi = rmset.begin(); oi != rmset.end(); ++oi ) refset.erase(*oi); if ( refset.empty() ) { for ( ObjectSet::iterator oi = rmset.begin(); oi != rmset.end(); ++oi ) remove(*oi); return ""; } string ret = "Error: cannot remove the objects because the following " "objects refers to some of them:\n"; for ( ObjectSet::iterator oi = refset.begin(); oi != refset.end(); ++oi ) ret += (**oi).fullName() + "\n"; return ret; } void BaseRepository::rename(tIBPtr ip, string newName) { ObjectSet::iterator it = allObjects().find(ip); if ( it == allObjects().end() ) { Register(ip, newName); return; } ObjectMap::iterator mit = objects().find(ip->fullName()); if ( mit == objects().end() || mit->second != ip ) throw RepoNameException(ip->fullName()); objects().erase(mit); ip->name(newName); while ( member(objects(), ip->fullName()) ) ip->name(ip->fullName() + "#"); objects()[ip->fullName()] = ip; } const InterfaceBase * BaseRepository::FindInterface(IBPtr ip, string name) { InterfaceMap imap = getInterfaces(typeid(*ip), false); InterfaceMap::iterator it = imap.find(name); return it == imap.end()? 0: it->second; } const ClassDocumentationBase * BaseRepository::getDocumentation(tcIBPtr ip) { TypeDocumentationMap::const_iterator cdoc = documentations().find(DescriptionList::find(typeid(*ip))); return cdoc != documentations().end()? cdoc->second: 0; } string BaseRepository::getModelDescription(tcIBPtr ip) { const ClassDocumentationBase * cd = getDocumentation(ip); return cd? cd->modelDescription(): string(""); } string BaseRepository::getModelReferences(tcIBPtr ip) { const ClassDocumentationBase * cd = getDocumentation(ip); return cd? cd->modelReferences(): string(""); } IBPtr BaseRepository::TraceObject(string path) { DirectoryAppend(path); string::size_type colon = path.find(':'); IBPtr ip = GetPointer(path.substr(0, colon)); if ( !ip ) { // Do special check if this is a decay mode. string name = path.substr(0, colon); string::size_type slash = name.rfind('/'); if ( slash != string::npos ) name = name.substr(slash + 1); if ( name.find("->") != string::npos && name[name.length() - 1] == ';' ) { vector save; DMPtr dm = DecayMode::constructDecayMode(name, &save); if ( dm ) ip = dynamic_ptr_cast(GetPointer(path.substr(0, slash + 1) + dm->tag())); if ( ip ) Throw() << "Warning: rewriting DecayMode name '" << path.substr(0, colon).substr(slash + 1) << "' to '" << ip->name() << Exception::warning; } } while ( colon != string::npos ) { if ( !ip ) throw RepositoryNotFound(path); path = path.substr(colon+1); colon = path.find(':'); string::size_type bra = path.find('['); const InterfaceBase * ifb = FindInterface(ip, path.substr(0, min(colon, bra))); const ReferenceBase * rb = dynamic_cast(ifb); if ( rb ) { ip = rb->get(*ip); continue; } const RefVectorBase * rvb = dynamic_cast(ifb); if ( rvb ) { unsigned int place = 0; if ( bra < colon ) { string::size_type ket = path.find(']'); place = atoi(path.substr(bra + 1,ket - bra - 1).c_str()); } IVector iv = rvb->get(*ip); if ( place >= iv.size() ) throw RepositoryNotFound(path); ip = iv[place]; continue; } const CommandBase * cb = dynamic_cast(ifb); if ( cb ) { string::size_type ket = path.find(']'); string newobj = cb->cmd(*ip, path.substr(bra + 1,ket - bra - 1)); ip = GetPointer(newobj); continue; } throw RepositoryNotFound(path); } if ( !ip ) throw RepositoryNotFound(path); return ip; } IBPtr BaseRepository::getObjectFromNoun(string noun) { string::size_type colon = noun.rfind(':'); return TraceObject(noun.substr(0, colon)); } string BaseRepository::getInterfaceFromNoun(string noun) { string::size_type colon = noun.rfind(':'); string interface = noun.substr(colon+1); string::size_type bra = interface.find('['); if ( bra != string::npos ) return interface.substr(0, bra); else return interface; } string BaseRepository::getPosArgFromNoun(string noun) { string::size_type colon = noun.rfind(':'); string interface = noun.substr(colon+1); string::size_type bra = interface.find('['); if ( bra != string::npos ) { string::size_type ket = interface.find(']'); return interface.substr(bra + 1,ket - bra - 1); } return ""; } string BaseRepository:: GetInterfacedBaseClasses(const ClassDescriptionBase * cdb) { if ( !cdb || cdb->name() == "ThePEG::Interfaced" || cdb->name() == "ThePEG::InterfacedBase" ) return ""; string ret = cdb->name() + "\n"; for ( int i = 0, N = cdb->descriptions().size(); i < N; ++i ) ret += GetInterfacedBaseClasses(cdb->descriptions()[i]); return ret; } struct InterfaceOrder { bool operator()(const InterfaceBase * x, const InterfaceBase * y) const { return x->rank() > y->rank() || ( x->rank() == y->rank() && x->name() < y->name() ); } }; void BaseRepository::readSetup(tIBPtr ip, istream & is) { ip->setup(is); } string BaseRepository::exec(string command, ostream &) { string verb = StringUtils::car(command); command = StringUtils::cdr(command); if ( verb.empty() || verb[0] == '#' ) return ""; try { if ( verb == "DISABLEREADONLY" ) { InterfaceBase::NoReadOnly = true; return ""; } if ( verb == "ENABLEREADONLY" ) { InterfaceBase::NoReadOnly = false; return ""; } if ( verb == "cd" || verb == "pushd" || verb == "mkdir") { string dir = StringUtils::car(command); if ( verb == "cd" ) ChangeDirectory(dir); else if ( verb == "pushd" ) PushDirectory(dir); else CreateDirectory(dir); return ""; } if ( verb == "popd" ) { PopDirectory(); return ""; } if ( verb == "pwd" ) return directoryStack().back(); if ( verb == "dirs" ) { string ret; for ( StringVector::reverse_iterator it = directoryStack().rbegin(); it != directoryStack().rend(); ++it ) ret += *it; return ret; } if ( verb == "cp" || verb == "mv" ) { string oldname = StringUtils::car(command); DirectoryAppend(oldname); IBPtr obj = GetPointer(oldname); if ( !obj ) return "Error: No object named '" + oldname + "' available."; command = StringUtils::cdr(command); string newname = StringUtils::car(command); DirectoryAppend(newname); if ( newname[newname.size() - 1] == '/' ) newname += obj->name(); if ( verb == "cp" ) obj = obj->fullclone(); rename(obj, newname); return ""; } if ( verb == "check" ) { string name = StringUtils::car(command); if ( directories().find(name) != directories().end() ) return name; if ( objects().find(name) != objects().end() ) return name; return "Not found"; } if ( verb == "ls" ) { string className; string dir = StringUtils::car(command); if ( dir.size() ) { PushDirectory(dir); command = StringUtils::cdr(command); className = StringUtils::car(command); } string ret; string thisdir = directoryStack().back(); for ( DirectorySet::iterator it = directories().begin(); it != directories().end(); ++it ) { string d = *it; if ( d.size() <= thisdir.size() ) continue; string d0 = d.substr(0, thisdir.size()); string d1 = d.substr(thisdir.size()); if ( d0 == thisdir && d1.find('/') == d1.size() - 1 ) { if ( className.size() && SearchDirectory(d, className).empty() ) continue; ret += (dir.size()? d: d1) + "\n"; } } for ( ObjectMap::iterator it = objects().begin(); it != objects().end(); ++it ) { if ( className.size() ) { const ClassDescriptionBase * cdb = DescriptionList::find(className); if ( cdb && !DescriptionList::find(typeid(*(it->second)))->isA(*cdb) ) continue; } if ( thisdir + it->second->name() == it->first ) ret += (dir.size()? it->first: it->second->name()) + '\n'; } if ( dir.size() ) PopDirectory(); return ret; } if ( verb == "library" ) { string library = StringUtils::car(command); if ( library.empty() ) return "Error: No library specified."; if ( !DynamicLoader::load(library) ) return "Error: Could not load library " + library + "\n - " + DynamicLoader::lastErrorMessage; return ""; } if ( verb == "globallibrary" ) { string library = StringUtils::car(command); if ( library.empty() ) return "Error: No library specified."; if ( !DynamicLoader::load(library) ) return "Error: Could not load library " + library + "\n - " + DynamicLoader::lastErrorMessage; globalLibraries().push_back(library); return ""; } if ( verb == "rmgloballibrary" ) { string library = StringUtils::car(command); if ( library.empty() ) return "Error: No library specified."; vector::iterator it; while ( (it = find(globalLibraries(), library)) != globalLibraries().end() ) globalLibraries().erase(it); return ""; } if ( verb == "appendpath" ) { string path = StringUtils::car(command); if ( !path.empty() ) DynamicLoader::appendPath(path); return ""; } if ( verb == "lspaths" ) { string paths; for ( int i = 0, N = DynamicLoader::allPaths().size(); i < N; ++i ) paths += DynamicLoader::allPaths()[i] + "\n"; return paths; } if ( verb == "prependpath" ) { string path = StringUtils::car(command); if ( !path.empty() ) DynamicLoader::prependPath(path); return ""; } if ( verb == "create" ) { string className = StringUtils::car(command); command = StringUtils::cdr(command); string name = StringUtils::car(command); const ClassDescriptionBase * db = DescriptionList::find(className); command = StringUtils::cdr(command); while ( !db && command.length() ) { string library = StringUtils::car(command); command = StringUtils::cdr(command); DynamicLoader::load(library); db = DescriptionList::find(className); } if ( !db ) { string msg = "Error: " + className + ": No such class found."; if ( !DynamicLoader::lastErrorMessage.empty() ) msg += "\nerror message from dynamic loader:\n" + DynamicLoader::lastErrorMessage; return msg; } IBPtr obj = dynamic_ptr_cast(db->create()); if ( !obj ) return "Error: Could not create object of class "+className; if ( name.empty() ) return "Error: No name specified."; Register(obj, name); return ""; } if ( verb == "setup" ) { string name = StringUtils::car(command); DirectoryAppend(name); IBPtr obj = GetPointer(name); if ( !obj ) return "Error: Could not find object named " + name; istringstream is(StringUtils::cdr(command)); readSetup(obj, is); return ""; } if ( verb == "rm" ) { ObjectSet rmset; while ( !command.empty() ) { string name = StringUtils::car(command); DirectoryAppend(name); IBPtr obj = GetPointer(name); if ( !obj ) return "Error: Could not find object named " + name; rmset.insert(obj); command = StringUtils::cdr(command); } return remove(rmset); } if ( verb == "rmdir" || verb == "rrmdir" ) { string dir = StringUtils::car(command); DirectoryAppend(dir); if ( dir[dir.size() - 1] != '/' ) dir += '/'; if ( !member(directories(), dir) ) return verb == "rmdir"? "Error: No such directory.": ""; IVector ov = SearchDirectory(dir); if ( ov.size() && verb == "rmdir" ) return "Error: Cannot remove a non-empty directory. " "(Use rrmdir do remove all object and subdirectories.)"; ObjectSet rmset(ov.begin(), ov.end()); string ret = remove(rmset); if ( !ret.empty() ) return ret; StringVector dirs(directories().begin(), directories().end()); for ( int i = 0, N = dirs.size(); i < N; ++ i ) if ( dirs[i].substr(0, dir.size()) == dir ) directories().erase(dirs[i]); for ( int i = 0, N = directoryStack().size(); i < N; ++i ) if ( directoryStack()[i].substr(0, dir.size()) == dir ) directoryStack()[i] = '/'; return ""; } if ( verb == "rcp" ) { string name = StringUtils::car(command); DirectoryAppend(name); string newName = StringUtils::car(StringUtils::cdr(command)); if ( newName.empty() ) return "Error: No destination directory specified."; DirectoryAppend(newName); CreateDirectory(newName); if ( newName[newName.size() - 1] != '/' ) newName += '/'; IBPtr obj = GetPointer(name); if ( name[name.size() - 1] != '/' ) name += '/'; IVector ov = SearchDirectory(name); ov.push_back(obj); if ( ov.empty() ) return "Error: No such object or directory."; ObjectSet toclone; for ( IVector::iterator i = ov.begin(); i != ov.end(); ++i ) { toclone.insert(*i); addReferences(*i, toclone); } for ( ObjectSet::iterator i = toclone.begin(); i != toclone.end(); ++i ) Register((**i).clone(), newName + (**i).name()); return ""; } if ( verb == "doxygendump" ) { string spacename = StringUtils::car(command); command = StringUtils::cdr(command); string filename = StringUtils::car(command); ofstream os(filename.c_str()); for ( TypeDocumentationMap::const_iterator it = documentations().begin(); it != documentations().end(); ++it ) { const ClassDescriptionBase & db = *(it->first); string classname = db.name(); if ( classname.substr(0, spacename.length()) != spacename ) continue; string briefname = classname.substr(spacename.length()); os << "/** \\page " << briefname << "Interfaces " << "Interfaces defined for the " << classname << " class.\n\n" << "\\par Brief class description:\n"; string doc = it->second->documentation(); if ( doc.substr(0,25) == "There is no documentation" ) os << "See " << classname << "\n\n"; else os << doc << "
See also " << classname << "\n\n"; TypeInterfaceMap::const_iterator isit = interfaces().find(it->first); if ( isit == interfaces().end() || isit->second.empty() ) { os << "There are no interfaces declared for this class.\n\n"; } else { const InterfaceSet & ints = isit->second; for ( InterfaceSet::const_iterator iit = ints.begin(); iit != ints.end(); ++iit ) (**iit).doxygenDescription(os); } string baserefs = ""; int nbases = 0; for ( int ib = 0, N = db.descriptions().size(); ib < N; ++ib ) { if ( documentations().find(db.descriptions()[ib]) == documentations().end() ) continue; const ClassDescriptionBase & bdb = *db.descriptions()[ib]; if ( nbases ) baserefs += " and "; string briefname = bdb.name().substr(bdb.name().rfind("::") + 2); baserefs += "\\ref " + briefname + "Interfaces \"" + bdb.name() + "\""; ++nbases; } if ( nbases == 1 ) os << "
There may be interfaces inherited from the " << baserefs << " class."; else if ( nbases > 1 ) os << "
There may be interfaces inherited from the " << "following classes: " << baserefs << "."; os << "\n\n*/\n\n"; } return ""; } if ( verb == "mset" || verb == "msetdef" || verb == "minsert" || verb == "mdo" || verb == "mget" || verb == "mdef" || verb == "mmin" || verb == "mmax" || verb == "merase" || verb == "msend" ) { if ( verb == "msend" ) verb = "mdo"; string dir = StringUtils::car(command); command = StringUtils::cdr(command); string className = StringUtils::car(command); command = StringUtils::cdr(command); string interface = StringUtils::car(command); string arguments = StringUtils::cdr(command); string::size_type bra = interface.find('['); if ( bra != string::npos ) { string::size_type ket = interface.find(']'); arguments = interface.substr(bra + 1,ket - bra - 1) + " " + arguments; interface = interface.substr(0, bra); } IVector ov = SearchDirectory(dir, className); if ( ov.empty() ) return "Error: no matching objects found."; string ret; verb = verb.substr(1); for ( IVector::size_type i = 0; i < ov.size(); ++i ) { const InterfaceBase * ifb = FindInterface(ov[i], interface); if ( !ifb ) continue; string mess = ifb->exec(*ov[i], verb, arguments); if ( !mess.empty() ) ret += ov[i]->fullName() + ": " + mess + "\n"; } return ret.substr(0, ret.size() - 1); } if ( verb == "set" || verb == "setdef" || verb == "insert" || verb == "do" || verb == "get" || verb == "def" || verb == "min" || verb == "max" || verb == "describe" || verb == "fulldescribe" || verb == "erase" || verb == "send" || verb == "newdef" ) { if ( verb == "send" ) verb = "do"; if ( verb == "newdef" && !InterfaceBase::NoReadOnly ) return "Error: The default value of an interface is a read-only " "entity. Use the command 'DISABLEREADONLY' to override."; string noun = StringUtils::car(command); string arguments = getPosArgFromNoun(noun) + " " + StringUtils::cdr(command); IBPtr ip = getObjectFromNoun(noun); const InterfaceBase * ifb = FindInterface(ip, getInterfaceFromNoun(noun)); if ( !ifb && verb != "describe" && verb != "fulldescribe" ) { string ret = "Error: The interface '" + noun + "' was not found.\n"; ret += "Valid interfaces:\n"; InterfaceMap imap = getInterfaces(typeid(*ip)); for ( InterfaceMap::iterator it = imap.begin(); it != imap.end(); ++it ) ret += "* " + it->second->name() + "\n"; return ret; } if ( verb == "describe" ) { if ( ifb ) return ifb->description(); const ClassDescriptionBase * cd = DescriptionList::find(typeid(*ip)); string ret = "Object '" + ip->name() + "' of class '" + cd->name() + "':\n"; TypeDocumentationMap::const_iterator cdoc = documentations().find(cd); if ( cdoc != documentations().end() ) ret += cdoc->second->documentation() + "\n"; ret +="Interfaces:\n"; InterfaceMap imap = getInterfaces(typeid(*ip)); for ( InterfaceMap::iterator it = imap.begin(); it != imap.end(); ++it ) ret += "* " + it->second->name() + "\n"; return ret; } else if ( verb == "fulldescribe" ) { if ( ifb ) return ifb->fullDescription(*ip); ostringstream ret; const ClassDescriptionBase * cd = DescriptionList::find(typeid(*ip)); TypeDocumentationMap::const_iterator cdoc = documentations().find(cd); ret << ip->fullName() << endl << cd->name() << endl; if ( cdoc != documentations().end() ) ret << cdoc->second->documentation() << endl; ret << "Interfaces:" << endl; InterfaceMap imap = getInterfaces(typeid(*ip)); typedef set InterfaceSet; InterfaceSet iset; for ( InterfaceMap::iterator it = imap.begin(); it != imap.end(); ++it ) iset.insert(it->second); double rank = 1.0; for ( InterfaceSet::iterator it = iset.begin(); it != iset.end(); ++it ) { if ( rank >= 0.0 && (**it).rank() < 0.0 ) ret << "0" << endl; rank = (**it).rank(); ret << (**it).type() << " " << (**it).name() << endl; } return ret.str(); } else return ifb->exec(*ip, verb, arguments); } if ( verb == "baseclasses" ) { string className = StringUtils::car(command); const ClassDescriptionBase * cdb = 0; if ( className.size() ) { cdb = DescriptionList::find(className); if ( !cdb ) return "Error: no class '" + className + "' found."; } return GetInterfacedBaseClasses(cdb); } if ( verb == "describeclass" ) { string className = StringUtils::car(command); const ClassDescriptionBase * cdb = 0; if ( className.size() ) { cdb = DescriptionList::find(className); if ( !cdb ) return "Error: no class '" + className + "' found."; } TypeDocumentationMap::const_iterator cdoc = documentations().find(cdb); if ( cdoc != documentations().end() ) return cdoc->second->documentation() + "\n"; else return ""; } if ( verb == "lsclass" ) { string className = StringUtils::car(command); const ClassDescriptionBase * cdb = 0; if ( className.size() ) { cdb = DescriptionList::find(className); if ( !cdb ) return "Error: no class '" + className + "' found."; } vector classes; if ( cdb && !cdb->abstract() ) classes.push_back(cdb); for ( DescriptionList::DescriptionMap::const_iterator it = DescriptionList::all().begin(); it != DescriptionList::all().end(); ++it ) { if ( it->second == cdb || it->second->abstract() ) continue; if ( cdb && !it->second->isA(*cdb) ) continue; classes.push_back(it->second); } if ( classes.empty() ) return "Error: no classes found."; string ret; for ( int i = 0, N = classes.size(); i < N; ++i ) ret += classes[i]->name() + "\n"; return ret; } } catch (const Exception & e) { e.handle(); return "Error: " + e.message(); } return "Error: Unrecognized command '" + verb + "'."; } BadClassClone::BadClassClone(const InterfacedBase & o) { theMessage << "Could not clone the object '" << o.name() << "' of class '" << TypeInfo::name(o) << "' because the class does not" << " implement a working 'clone' method."; severity(abortnow); } BadClone::BadClone(const InterfacedBase & o) { theMessage << "Could not clone the object '" << o.name() << "' of class '" << TypeInfo::name(o) << "' because the clone method threw an unknown exception."; severity(abortnow); } RepoNameException::RepoNameException(string name) { theMessage << "The object '" << name << "' is present in the Repository but " << "under a different name. This means that the name of the " << "object has been illegally changed outside of the Repository."; severity(abortnow); } RepositoryNoDirectory::RepositoryNoDirectory(string name) { theMessage << "The directory '" << name << "' does not exist."; severity(warning); } RepositoryNotFound::RepositoryNotFound(string name) { theMessage << "There was no object named '" << name << "' in the repository."; severity(warning); } RepositoryClassMisMatch:: RepositoryClassMisMatch(const InterfacedBase & o, string name) { theMessage << "The requested object '" << o.fullName() << "' was not of the " << "specified type (" << name << ")."; severity(warning); } thepeg-1.8.0.orig/Doc/0000755000175000017500000000000011756460367012653 5ustar sunsunthepeg-1.8.0.orig/Doc/refman.conf.in0000644000175000017500000020017211747772425015402 0ustar sunsun# Doxyfile 1.6.3 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project # # All text after a hash (#) is considered a comment and will be ignored # The format is: # TAG = value [value, ...] # For lists items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (" ") #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file # that follow. The default is UTF-8 which is also the encoding used for all # text before the first occurrence of this tag. Doxygen uses libiconv (or the # iconv built into libc) for the transcoding. See # http://www.gnu.org/software/libiconv for the list of possible encodings. DOXYFILE_ENCODING = UTF-8 # The PROJECT_NAME tag is a single word (or a sequence of words surrounded # by quotes) that should identify the project. PROJECT_NAME = ThePEG # The PROJECT_NUMBER tag can be used to enter a project or revision number. # This could be handy for archiving the generated documentation or # if some version control system is used. PROJECT_NUMBER = @VERSION@ # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) # base path where the generated documentation will be put. # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. OUTPUT_DIRECTORY = # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output # format and will distribute the generated files over these directories. # Enabling this option can be useful when feeding doxygen a huge amount of # source files, where putting all generated files in the same directory would # otherwise cause performance problems for the file system. CREATE_SUBDIRS = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. # The default language is English, other supported languages are: # Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, # Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, # Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English # messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, # Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, # Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. OUTPUT_LANGUAGE = English # If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will # include brief member descriptions after the members that are listed in # the file and class documentation (similar to JavaDoc). # Set to NO to disable this. BRIEF_MEMBER_DESC = YES # If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend # the brief description of a member or function before the detailed description. # Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. REPEAT_BRIEF = YES # This tag implements a quasi-intelligent brief description abbreviator # that is used to form the text in various listings. Each string # in this list, if found as the leading text of the brief description, will be # stripped from the text and the result after processing the whole list, is # used as the annotated text. Otherwise, the brief description is used as-is. # If left blank, the following values are used ("$name" is automatically # replaced with the name of the entity): "The $name class" "The $name widget" # "The $name file" "is" "provides" "specifies" "contains" # "represents" "a" "an" "the" ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then # Doxygen will generate a detailed section even if there is only a brief # description. ALWAYS_DETAILED_SEC = NO # If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO # If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user-defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. The tag can be used to show relative paths in the file list. # If left blank the directory from which doxygen is run is used as the # path to strip. STRIP_FROM_PATH = # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells # the reader which header file to include in order to use a class. # If left blank only the name of the header file containing the class # definition is used. Otherwise one should specify the include paths that # are normally passed to the compiler using the -I flag. STRIP_FROM_INC_PATH = # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter # (but less readable) file names. This can be useful is your file systems # doesn't support long names like on DOS, Mac, or CD-ROM. SHORT_NAMES = NO # If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen # will interpret the first line (until the first dot) of a JavaDoc-style # comment as the brief description. If set to NO, the JavaDoc # comments will behave just like regular Qt-style comments # (thus requiring an explicit @brief command for a brief description.) JAVADOC_AUTOBRIEF = YES # If the QT_AUTOBRIEF tag is set to YES then Doxygen will # interpret the first line (until the first dot) of a Qt-style # comment as the brief description. If set to NO, the comments # will behave just like regular Qt-style comments (thus requiring # an explicit \brief command for a brief description.) QT_AUTOBRIEF = NO # The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen # treat a multi-line C++ special comment block (i.e. a block of //! or /// # comments) as a brief description. This used to be the default behaviour. # The new default is to treat a multi-line C++ comment block as a detailed # description. Set this tag to YES if you prefer the old behaviour instead. MULTILINE_CPP_IS_BRIEF = NO # If the INHERIT_DOCS tag is set to YES (the default) then an undocumented # member inherits the documentation from any documented member that it # re-implements. INHERIT_DOCS = YES # If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce # a new page for each member. If set to NO, the documentation of a member will # be part of the file/class/namespace that contains it. SEPARATE_MEMBER_PAGES = NO # The TAB_SIZE tag can be used to set the number of spaces in a tab. # Doxygen uses this value to replace tabs by spaces in code fragments. TAB_SIZE = 8 # This tag can be used to specify a number of aliases that acts # as commands in the documentation. An alias has the form "name=value". # For example adding "sideeffect=\par Side Effects:\n" will allow you to # put the command \sideeffect (or @sideeffect) in the documentation, which # will result in a user-defined paragraph with heading "Side Effects:". # You can put \n's in the value part of an alias to insert newlines. ALIASES = # Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C # sources only. Doxygen will then generate output that is more tailored for C. # For instance, some of the names that are used will be different. The list # of all members will be omitted, etc. OPTIMIZE_OUTPUT_FOR_C = NO # Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java # sources only. Doxygen will then generate output that is more tailored for # Java. For instance, namespaces will be presented as packages, qualified # scopes will look different, etc. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran # sources only. Doxygen will then generate output that is more tailored for # Fortran. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL # sources. Doxygen will then generate output that is tailored for # VHDL. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it parses. # With this tag you can assign which parser to use for a given extension. # Doxygen has a built-in mapping, but you can override or extend it using this tag. # The format is ext=language, where ext is a file extension, and language is one of # the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, # Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat # .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), # use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. EXTENSION_MAPPING = # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want # to include (a tag file for) the STL sources as input, then you should # set this tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); v.s. # func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. BUILTIN_STL_SUPPORT = YES # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. # Doxygen will parse them like normal C++ but will assume all classes use public # instead of private inheritance when no explicit protection keyword is present. SIP_SUPPORT = NO # For Microsoft's IDL there are propget and propput attributes to indicate getter # and setter methods for a property. Setting this option to YES (the default) # will make doxygen to replace the get and set methods by a property in the # documentation. This will only work if the methods are indeed getting or # setting a simple type. If this is not the case, or you want to show the # methods anyway, you should set this option to NO. IDL_PROPERTY_SUPPORT = YES # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. DISTRIBUTE_GROUP_DOC = NO # Set the SUBGROUPING tag to YES (the default) to allow class member groups of # the same type (for instance a group of public functions) to be put as a # subgroup of that type (e.g. under the Public Functions section). Set it to # NO to prevent subgrouping. Alternatively, this can be done per class using # the \nosubgrouping command. SUBGROUPING = YES # When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum # is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, # namespace, or class. And the struct will be named TypeS. This can typically # be useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. TYPEDEF_HIDES_STRUCT = NO # The SYMBOL_CACHE_SIZE determines the size of the internal cache use to # determine which symbols to keep in memory and which to flush to disk. # When the cache is full, less often used symbols will be written to disk. # For small to medium size projects (<1000 input files) the default value is # probably good enough. For larger projects a too small cache size can cause # doxygen to be busy swapping symbols to and from disk most of the time # causing a significant performance penality. # If the system has enough physical memory increasing the cache will improve the # performance by keeping more symbols in memory. Note that the value works on # a logarithmic scale so increasing the size by one will rougly double the # memory usage. The cache size is given by this formula: # 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, # corresponding to a cache size of 2^16 = 65536 symbols SYMBOL_CACHE_SIZE = 8 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in # documentation are documented, even if no documentation was available. # Private class members and static file members will be hidden unless # the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES all private members of a class # will be included in the documentation. EXTRACT_PRIVATE = YES # If the EXTRACT_STATIC tag is set to YES all static members of a file # will be included in the documentation. EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) # defined locally in source files will be included in the documentation. # If set to NO only classes defined in header files are included. EXTRACT_LOCAL_CLASSES = YES # This flag is only useful for Objective-C code. When set to YES local # methods, which are defined in the implementation section but not in # the interface are included in the documentation. # If set to NO (the default) only methods in the interface are included. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called # 'anonymous_namespace{file}', where file will be replaced with the base # name of the file that contains the anonymous namespace. By default # anonymous namespace are hidden. EXTRACT_ANON_NSPACES = NO # If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all # undocumented members of documented classes, files or namespaces. # If set to NO (the default) these members will be included in the # various overviews, but no documentation section is generated. # This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_MEMBERS = NO # If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. # If set to NO (the default) these classes will be included in the various # overviews. This option has no effect if EXTRACT_ALL is enabled. HIDE_UNDOC_CLASSES = NO # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all # friend (class|struct|union) declarations. # If set to NO (the default) these declarations will be included in the # documentation. HIDE_FRIEND_COMPOUNDS = NO # If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any # documentation blocks found inside the body of a function. # If set to NO (the default) these blocks will be appended to the # function's detailed documentation block. HIDE_IN_BODY_DOCS = NO # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set # to NO (the default) then the documentation will be excluded. # Set it to YES to include the internal documentation. INTERNAL_DOCS = NO # If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate # file names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. CASE_SENSE_NAMES = YES # If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen # will show members with their full class and namespace scopes in the # documentation. If set to YES the scope will be hidden. HIDE_SCOPE_NAMES = NO # If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen # will put a list of the files that are included by a file in the documentation # of that file. SHOW_INCLUDE_FILES = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen # will list include files with double quotes in the documentation # rather than with sharp brackets. FORCE_LOCAL_INCLUDES = NO # If the INLINE_INFO tag is set to YES (the default) then a tag [inline] # is inserted in the documentation for inline members. INLINE_INFO = YES # If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen # will sort the (detailed) documentation of file and class members # alphabetically by member name. If set to NO the members will appear in # declaration order. SORT_MEMBER_DOCS = YES # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the # brief documentation of file, namespace and class members alphabetically # by member name. If set to NO (the default) the members will appear in # declaration order. SORT_BRIEF_DOCS = NO # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will # sort the (brief and detailed) documentation of class members so that # constructors and destructors are listed first. If set to NO (the # default) the constructors will appear in the respective orders # defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be # ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored # for detailed docs if SORT_MEMBER_DOCS is set to NO. SORT_MEMBERS_CTORS_1ST = NO # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the # hierarchy of group names into alphabetical order. If set to NO (the default) # the group names will appear in their defined order. SORT_GROUP_NAMES = NO # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be # sorted by fully-qualified names, including namespaces. If set to # NO (the default), the class list will be sorted only by class name, # not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. # Note: This option applies only to the class list, not to the # alphabetical list. SORT_BY_SCOPE_NAME = NO # The GENERATE_TODOLIST tag can be used to enable (YES) or # disable (NO) the todo list. This list is created by putting \todo # commands in the documentation. GENERATE_TODOLIST = YES # The GENERATE_TESTLIST tag can be used to enable (YES) or # disable (NO) the test list. This list is created by putting \test # commands in the documentation. GENERATE_TESTLIST = YES # The GENERATE_BUGLIST tag can be used to enable (YES) or # disable (NO) the bug list. This list is created by putting \bug # commands in the documentation. GENERATE_BUGLIST = YES # The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or # disable (NO) the deprecated list. This list is created by putting # \deprecated commands in the documentation. GENERATE_DEPRECATEDLIST= YES # The ENABLED_SECTIONS tag can be used to enable conditional # documentation sections, marked by \if sectionname ... \endif. ENABLED_SECTIONS = # The MAX_INITIALIZER_LINES tag determines the maximum number of lines # the initial value of a variable or define consists of for it to appear in # the documentation. If the initializer consists of more lines than specified # here it will be hidden. Use a value of 0 to hide initializers completely. # The appearance of the initializer of individual variables and defines in the # documentation can be controlled using \showinitializer or \hideinitializer # command in the documentation regardless of this setting. MAX_INITIALIZER_LINES = 30 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated # at the bottom of the documentation of classes and structs. If set to YES the # list will mention the files that were used to generate the documentation. SHOW_USED_FILES = YES # If the sources in your project are distributed over multiple directories # then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy # in the documentation. The default is NO. SHOW_DIRECTORIES = YES # Set the SHOW_FILES tag to NO to disable the generation of the Files page. # This will remove the Files entry from the Quick Index and from the # Folder Tree View (if specified). The default is YES. SHOW_FILES = YES # Set the SHOW_NAMESPACES tag to NO to disable the generation of the # Namespaces page. # This will remove the Namespaces entry from the Quick Index # and from the Folder Tree View (if specified). The default is YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via # popen()) the command , where is the value of # the FILE_VERSION_FILTER tag, and is the name of an input file # provided by doxygen. Whatever the program writes to standard output # is used as the file version. See the manual for examples. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by # doxygen. The layout file controls the global structure of the generated output files # in an output format independent way. The create the layout file that represents # doxygen's defaults, run doxygen with the -l option. You can optionally specify a # file name after the option, if omitted DoxygenLayout.xml will be used as the name # of the layout file. LAYOUT_FILE = #--------------------------------------------------------------------------- # configuration options related to warning and progress messages #--------------------------------------------------------------------------- # The QUIET tag can be used to turn on/off the messages that are generated # by doxygen. Possible values are YES and NO. If left blank NO is used. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are # generated by doxygen. Possible values are YES and NO. If left blank # NO is used. WARNINGS = YES # If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings # for undocumented members. If EXTRACT_ALL is set to YES then this flag will # automatically be disabled. WARN_IF_UNDOCUMENTED = YES # If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for # potential errors in the documentation, such as not documenting some # parameters in a documented function, or documenting parameters that # don't exist or using markup commands wrongly. WARN_IF_DOC_ERROR = YES # This WARN_NO_PARAMDOC option can be abled to get warnings for # functions that are documented, but have no documentation for their parameters # or return value. If set to NO (the default) doxygen will only warn about # wrong or incomplete parameter documentation, but not about the absence of # documentation. WARN_NO_PARAMDOC = YES # The WARN_FORMAT tag determines the format of the warning messages that # doxygen can produce. The string should contain the $file, $line, and $text # tags, which will be replaced by the file and line number from which the # warning originated and the warning text. Optionally the format may contain # $version, which will be replaced by the version of the file (if it could # be obtained via FILE_VERSION_FILTER) WARN_FORMAT = "$file:$line: $text" # The WARN_LOGFILE tag can be used to specify a file to which warning # and error messages should be written. If left blank the output is written # to stderr. WARN_LOGFILE = "doxywarnings.log" #--------------------------------------------------------------------------- # configuration options related to the input files #--------------------------------------------------------------------------- # The INPUT tag can be used to specify the files and/or directories that contain # documented source files. You may enter file names like "myfile.cpp" or # directories like "/usr/src/myproject". Separate the files or directories # with spaces. INPUT = @top_builddir@ @top_srcdir@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is # also the default input encoding. Doxygen uses libiconv (or the iconv built # into libc) for the transcoding. See http://www.gnu.org/software/libiconv for # the list of possible encodings. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank the following patterns are tested: # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 FILE_PATTERNS = *.h \ *.fh \ *.xh # The RECURSIVE tag can be used to turn specify whether or not subdirectories # should be searched for input files as well. Possible values are YES and NO. # If left blank NO is used. RECURSIVE = YES # The EXCLUDE tag can be used to specify files and/or directories that should # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. EXCLUDE = @top_builddir@/include # The EXCLUDE_SYMLINKS tag can be used select whether or not files or # directories that are symbolic links (a Unix filesystem feature) are excluded # from the input. EXCLUDE_SYMLINKS = YES # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude # certain files from those directories. Note that the wildcards are matched # against the file with absolute path, so to exclude all test directories # for example use the pattern */test/* EXCLUDE_PATTERNS = */.hg/* */.svn/* # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names # (namespaces, classes, functions, etc.) that should be excluded from the # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or # directories that contain example code fragments that are included (see # the \include command). EXAMPLE_PATH = # If the value of the EXAMPLE_PATH tag contains directories, you can use the # EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp # and *.h) to filter out the source-files in the directories. If left # blank all files are included. EXAMPLE_PATTERNS = # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude # commands irrespective of the value of the RECURSIVE tag. # Possible values are YES and NO. If left blank NO is used. EXAMPLE_RECURSIVE = NO # The IMAGE_PATH tag can be used to specify one or more files or # directories that contain image that are included in the documentation (see # the \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program # by executing (via popen()) the command , where # is the value of the INPUT_FILTER tag, and is the name of an # input file. Doxygen will then use the output that the filter program writes # to standard output. # If FILTER_PATTERNS is specified, this tag will be # ignored. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern # basis. # Doxygen will compare the file name with each pattern and apply the # filter if there is a match. # The filters are a list of the form: # pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further # info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER # is applied to all files. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using # INPUT_FILTER) will be used to filter the input files when producing source # files to browse (i.e. when SOURCE_BROWSER is set to YES). FILTER_SOURCE_FILES = NO #--------------------------------------------------------------------------- # configuration options related to source browsing #--------------------------------------------------------------------------- # If the SOURCE_BROWSER tag is set to YES then a list of source files will # be generated. Documented entities will be cross-referenced with these sources. # Note: To get rid of all source code in the generated output, make sure also # VERBATIM_HEADERS is set to NO. SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body # of functions and classes directly in the documentation. INLINE_SOURCES = NO # Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct # doxygen to hide any special comment blocks from generated source code # fragments. Normal C and C++ comments will always remain visible. STRIP_CODE_COMMENTS = YES # If the REFERENCED_BY_RELATION tag is set to YES # then for each documented function all documented # functions referencing it will be listed. REFERENCED_BY_RELATION = YES # If the REFERENCES_RELATION tag is set to YES # then for each documented function all documented entities # called/used by that function will be listed. REFERENCES_RELATION = YES # If the REFERENCES_LINK_SOURCE tag is set to YES (the default) # and SOURCE_BROWSER tag is set to YES, then the hyperlinks from # functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will # link to the source code. # Otherwise they will link to the documentation. REFERENCES_LINK_SOURCE = YES # If the USE_HTAGS tag is set to YES then the references to source code # will point to the HTML generated by the htags(1) tool instead of doxygen # built-in source browser. The htags tool is part of GNU's global source # tagging system (see http://www.gnu.org/software/global/global.html). You # will need version 4.8.6 or higher. USE_HTAGS = NO # If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen # will generate a verbatim copy of the header file for each class for # which an include is specified. Set to NO to disable this. VERBATIM_HEADERS = YES #--------------------------------------------------------------------------- # configuration options related to the alphabetical class index #--------------------------------------------------------------------------- # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index # of all compounds will be generated. Enable this if the project # contains a lot of classes, structs, unions or interfaces. ALPHABETICAL_INDEX = YES # If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then # the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns # in which this list will be split (can be a number in the range [1..20]) COLS_IN_ALPHA_INDEX = 5 # In case all classes in a project start with a common prefix, all # classes will be put under the same header in the alphabetical index. # The IGNORE_PREFIX tag can be used to specify one or more prefixes that # should be ignored while generating the index headers. IGNORE_PREFIX = #--------------------------------------------------------------------------- # configuration options related to the HTML output #--------------------------------------------------------------------------- # If the GENERATE_HTML tag is set to YES (the default) Doxygen will # generate HTML output. GENERATE_HTML = YES # The HTML_OUTPUT tag is used to specify where the HTML docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `html' will be used as the default path. HTML_OUTPUT = refman-html # The HTML_FILE_EXTENSION tag can be used to specify the file extension for # each generated HTML page (for example: .htm,.php,.asp). If it is left blank # doxygen will generate files with .html extension. HTML_FILE_EXTENSION = .html # The HTML_HEADER tag can be used to specify a personal HTML header for # each generated HTML page. If it is left blank doxygen will generate a # standard header. HTML_HEADER = # The HTML_FOOTER tag can be used to specify a personal HTML footer for # each generated HTML page. If it is left blank doxygen will generate a # standard footer. HTML_FOOTER = # The HTML_STYLESHEET tag can be used to specify a user-defined cascading # style sheet that is used by each HTML page. It can be used to # fine-tune the look of the HTML output. If the tag is left blank doxygen # will generate a default style sheet. Note that doxygen will try to copy # the style sheet file to the HTML output directory, so don't put your own # stylesheet in the HTML output directory as well, or it will be erased! HTML_STYLESHEET = # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML # page will contain the date and time when the page was generated. Setting # this to NO can help when comparing the output of multiple runs. HTML_TIMESTAMP = YES # If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, # files or namespaces will be aligned in HTML using tables. If set to # NO a bullet list will be used. HTML_ALIGN_MEMBERS = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the # page has loaded. For this to work a browser that supports # JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox # Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). HTML_DYNAMIC_SECTIONS = NO # If the GENERATE_DOCSET tag is set to YES, additional index files # will be generated that can be used as input for Apple's Xcode 3 # integrated development environment, introduced with OSX 10.5 (Leopard). # To create a documentation set, doxygen will generate a Makefile in the # HTML output directory. Running make will produce the docset in that # directory and running "make install" will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find # it at startup. # See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. GENERATE_DOCSET = NO # When GENERATE_DOCSET tag is set to YES, this tag determines the name of the # feed. A documentation feed provides an umbrella under which multiple # documentation sets from a single provider (such as a company or product suite) # can be grouped. DOCSET_FEEDNAME = "Doxygen generated docs" # When GENERATE_DOCSET tag is set to YES, this tag specifies a string that # should uniquely identify the documentation set bundle. This should be a # reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen # will append .docset to the name. DOCSET_BUNDLE_ID = org.doxygen.Project # If the GENERATE_HTMLHELP tag is set to YES, additional index files # will be generated that can be used as input for tools like the # Microsoft HTML help workshop to generate a compiled HTML help file (.chm) # of the generated HTML documentation. GENERATE_HTMLHELP = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can # be used to specify the file name of the resulting .chm file. You # can add a path in front of the file if the result should not be # written to the html output directory. CHM_FILE = # If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can # be used to specify the location (absolute path including file name) of # the HTML help compiler (hhc.exe). If non-empty doxygen will try to run # the HTML help compiler on the generated index.hhp. HHC_LOCATION = # If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag # controls if a separate .chi index file is generated (YES) or that # it should be included in the master .chm file (NO). GENERATE_CHI = NO # If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING # is used to encode HtmlHelp index (hhk), content (hhc) and project file # content. CHM_INDEX_ENCODING = # If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag # controls whether a binary table of contents is generated (YES) or a # normal table of contents (NO) in the .chm file. BINARY_TOC = NO # The TOC_EXPAND flag can be set to YES to add extra items for group members # to the contents of the HTML help documentation and to the tree view. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER # are set, an additional index file will be generated that can be used as input for # Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated # HTML documentation. GENERATE_QHP = NO # If the QHG_LOCATION tag is specified, the QCH_FILE tag can # be used to specify the file name of the resulting .qch file. # The path specified is relative to the HTML output folder. QCH_FILE = # The QHP_NAMESPACE tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#namespace QHP_NAMESPACE = org.doxygen.Project # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating # Qt Help Project output. For more information please see # http://doc.trolltech.com/qthelpproject.html#virtual-folders QHP_VIRTUAL_FOLDER = doc # If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. # For more information please see # http://doc.trolltech.com/qthelpproject.html#custom-filters QHP_CUST_FILTER_NAME = # The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see # Qt Help Project / Custom Filters. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's # filter section matches. # Qt Help Project / Filter Attributes. QHP_SECT_FILTER_ATTRS = # If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can # be used to specify the location of Qt's qhelpgenerator. # If non-empty doxygen will try to run qhelpgenerator on the generated # .qhp file. QHG_LOCATION = # If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files # will be generated, which together with the HTML files, form an Eclipse help # plugin. To install this plugin and make it available under the help contents # menu in Eclipse, the contents of the directory containing the HTML and XML # files needs to be copied into the plugins directory of eclipse. The name of # the directory within the plugins directory should be the same as # the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. GENERATE_ECLIPSEHELP = NO # A unique identifier for the eclipse help plugin. When installing the plugin # the directory name containing the HTML and XML files should also have # this name. ECLIPSE_DOC_ID = org.doxygen.Project # The DISABLE_INDEX tag can be used to turn on/off the condensed index at # top of each HTML page. The value NO (the default) enables the index and # the value YES disables it. DISABLE_INDEX = NO # This tag can be used to set the number of enum values (range [1..20]) # that doxygen will group on one line in the generated HTML documentation. ENUM_VALUES_PER_LINE = 4 # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index # structure should be generated to display hierarchical information. # If the tag value is set to YES, a side panel will be generated # containing a tree-like index structure (just like the one that # is generated for HTML Help). For this to work a browser that supports # JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). # Windows users are probably better off using the HTML help feature. GENERATE_TREEVIEW = NO # By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, # and Class Hierarchy pages using a tree view instead of an ordered list. USE_INLINE_TREES = NO # If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be # used to set the initial width (in pixels) of the frame in which the tree # is shown. TREEVIEW_WIDTH = 250 # Use this tag to change the font size of Latex formulas included # as images in the HTML documentation. The default is 10. Note that # when you change the font size after a successful doxygen run you need # to manually remove any form_*.png images from the HTML output directory # to force them to be regenerated. FORMULA_FONTSIZE = 10 # When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript # and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should # typically be disabled. For large projects the javascript based search engine # can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. SEARCHENGINE = NO # When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index # file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup # and does not have live searching capabilities. SERVER_BASED_SEARCH = NO #--------------------------------------------------------------------------- # configuration options related to the LaTeX output #--------------------------------------------------------------------------- # If the GENERATE_LATEX tag is set to YES (the default) Doxygen will # generate Latex output. GENERATE_LATEX = NO # The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `latex' will be used as the default path. LATEX_OUTPUT = refman-latex # The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be # invoked. If left blank `latex' will be used as the default command name. # Note that when enabling USE_PDFLATEX this option is only used for # generating bitmaps for formulas in the HTML output, but not in the # Makefile that is written to the output directory. LATEX_CMD_NAME = latex # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to # generate index for LaTeX. If left blank `makeindex' will be used as the # default command name. MAKEINDEX_CMD_NAME = makeindex # If the COMPACT_LATEX tag is set to YES Doxygen generates more compact # LaTeX documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_LATEX = YES # The PAPER_TYPE tag can be used to set the paper type that is used # by the printer. Possible values are: a4, a4wide, letter, legal and # executive. If left blank a4wide will be used. PAPER_TYPE = a4wide # The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX # packages that should be included in the LaTeX output. EXTRA_PACKAGES = # The LATEX_HEADER tag can be used to specify a personal LaTeX header for # the generated latex document. The header should contain everything until # the first chapter. If it is left blank doxygen will generate a # standard header. Notice: only use this tag if you know what you are doing! LATEX_HEADER = # If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated # is prepared for conversion to pdf (using ps2pdf). The pdf file will # contain links (just like the HTML output) instead of page references # This makes the output suitable for online browsing using a pdf viewer. PDF_HYPERLINKS = YES # If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of # plain latex in the generated Makefile. Set this option to YES to get a # higher quality PDF documentation. USE_PDFLATEX = YES # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. # command to the generated LaTeX files. This will instruct LaTeX to keep # running if errors occur, instead of asking the user for help. # This option is also used when generating formulas in HTML. LATEX_BATCHMODE = NO # If LATEX_HIDE_INDICES is set to YES then doxygen will not # include the index chapters (such as File Index, Compound Index, etc.) # in the output. LATEX_HIDE_INDICES = NO # If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER. LATEX_SOURCE_CODE = NO #--------------------------------------------------------------------------- # configuration options related to the RTF output #--------------------------------------------------------------------------- # If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output # The RTF output is optimized for Word 97 and may not look very pretty with # other RTF readers or editors. GENERATE_RTF = NO # The RTF_OUTPUT tag is used to specify where the RTF docs will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `rtf' will be used as the default path. RTF_OUTPUT = rtf # If the COMPACT_RTF tag is set to YES Doxygen generates more compact # RTF documents. This may be useful for small projects and may help to # save some trees in general. COMPACT_RTF = NO # If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated # will contain hyperlink fields. The RTF file will # contain links (just like the HTML output) instead of page references. # This makes the output suitable for online browsing using WORD or other # programs which support those fields. # Note: wordpad (write) and others do not support links. RTF_HYPERLINKS = NO # Load stylesheet definitions from file. Syntax is similar to doxygen's # config file, i.e. a series of assignments. You only have to provide # replacements, missing definitions are set to their default value. RTF_STYLESHEET_FILE = # Set optional variables used in the generation of an rtf document. # Syntax is similar to doxygen's config file. RTF_EXTENSIONS_FILE = #--------------------------------------------------------------------------- # configuration options related to the man page output #--------------------------------------------------------------------------- # If the GENERATE_MAN tag is set to YES (the default) Doxygen will # generate man pages GENERATE_MAN = NO # The MAN_OUTPUT tag is used to specify where the man pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `man' will be used as the default path. MAN_OUTPUT = man # The MAN_EXTENSION tag determines the extension that is added to # the generated man pages (default is the subroutine's section .3) MAN_EXTENSION = .3 # If the MAN_LINKS tag is set to YES and Doxygen generates man output, # then it will generate one additional man file for each entity # documented in the real man page(s). These additional files # only source the real man page, but without them the man command # would be unable to find the correct page. The default is NO. MAN_LINKS = NO #--------------------------------------------------------------------------- # configuration options related to the XML output #--------------------------------------------------------------------------- # If the GENERATE_XML tag is set to YES Doxygen will # generate an XML file that captures the structure of # the code including all documentation. GENERATE_XML = NO # The XML_OUTPUT tag is used to specify where the XML pages will be put. # If a relative path is entered the value of OUTPUT_DIRECTORY will be # put in front of it. If left blank `xml' will be used as the default path. XML_OUTPUT = xml # The XML_SCHEMA tag can be used to specify an XML schema, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_SCHEMA = # The XML_DTD tag can be used to specify an XML DTD, # which can be used by a validating XML parser to check the # syntax of the XML files. XML_DTD = # If the XML_PROGRAMLISTING tag is set to YES Doxygen will # dump the program listings (including syntax highlighting # and cross-referencing information) to the XML output. Note that # enabling this will significantly increase the size of the XML output. XML_PROGRAMLISTING = YES #--------------------------------------------------------------------------- # configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will # generate an AutoGen Definitions (see autogen.sf.net) file # that captures the structure of the code including all # documentation. Note that this feature is still experimental # and incomplete at the moment. GENERATE_AUTOGEN_DEF = NO #--------------------------------------------------------------------------- # configuration options related to the Perl module output #--------------------------------------------------------------------------- # If the GENERATE_PERLMOD tag is set to YES Doxygen will # generate a Perl module file that captures the structure of # the code including all documentation. Note that this # feature is still experimental and incomplete at the # moment. GENERATE_PERLMOD = NO # If the PERLMOD_LATEX tag is set to YES Doxygen will generate # the necessary Makefile rules, Perl scripts and LaTeX code to be able # to generate PDF and DVI output from the Perl module output. PERLMOD_LATEX = NO # If the PERLMOD_PRETTY tag is set to YES the Perl module output will be # nicely formatted so it can be parsed by a human reader. # This is useful # if you want to understand what is going on. # On the other hand, if this # tag is set to NO the size of the Perl module output will be much smaller # and Perl will parse it just the same. PERLMOD_PRETTY = YES # The names of the make variables in the generated doxyrules.make file # are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. # This is useful so different doxyrules.make files included by the same # Makefile don't overwrite each other's variables. PERLMOD_MAKEVAR_PREFIX = #--------------------------------------------------------------------------- # Configuration options related to the preprocessor #--------------------------------------------------------------------------- # If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will # evaluate all C-preprocessor directives found in the sources and include # files. ENABLE_PREPROCESSING = YES # If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro # names in the source code. If set to NO (the default) only conditional # compilation will be performed. Macro expansion can be done in a controlled # way by setting EXPAND_ONLY_PREDEF to YES. MACRO_EXPANSION = YES # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES # then the macro expansion is limited to the macros specified with the # PREDEFINED and EXPAND_AS_DEFINED tags. EXPAND_ONLY_PREDEF = NO # If the SEARCH_INCLUDES tag is set to YES (the default) the includes files # in the INCLUDE_PATH (see below) will be search if a #include is found. SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by # the preprocessor. INCLUDE_PATH = @top_builddir@/include @top_builddir@/Config # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the # directories. If left blank, the patterns specified with FILE_PATTERNS will # be used. INCLUDE_FILE_PATTERNS = # The PREDEFINED tag can be used to specify one or more macro names that # are defined before the preprocessor is started (similar to the -D option of # gcc). The argument of the tag is a list of macros of the form: name # or name=definition (no spaces). If the definition and the = are # omitted =1 is assumed. To prevent a macro definition from being # undefined via #undef or recursively expanded use the := operator # instead of the = operator. PREDEFINED = # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then # this tag can be used to specify a list of macro names that should be expanded. # The macro definition that is found in the sources will be used. # Use the PREDEFINED tag if you want to use a different macro definition. EXPAND_AS_DEFINED = # If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then # doxygen's preprocessor will remove all function-like macros that are alone # on a line, have an all uppercase name, and do not end with a semicolon. Such # function macros are typically used for boiler-plate code, and will confuse # the parser if not removed. SKIP_FUNCTION_MACROS = NO #--------------------------------------------------------------------------- # Configuration::additions related to external references #--------------------------------------------------------------------------- # The TAGFILES option can be used to specify one or more tagfiles. # Optionally an initial location of the external documentation # can be added for each tagfile. The format of a tag file without # this location is as follows: # # TAGFILES = file1 file2 ... # Adding location for the tag files is done as follows: # # TAGFILES = file1=loc1 "file2 = loc2" ... # where "loc1" and "loc2" can be relative or absolute paths or # URLs. If a location is present for each tag, the installdox tool # does not have to be run to correct the links. # Note that each tag file must have a unique name # (where the name does NOT include the path) # If a tag file is not located in the directory in which doxygen # is run, you must also specify the path to the tagfile here. TAGFILES = # When a file name is specified after GENERATE_TAGFILE, doxygen will create # a tag file that is based on the input files it reads. GENERATE_TAGFILE = ThePEG-refman.tag # If the ALLEXTERNALS tag is set to YES all external classes will be listed # in the class index. If set to NO only the inherited external classes # will be listed. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed # in the modules index. If set to NO, only the current project's groups will # be listed. EXTERNAL_GROUPS = YES # The PERL_PATH should be the absolute path and name of the perl script # interpreter (i.e. the result of `which perl'). PERL_PATH = /usr/bin/perl #--------------------------------------------------------------------------- # Configuration options related to the dot tool #--------------------------------------------------------------------------- # If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will # generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base # or super classes. Setting the tag to NO turns the diagrams off. Note that # this option is superseded by the HAVE_DOT option below. This is only a # fallback. It is recommended to install and use dot, since it yields more # powerful graphs. CLASS_DIAGRAMS = YES # You can define message sequence charts within doxygen comments using the \msc # command. Doxygen will then run the mscgen tool (see # http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the # documentation. The MSCGEN_PATH tag allows you to specify the directory where # the mscgen tool resides. If left empty the tool is assumed to be found in the # default search path. MSCGEN_PATH = # If set to YES, the inheritance and collaboration graphs will hide # inheritance and usage relations if the target is undocumented # or is not a class. HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz, a graph visualization # toolkit from AT&T and Lucent Bell Labs. The other options in this section # have no effect if this option is set to NO (the default) HAVE_DOT = YES # By default doxygen will write a font called FreeSans.ttf to the output # directory and reference it in all dot files that doxygen generates. This # font does not include all possible unicode characters however, so when you need # these (or just want a differently looking font) you can specify the font name # using DOT_FONTNAME. You need need to make sure dot is able to find the font, # which can be done by putting it in a standard location or by setting the # DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory # containing the font. DOT_FONTNAME = FreeSans # The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. # The default size is 10pt. DOT_FONTSIZE = 10 # By default doxygen will tell dot to use the output directory to look for the # FreeSans.ttf font (which doxygen will put there itself). If you specify a # different font using DOT_FONTNAME you can set the path where dot # can find it using this tag. DOT_FONTPATH = # If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect inheritance relations. Setting this tag to YES will force the # the CLASS_DIAGRAMS tag to NO. CLASS_GRAPH = YES # If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen # will generate a graph for each documented class showing the direct and # indirect implementation dependencies (inheritance, containment, and # class references variables) of the class with other documented classes. COLLABORATION_GRAPH = NO # If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen # will generate a graph for groups, showing the direct groups dependencies GROUP_GRAPHS = YES # If the UML_LOOK tag is set to YES doxygen will generate inheritance and # collaboration diagrams in a style similar to the OMG's Unified Modeling # Language. UML_LOOK = NO # If set to YES, the inheritance and collaboration graphs will show the # relations between templates and their instances. TEMPLATE_RELATIONS = YES # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT # tags are set to YES then doxygen will generate a graph for each documented # file showing the direct and indirect include dependencies of the file with # other documented files. INCLUDE_GRAPH = NO # If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and # HAVE_DOT tags are set to YES then doxygen will generate a graph for each # documented header file showing the documented files that directly or # indirectly include this file. INCLUDED_BY_GRAPH = NO # If the CALL_GRAPH and HAVE_DOT options are set to YES then # doxygen will generate a call dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable call graphs # for selected functions only using the \callgraph command. CALL_GRAPH = NO # If the CALLER_GRAPH and HAVE_DOT tags are set to YES then # doxygen will generate a caller dependency graph for every global function # or class method. Note that enabling this option will significantly increase # the time of a run. So in most cases it will be better to enable caller # graphs for selected functions only using the \callergraph command. CALLER_GRAPH = NO # If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen # will graphical hierarchy of all classes instead of a textual one. GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES # then doxygen will show the dependencies a directory has on other directories # in a graphical way. The dependency relations are determined by the #include # relations between the files in the directories. DIRECTORY_GRAPH = YES # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. Possible values are png, jpg, or gif # If left blank png will be used. DOT_IMAGE_FORMAT = # The tag DOT_PATH can be used to specify the path where the dot tool can be # found. If left blank, it is assumed the dot tool can be found in the path. DOT_PATH = # The DOTFILE_DIRS tag can be used to specify one or more directories that # contain dot files that are included in the documentation (see the # \dotfile command). DOTFILE_DIRS = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of # nodes that will be shown in the graph. If the number of nodes in a graph # becomes larger than this value, doxygen will truncate the graph, which is # visualized by representing a node as a red box. Note that doxygen if the # number of direct children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note # that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. DOT_GRAPH_MAX_NODES = 50 # The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the # graphs generated by dot. A depth value of 3 means that only nodes reachable # from the root by following a path via at most 3 edges will be shown. Nodes # that lay further from the root node will be omitted. Note that setting this # option to 1 or 2 may greatly reduce the computation time needed for large # code bases. Also note that the size of a graph can be further restricted by # DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. MAX_DOT_GRAPH_DEPTH = 0 # Set the DOT_TRANSPARENT tag to YES to generate images with a transparent # background. This is disabled by default, because dot on Windows does not # seem to support this out of the box. Warning: Depending on the platform used, # enabling this option may lead to badly anti-aliased labels on the edges of # a graph (i.e. they become hard to read). DOT_TRANSPARENT = NO # Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) # support this, this feature is disabled by default. DOT_MULTI_TARGETS = YES # If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will # generate a legend page explaining the meaning of the various boxes and # arrows in the dot generated graphs. GENERATE_LEGEND = YES # If the DOT_CLEANUP tag is set to YES (the default) Doxygen will # remove the intermediate dot files that are used to generate # the various graphs. DOT_CLEANUP = YES thepeg-1.8.0.orig/Doc/MakeDocs.in.in0000644000175000017500000000225411747772425015302 0ustar sunsunlibrary ACDCSampler.so library BreitWignerMass.so library ColourPairDecayer.so library DalitzDecayer.so library FixedCMSLuminosity.so library GaussianPtGenerator.so library GRVBase.so library GRV94L.so library GRV94M.so library KTClus.so library LeptonLeptonPDF.so library UnResolvedRemnant.so library LesHouches.so library libThePEG.so library MadGraphReader.so library MEee2gZ2qq.so library MENCDIS.so library MEQCD.so library MultiEventGenerator.so library O1AlphaS.so library OmegaPhi3PiDecayer.so library Onium3GDecayer.so library QuarksToHadronsDecayer.so library ReweightConstant.so library ReweightMinPT.so library SimpleAlphaEM.so library SimpleDISCut.so library SimpleFlavour.so library SimpleKTCut.so library SimpleZGenerator.so library StandardCKM.so library Tau2HadronsDecayer.so library ThePEGStrategy.so library V2LeptonsCut.so library V2PPDecayer.so library WeakToHadronsDecayer.so library WeizsackerWilliamsPDF.so library KTRapidityCut.so library XSecCheck.so library LWHFactory.so library GraphvizPlot.so library HepMCAnalysis.so library ProgressLog.so library BudnevPDF.so @LOAD_LHAPDF@ @LOAD_RIVET@ doxygendump ThePEG:: AllInterfaces.h doxygendump Helicity:: MoreInterfaces.h thepeg-1.8.0.orig/Doc/MakeDocs.in0000644000175000017500000000230211756366760014670 0ustar sunsunlibrary ACDCSampler.so library BreitWignerMass.so library ColourPairDecayer.so library DalitzDecayer.so library FixedCMSLuminosity.so library GaussianPtGenerator.so library GRVBase.so library GRV94L.so library GRV94M.so library KTClus.so library LeptonLeptonPDF.so library UnResolvedRemnant.so library LesHouches.so library libThePEG.so library MadGraphReader.so library MEee2gZ2qq.so library MENCDIS.so library MEQCD.so library MultiEventGenerator.so library O1AlphaS.so library OmegaPhi3PiDecayer.so library Onium3GDecayer.so library QuarksToHadronsDecayer.so library ReweightConstant.so library ReweightMinPT.so library SimpleAlphaEM.so library SimpleDISCut.so library SimpleFlavour.so library SimpleKTCut.so library SimpleZGenerator.so library StandardCKM.so library Tau2HadronsDecayer.so library ThePEGStrategy.so library V2LeptonsCut.so library V2PPDecayer.so library WeakToHadronsDecayer.so library WeizsackerWilliamsPDF.so library KTRapidityCut.so library XSecCheck.so library LWHFactory.so library GraphvizPlot.so library HepMCAnalysis.so library ProgressLog.so library BudnevPDF.so library ThePEGLHAPDF.so library RivetAnalysis.so doxygendump ThePEG:: AllInterfaces.h doxygendump Helicity:: MoreInterfaces.h thepeg-1.8.0.orig/Doc/refman.h.in0000644000175000017500000000133611747772425014705 0ustar sunsun/**\mainpage ThePEG Reference Manual This is the reference manual for Toolkit for High Energy Physics Event Generation - ThePEG. \section ThePEGIntroduction Introduction ThePEG is a general toolkit for implementing physics models of event generation in high energy particle collisions. It defines a general structure of event generation in terms of abstract base classes for eg. hard partonic matrix elements, parton showers and the decay of unstable particles. Different models are then implemented by creating classes which inherits from these base classes and implements sets of pre-defined virtual functions. */ /** \defgroup Persistency Persistency classes These classes are used by the persistent I/O system of ThePEG */ thepeg-1.8.0.orig/Doc/repository.hlp0000644000175000017500000000402411747772425015600 0ustar sunsunSyntax: cd // Set current directory mkdir // create new directory pushd // Set current directory but keep old one on stack popd // Quit current directory and cd to the one on the top of the stack pwd // Print current direcrory dirs // Print directory stack rmdir // remove the given (empty) directory rrmdir // recursively delete the given directory and all objects in it. rcp // recursively copy the given directory and all objects in it. cp // clone a given object giving the clone a new name. mv // rename a given object rm // remove a given object. ls {} // Print the object names in the current {given} directory library // load a given dynamic library create {} // create a new object setup // Let an object read a given string to set itself up. set : // set a given interface get : // print a given interface interface setdef : // Set given interface to its default value insert : // insert new value/object in vector interface erase : // erase from vector interface saverun // Initialize an event generator and save it to a file. = |: = /| = | = /|/ = ||| = |[] = |[] = | = [] = integer = ||| thepeg-1.8.0.orig/Doc/Makefile.in0000644000175000017500000004045511756366734014733 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Doc DIST_COMMON = $(dist_doc_DATA) $(dist_noinst_SCRIPTS) \ $(srcdir)/MakeDocs.in.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/fixinterfaces.pl.in \ $(srcdir)/refman.conf.in $(srcdir)/refman.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = MakeDocs.in refman.h refman.conf fixinterfaces.pl CONFIG_CLEAN_VPATH_FILES = SCRIPTS = $(dist_noinst_SCRIPTS) AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" "$(DESTDIR)$(docdir)" DATA = $(dist_doc_DATA) $(doc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(pkgdatadir)/Doc dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ CLEANFILES = AllInterfaces.h MoreInterfaces.h doxywarnings.log doc_DATA = refman.conf refman.h dist_doc_DATA = repository.hlp MakeDocs.in dist_noinst_SCRIPTS = fixinterfaces.pl all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): MakeDocs.in: $(top_builddir)/config.status $(srcdir)/MakeDocs.in.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ refman.h: $(top_builddir)/config.status $(srcdir)/refman.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ refman.conf: $(top_builddir)/config.status $(srcdir)/refman.conf.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ fixinterfaces.pl: $(top_builddir)/config.status $(srcdir)/fixinterfaces.pl.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) tags: TAGS TAGS: ctags: CTAGS CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(SCRIPTS) $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)" "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: html-local info: info-am info-am: install-data-am: install-data-local install-dist_docDATA \ install-docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_docDATA uninstall-docDATA uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ clean-local distclean distclean-generic distclean-libtool \ distdir dvi dvi-am html html-am html-local info info-am \ install install-am install-data install-data-am \ install-data-local install-dist_docDATA install-docDATA \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am uninstall uninstall-am uninstall-dist_docDATA \ uninstall-docDATA uninstall-local clean-local: html-clean html-clean: rm -rf refman-html ThePEG-refman.tag html-local: refman-html AllInterfaces.h: MakeDocs.in $(top_builddir)/src/setupThePEG --init --exitonerror -L$(top_builddir)/lib $(srcdir)/MakeDocs.in MoreInterfaces.h: MakeDocs.in $(top_builddir)/src/setupThePEG --init --exitonerror -L$(top_builddir)/lib $(srcdir)/MakeDocs.in refman-html: refman.conf refman.h AllInterfaces.h MoreInterfaces.h $(builddir)/fixinterfaces.pl AllInterfaces.h $(builddir)/fixinterfaces.pl MoreInterfaces.h doxygen $< install-data-local: if test -d refman-html; then $(mkdir_p) $(DESTDIR)$(docdir);\ find refman-html -follow -name '*.*' \ -exec $(install_sh_DATA) \{\} $(DESTDIR)$(docdir)/\{\} \;; \ $(install_sh_DATA) ThePEG-refman.tag $(DESTDIR)$(docdir)/ThePEG-refman.tag; fi uninstall-local: rm -rf $(DESTDIR)$(docdir)/refman-html \ $(DESTDIR)$(docdir)/ThePEG-refman.tag # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Doc/Makefile.am0000644000175000017500000000213111747772425014705 0ustar sunsunCLEANFILES = AllInterfaces.h MoreInterfaces.h doxywarnings.log docdir = $(pkgdatadir)/Doc doc_DATA = refman.conf refman.h dist_doc_DATA = repository.hlp MakeDocs.in dist_noinst_SCRIPTS = fixinterfaces.pl clean-local: html-clean html-clean: rm -rf refman-html ThePEG-refman.tag html-local: refman-html AllInterfaces.h: MakeDocs.in $(top_builddir)/src/setupThePEG --init --exitonerror -L$(top_builddir)/lib $(srcdir)/MakeDocs.in MoreInterfaces.h: MakeDocs.in $(top_builddir)/src/setupThePEG --init --exitonerror -L$(top_builddir)/lib $(srcdir)/MakeDocs.in refman-html: refman.conf refman.h AllInterfaces.h MoreInterfaces.h $(builddir)/fixinterfaces.pl AllInterfaces.h $(builddir)/fixinterfaces.pl MoreInterfaces.h doxygen $< install-data-local: if test -d refman-html; then $(mkdir_p) $(DESTDIR)$(docdir);\ find refman-html -follow -name '*.*' \ -exec $(install_sh_DATA) \{\} $(DESTDIR)$(docdir)/\{\} \;; \ $(install_sh_DATA) ThePEG-refman.tag $(DESTDIR)$(docdir)/ThePEG-refman.tag; fi uninstall-local: rm -rf $(DESTDIR)$(docdir)/refman-html \ $(DESTDIR)$(docdir)/ThePEG-refman.tag thepeg-1.8.0.orig/Doc/fixinterfaces.pl.in0000755000175000017500000000026611747772425016457 0ustar sunsun#!@PERL@ -pi s|(\S+?)::(\S+?)|\1:\ :\2|g; s|(\S+?)|\1|g; thepeg-1.8.0.orig/Doc/fixinterfaces.pl0000755000175000017500000000027511756366760016053 0ustar sunsun#!/usr/bin/perl -pi s|(\S+?)::(\S+?)|\1:\ :\2|g; s|(\S+?)|\1|g; thepeg-1.8.0.orig/COPYING0000644000175000017500000004311011747772425013201 0ustar sunsun GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. thepeg-1.8.0.orig/Helicity/0000755000175000017500000000000011756460365013716 5ustar sunsunthepeg-1.8.0.orig/Helicity/LorentzTensor.h0000644000175000017500000003257511747772425016736 0ustar sunsun// -*- C++ -*- // // LorentzTensor.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzTensor_H #define ThePEG_LorentzTensor_H // This is the declaration of the LorentzTensor class. #include "ThePEG/Config/ThePEG.h" #include "LorentzPolarizationVector.h" namespace ThePEG { namespace Helicity { // compiler magic needs these pre-declarations to make friend templates work template class LorentzTensor; /** * The LorentzTensor class is designed to implement the storage of a * complex tensor to be used to representation the wavefunction of a * spin-2 particle. * * At the moment it only implements the storage of the tensor * components but it is envisaged that it will be extended to include * boost methods etc. * * @author Peter Richardson * */ template class LorentzTensor { public: /** @name Standard constructors and destructors. */ //@{ /** * Default zero constructor. */ LorentzTensor() { for(unsigned int ix=0;ix<4;++ix) for(unsigned int iy=0;iy<4;++iy) _tensor[ix][iy]=Value(); } /** * Constructor specifyign all components. */ LorentzTensor(complex xx, complex xy, complex xz, complex xt, complex yx, complex yy, complex yz, complex yt, complex zx, complex zy, complex zz, complex zt, complex tx, complex ty, complex tz, complex tt){ _tensor[0][0]=xx;_tensor[0][1]=xy;_tensor[0][2]=xz;_tensor[0][3]=xt; _tensor[1][0]=yx;_tensor[1][1]=yy;_tensor[1][2]=yz;_tensor[1][3]=yt; _tensor[2][0]=zx;_tensor[2][1]=zy;_tensor[2][2]=zz;_tensor[2][3]=zt; _tensor[3][0]=tx;_tensor[3][1]=ty;_tensor[3][2]=tz;_tensor[3][3]=tt; } /** * Constructor in terms of two polarization vectors. */ LorentzTensor(const LorentzPolarizationVector & p, const LorentzPolarizationVector & q) { setXX(p.x() * q.x()); setYX(p.y() * q.x()); setZX(p.z() * q.x()); setTX(p.t() * q.x()); setXY(p.x() * q.y()); setYY(p.y() * q.y()); setZY(p.z() * q.y()); setTY(p.t() * q.y()); setXZ(p.x() * q.z()); setYZ(p.y() * q.z()); setZZ(p.z() * q.z()); setTZ(p.t() * q.z()); setXT(p.x() * q.t()); setYT(p.y() * q.t()); setZT(p.z() * q.t()); setTT(p.t() * q.t()); } //@} /** @name Access individual components. */ //@{ /** * Get x,x component. */ complex xx() const {return _tensor[0][0];} /** * Get y,x component. */ complex yx() const {return _tensor[1][0];} /** * Get z,x component. */ complex zx() const {return _tensor[2][0];} /** * Get t,x component. */ complex tx() const {return _tensor[3][0];} /** * Get x,y component. */ complex xy() const {return _tensor[0][1];} /** * Get y,y component. */ complex yy() const {return _tensor[1][1];} /** * Get z,y component. */ complex zy() const {return _tensor[2][1];} /** * Get t,y component. */ complex ty() const {return _tensor[3][1];} /** * Get x,z component. */ complex xz() const {return _tensor[0][2];} /** * Get y,z component. */ complex yz() const {return _tensor[1][2];} /** * Get z,z component. */ complex zz() const {return _tensor[2][2];} /** * Get t,z component. */ complex tz() const {return _tensor[3][2];} /** * Get x,t component. */ complex xt() const {return _tensor[0][3];} /** * Get y,t component. */ complex yt() const {return _tensor[1][3];} /** * Get z,t component. */ complex zt() const {return _tensor[2][3];} /** * Get t,t component. */ complex tt() const {return _tensor[3][3];} /** * Set x,x component. */ void setXX(complex a) {_tensor[0][0]=a;} /** * Set y,x component. */ void setYX(complex a) {_tensor[1][0]=a;} /** * Set z,x component. */ void setZX(complex a) {_tensor[2][0]=a;} /** * Set t,x component. */ void setTX(complex a) {_tensor[3][0]=a;} /** * Set x,y component. */ void setXY(complex a) {_tensor[0][1]=a;} /** * Set y,y component. */ void setYY(complex a) {_tensor[1][1]=a;} /** * Set z,y component. */ void setZY(complex a) {_tensor[2][1]=a;} /** * Set t,y component. */ void setTY(complex a) {_tensor[3][1]=a;} /** * Set x,z component. */ void setXZ(complex a) {_tensor[0][2]=a;} /** * Set y,z component. */ void setYZ(complex a) {_tensor[1][2]=a;} /** * Set z,z component. */ void setZZ(complex a) {_tensor[2][2]=a;} /** * Set t,z component. */ void setTZ(complex a) {_tensor[3][2]=a;} /** * Set x,t component. */ void setXT(complex a) {_tensor[0][3]=a;} /** * Set y,t component. */ void setYT(complex a) {_tensor[1][3]=a;} /** * Set z,t component. */ void setZT(complex a) {_tensor[2][3]=a;} /** * Set t,t component. */ void setTT(complex a) {_tensor[3][3]=a;} /** * Get components by indices. */ complex operator () (int i, int j) const { assert( i>=0 && i<=3 && j>=0 && j<=3); return _tensor[i][j]; } /** * Set components by indices. */ complex & operator () (int i, int j) { assert( i>=0 && i<=3 && j>=0 && j<=3); return _tensor[i][j]; } //@} /** @name Transformations. */ //@{ /** * Standard Lorentz boost specifying the components of the beta vector. */ LorentzTensor & boost(double,double,double); /** * Standard Lorentz boost specifying the beta vector. */ LorentzTensor & boost(const Boost & b) { return boost(b.x(), b.y(), b.z()); } /** * General Lorentz transformation */ LorentzTensor & transform(const SpinOneLorentzRotation & r){ unsigned int ix,iy,ixa,iya; LorentzTensor output; complex temp; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { temp=complex(); for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) temp+=r(ix,ixa)*r(iy,iya)*(*this)(ixa,iya); } output(ix,iy)=temp; } } *this=output; return *this; } /** * Return the complex conjugate. */ LorentzTensor conjugate() { return LorentzTensor(conj(xx()), conj(xy()), conj(xz()), conj(xt()), conj(yx()), conj(yy()), conj(yz()), conj(yt()), conj(zx()), conj(zy()), conj(zz()), conj(zt()), conj(tx()), conj(ty()), conj(tz()), conj(tt())); } //@} /** @name Arithmetic operators. */ //@{ /** * Scaling with a complex number */ LorentzTensor operator*=(Complex a) { for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _tensor[ix][iy]*=a; return *this; } /** * Scalar product with other tensor */ template friend complex::MulT> operator*(const LorentzTensor & t, const LorentzTensor & u); /** * Addition. */ LorentzTensor operator+(const LorentzTensor & in) const { return LorentzTensor(xx()+in.xx(),xy()+in.xy(),xz()+in.xz(),xt()+in.xt(), yx()+in.yx(),yy()+in.yy(),yz()+in.yz(),yt()+in.yt(), zx()+in.zx(),zy()+in.zy(),zz()+in.zz(),zt()+in.zt(), tx()+in.tx(),ty()+in.ty(),tz()+in.tz(),tt()+in.tt()); } /** * Subtraction. */ LorentzTensor operator-(const LorentzTensor & in) const { return LorentzTensor(xx()-in.xx(),xy()-in.xy(),xz()-in.xz(),xt()-in.xt(), yx()-in.yx(),yy()-in.yy(),yz()-in.yz(),yt()-in.yt(), zx()-in.zx(),zy()-in.zy(),zz()-in.zz(),zt()-in.zt(), tx()-in.tx(),ty()-in.ty(),tz()-in.tz(),tt()-in.tt()); } /** * Trace */ complex trace() const { return _tensor[3][3]-_tensor[0][0]-_tensor[1][1]-_tensor[2][2]; } //@} /** * Various dot products */ //@{ /** * First index dot product with polarization vector */ LorentzVector > preDot (const LorentzPolarizationVector & vec) const { LorentzVector > output; output.setX(vec.t()*_tensor[3][0]-vec.x()*_tensor[0][0]- vec.y()*_tensor[1][0]-vec.z()*_tensor[2][0]); output.setY(vec.t()*_tensor[3][1]-vec.x()*_tensor[0][1]- vec.y()*_tensor[1][1]-vec.z()*_tensor[2][1]); output.setZ(vec.t()*_tensor[3][2]-vec.x()*_tensor[0][2]- vec.y()*_tensor[1][2]-vec.z()*_tensor[2][2]); output.setT(vec.t()*_tensor[3][3]-vec.x()*_tensor[0][3]- vec.y()*_tensor[1][3]-vec.z()*_tensor[2][3]); return output; } /** * Second index dot product with polarization vector */ LorentzVector > postDot(const LorentzPolarizationVector & vec) const { LorentzVector > output; output.setX(vec.t()*_tensor[0][3]-vec.x()*_tensor[0][0]- vec.y()*_tensor[0][1]-vec.z()*_tensor[0][2]); output.setY(vec.t()*_tensor[1][3]-vec.x()*_tensor[1][0]- vec.y()*_tensor[1][1]-vec.z()*_tensor[1][2]); output.setZ(vec.t()*_tensor[2][3]-vec.x()*_tensor[2][0]- vec.y()*_tensor[2][1]-vec.z()*_tensor[2][2]); output.setT(vec.t()*_tensor[3][3]-vec.x()*_tensor[3][0]- vec.y()*_tensor[3][1]-vec.z()*_tensor[3][2]); return output; } /** * First index dot product with momentum */ LorentzVector::MulT> > preDot (const Lorentz5Momentum & vec) const { LorentzVector::MulT> > output; output.setX(vec.t()*_tensor[3][0]-vec.x()*_tensor[0][0]- vec.y()*_tensor[1][0]-vec.z()*_tensor[2][0]); output.setY(vec.t()*_tensor[3][1]-vec.x()*_tensor[0][1]- vec.y()*_tensor[1][1]-vec.z()*_tensor[2][1]); output.setZ(vec.t()*_tensor[3][2]-vec.x()*_tensor[0][2]- vec.y()*_tensor[1][2]-vec.z()*_tensor[2][2]); output.setT(vec.t()*_tensor[3][3]-vec.x()*_tensor[0][3]- vec.y()*_tensor[1][3]-vec.z()*_tensor[2][3]); return output; } /** * Second index dot product with momentum */ LorentzVector::MulT> > postDot(const Lorentz5Momentum & vec) const { LorentzVector::MulT> > output; output.setX(vec.t()*_tensor[0][3]-vec.x()*_tensor[0][0]- vec.y()*_tensor[0][1]-vec.z()*_tensor[0][2]); output.setY(vec.t()*_tensor[1][3]-vec.x()*_tensor[1][0]- vec.y()*_tensor[1][1]-vec.z()*_tensor[1][2]); output.setZ(vec.t()*_tensor[2][3]-vec.x()*_tensor[2][0]- vec.y()*_tensor[2][1]-vec.z()*_tensor[2][2]); output.setT(vec.t()*_tensor[3][3]-vec.x()*_tensor[3][0]- vec.y()*_tensor[3][1]-vec.z()*_tensor[3][2]); return output; } //@} private: /** * The components. */ complex _tensor[4][4]; }; /** * Multiplication by a complex number. */ template inline LorentzTensor::MulT> operator*(complex a, const LorentzTensor & t) { return LorentzTensor::MulT> (a*t.xx(), a*t.xy(), a*t.xz(), a*t.xt(), a*t.yx(), a*t.yy(), a*t.yz(), a*t.yt(), a*t.zx(), a*t.zy(), a*t.zz(), a*t.zt(), a*t.tx(), a*t.ty(), a*t.tz(), a*t.tt()); } /** * Multiply a LorentzVector by a LorentzTensor. */ template inline LorentzVector,U>::MulT> operator*(const LorentzVector & invec, const LorentzTensor & inten) { LorentzVector,U>::MulT> outvec; outvec.setX(invec.t()*inten(3,0)-invec.x()*inten(0,0) -invec.y()*inten(1,0)-invec.z()*inten(2,0)); outvec.setY(invec.t()*inten(3,1)-invec.x()*inten(0,1) -invec.y()*inten(1,1)-invec.z()*inten(2,1)); outvec.setZ(invec.t()*inten(3,2)-invec.x()*inten(0,2) -invec.y()*inten(1,2)-invec.z()*inten(2,2)); outvec.setT(invec.t()*inten(3,3)-invec.x()*inten(0,3) -invec.y()*inten(1,3)-invec.z()*inten(2,3)); return outvec; } /** * Multiply a LorentzTensor by a LorentzVector. */ template inline LorentzVector,U>::MulT> operator*(const LorentzTensor & inten, const LorentzVector & invec){ LorentzVector,U>::MulT> outvec; outvec.setX(invec.t()*inten(0,3)-invec.x()*inten(0,0) -invec.y()*inten(0,1)-invec.z()*inten(0,2)); outvec.setY(invec.t()*inten(1,3)-invec.x()*inten(1,0) -invec.y()*inten(1,1)-invec.z()*inten(1,2)); outvec.setZ(invec.t()*inten(2,3)-invec.x()*inten(2,0) -invec.y()*inten(2,1)-invec.z()*inten(2,2)); outvec.setT(invec.t()*inten(3,3)-invec.x()*inten(3,0) -invec.y()*inten(3,1)-invec.z()*inten(3,2)); return outvec; } /** * Multiply a LorentzTensor by a LorentzTensor */ template inline complex::MulT> operator*(const LorentzTensor & t, const LorentzTensor & u) { typedef complex::MulT> RetT; RetT output=RetT(),temp; for(unsigned int ix=0;ix<4;++ix) { temp = t._tensor[ix][3]*u._tensor[ix][3]; for(unsigned int iy=0;iy<3;++iy) { temp+= t._tensor[ix][iy]*u._tensor[ix][iy]; } if(ix<3) output-=temp; else output+=temp; } return output; } } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzTensor.tcc" #endif #endif thepeg-1.8.0.orig/Helicity/Vertex/0000755000175000017500000000000011756460366015174 5ustar sunsunthepeg-1.8.0.orig/Helicity/Vertex/Vector/0000755000175000017500000000000011756460366016436 5ustar sunsunthepeg-1.8.0.orig/Helicity/Vertex/Vector/GeneralFFVVertex.h0000644000175000017500000001627711747772425021743 0ustar sunsun// -*- C++ -*- // // GeneralFFVVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_GeneralFFVVertex_H #define ThePEG_GeneralFFVVertex_H // // This is the declaration of the GeneralFFVVertex class. #include #include #include #include #include "GeneralFFVVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The GeneralFFVVertex class is the base class for all helicity amplitude * vertices which use a general form of the fermion-fermion-vector vertex. * * Any such vertices should inherit from this class and implement the virtual * setcoupling member function. The base AbstractFFVVertex class is * used to store the particles allowed to interact at the vertex. * * The form of the vertex is * \f[ic\bar{f_2}\gamma^\mu a^\lambda P_\lambda f_1\epsilon_{3\mu}\f] * * @see AbstractFFVVertex */ class GeneralFFVVertex: public AbstractFFVVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2,const VectorWaveFunction & vec3); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; /** * Get the Couplings */ //@{ /** * Get the left coupling. */ const Complex & getLeft() { return _left; } /** * Get the right coupling. */ const Complex & getRight() { return _right; } /** * Get the left coupling for the \f$\sigma^{\mu\nu}\f$ term */ const complex getLeftSigma() { return _leftSigma; } /** * Get the right coupling for the \f$\sigma^{\mu\nu}\f$ term */ const complex getRightSigma() { return _rightSigma; } //@} protected: /** * Set the couplings */ //@{ /** * Set the left coupling. */ void setLeft(const Complex & in) { _left = in; } /** * Set the right coupling. */ void setRight(const Complex & in) { _right = in; } /** * Set the left coupling for the \f$\sigma^{\mu\nu}\f$ term */ void setLeftSigma(const complex & in) { _leftSigma = in; } /** * Set the right coupling for the \f$\sigma^{\mu\nu}\f$ term */ void setRightSigma(const complex & in) { _rightSigma = in; } //@} private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initGeneralFFVVertex; /** * Private and non-existent assignment operator. */ GeneralFFVVertex & operator=(const GeneralFFVVertex &); private: /** * Left \f$\gamma^\mu\f$ coupling. */ Complex _left; /** * Right \f$\gamma^\mu\f$ coupling. */ Complex _right; /** * Left \f$\sigma^{\mu\nu}\f$ coupling */ complex _leftSigma; /** * Right \f$\sigma^{\mu\nu}\f$ coupling */ complex _rightSigma; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of GeneralFFVVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of GeneralFFVVertex. */ typedef ThePEG::Helicity::AbstractFFVVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::GeneralFFVVertex"; } }; /** @endcond */ } #endif /* ThePEG_GeneralFFVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVertex.cc0000644000175000017500000001025511747772425020631 0ustar sunsun// -*- C++ -*- // // VVVVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVVVertex class. // #include "VVVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVVVertex::initVVVVertex; // Definition of the static class description member. void VVVVertex::Init() { static ClassDocumentation documentation ("The VVVVertex class implements the helicity amplitude" "calculations for the triple gauge boson vertex. Any " "implementation of such a vertex should inherit from in and implement" " the virtual setCoupling member to calculate the coupling"); } // evaluate the vertex Complex VVVVertex::evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3) { // calculate the coupling setCoupling(q2,vec1.particle(),vec2.particle(),vec3.particle()); complex alpha1(ZERO); // decide if we need to use special treatment to avoid gauge cancelations // first vector if(abs(vec1.t())!=0.) { if(abs(vec1.t())>0.1*max( max(abs(vec1.x()),abs(vec1.y())),abs(vec1.z()))) alpha1=vec1.e()/vec1.t(); } // second vector if(abs(vec2.t())!=0.) { if(abs(vec2.t())>0.1*max( max(abs(vec2.x()),abs(vec2.y())),abs(vec2.z()))) alpha1=vec2.e()/vec2.t(); } // third vector if(abs(vec3.t())!=0.) { if(abs(vec3.t())>0.1*max( max(abs(vec3.x()),abs(vec3.y())),abs(vec3.z()))) alpha1=vec3.e()/vec3.t(); } // dot products of the polarization vectors Complex dot12 = vec1.wave().dot(vec2.wave()); Complex dot13 = vec1.wave().dot(vec3.wave()); Complex dot23 = vec3.wave().dot(vec2.wave()); // dot products of polarization vectors and momentum complex dotp13 = vec3.wave().dot(LorentzPolarizationVectorE(vec1.momentum()) - alpha1 * vec1.wave()); complex dotp23 = vec3.wave().dot(LorentzPolarizationVectorE(vec2.momentum()) - alpha1 * vec2.wave()); complex dotp21 = vec1.wave().dot(LorentzPolarizationVectorE(vec2.momentum()) - alpha1 * vec2.wave()); complex dotp31 = vec1.wave().dot(LorentzPolarizationVectorE(vec3.momentum()) - alpha1 * vec3.wave()); complex dotp32 = vec2.wave().dot(LorentzPolarizationVectorE(vec3.momentum()) - alpha1 * vec3.wave()); complex dotp12 = vec2.wave().dot(LorentzPolarizationVectorE(vec1.momentum()) - alpha1 * vec1.wave()); // finally calculate the vertex return Complex(0.,1.)*norm()*UnitRemoval::InvE* (dot12*(dotp13-dotp23)+dot23*(dotp21-dotp31)+dot13*(dotp32-dotp12)); } // off-shell vector VectorWaveFunction VVVVertex::evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass, complex width) { // output momenta Lorentz5Momentum pout =vec1.momentum()+vec2.momentum(); // calculate the coupling setCoupling(q2,out,vec1.particle(),vec2.particle()); // prefactor Energy2 p2 = pout.m2(); Complex fact = norm()*propagator(iopt,p2,out,mass,width); if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); // dot products we need Complex dot12 = vec1.wave().dot(vec2.wave()); complex dota = vec1.wave().dot(pout+vec2.momentum()); complex dotb = vec2.wave().dot(pout+vec1.momentum()); // compute the polarization vector LorentzPolarizationVector vect = UnitRemoval::InvE*fact* (dot12*(vec1.momentum()-vec2.momentum())-dotb*vec1.wave()+dota*vec2.wave()); // scalar piece for massive case if(mass.real()!=ZERO) { complex dot = vect.dot(pout)/mass2; vect -= dot*pout; } return VectorWaveFunction(pout,out,vect); } thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVertex.h0000644000175000017500000001025211747772425020470 0ustar sunsun// -*- C++ -*- // // VVVVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVVVertex_H #define ThePEG_VVVVertex_H // // This is the declaration of the VVVVertex class. #include "ThePEG/Helicity/Vertex/AbstractVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "VVVVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The VVVVertex class is the base class for triple vector vertices * using the perturbative form. * It inherits from the AbstractVVVVertex class for the storage of the * particles allowed at the vertex. * * Classes which implement a specific vertex should inherit from this and * implement the virtual setCoupling member. * * The form of the vertex is * \f[ig\left[ (p_1-p_2)^\gamma g^{\alpha\beta } * +(p_2-p_3)^\alpha g^{\beta \gamma} * +(p_3-p_1)^\beta g^{\alpha\gamma} * \right]\epsilon_{1\alpha}\epsilon_{2\beta}\epsilon_{3\gamma}\f] * * @see AbstractVVVVertex */ class VVVVertex: public AbstractVVVVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. */ Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract base class with no persistent data. */ static AbstractNoPIOClassDescription initVVVVertex; /** * Private and non-existent assignment operator. */ VVVVertex & operator=(const VVVVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVVVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVVVertex. */ typedef ThePEG::Helicity::AbstractVVVVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVVVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Vector/RFVVertex.fh0000644000175000017500000000044611747772425020616 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RFVVertex class. // #ifndef ThePEG_RFVVertex_FH #define ThePEG_RFVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class RFVVertex; ThePEG_DECLARE_POINTERS(RFVVertex,RFVVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Vector/FFVVertex.fh0000644000175000017500000000044611747772425020602 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FFVVertex class. // #ifndef ThePEG_FFVVertex_FH #define ThePEG_FFVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class FFVVertex; ThePEG_DECLARE_POINTERS(FFVVertex,FFVVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVVertex.fh0000644000175000017500000000045411747772425020767 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVVVVertex class. // #ifndef ThePEG_VVVVVertex_FH #define ThePEG_VVVVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVVVVertex; ThePEG_DECLARE_POINTERS(VVVVVertex,VVVVVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Vector/GeneralFFVVertex.cc0000644000175000017500000003315611747772425022074 0ustar sunsun// -*- C++ -*- // // GeneralFFVVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the GeneralFFVVertex class. // #include "GeneralFFVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; // Definition of the static class description member AbstractNoPIOClassDescription GeneralFFVVertex::initGeneralFFVVertex; void GeneralFFVVertex::Init() { static ClassDocumentation documentation ("The GeneralFFVVertex class implements the helicity amplitude" "calculations for a fermion-fantifermion gauge boson vertex. Any " "implementation of such a vertex should inherit from in and implement" " the virtual setCoupling member to calculate the coupling"); } // evalulate the full vertex Complex GeneralFFVVertex::evaluate(Energy2 q2, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec) { // first calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),vec.particle()); Complex ii(0.,1.); // useful combinations of the polarization vector components Complex e0p3=vec.t()+vec.z(); Complex e0m3=vec.t()-vec.z(); Complex e1p2=vec.x()+ii*vec.y(); Complex e1m2=vec.x()-ii*vec.y(); complex p0p3=vec. e()+vec.pz(); complex p0m3=vec. e()-vec.pz(); complex p1p2=vec.px()+ii*vec.py(); complex p1m2=vec.px()-ii*vec.py(); // get both the spinors in the same representation (using the default choice) Complex vertex(0.); // first the left piece as this is virtually always needed if(_left!=0.) { vertex = _left*(+sbar.s3()*(sp.s1()*e0p3+sp.s2()*e1m2) +sbar.s4()*(sp.s1()*e1p2+sp.s2()*e0m3)); } // then the right piece (often not needed eg W vertex) if(_right!=0.) { vertex += _right*(+sbar.s1()*(sp.s3()*e0m3-sp.s4()*e1m2) -sbar.s2()*(sp.s3()*e1p2-sp.s4()*e0p3)); } // left sigma piece if(_leftSigma!=0./GeV) { vertex += -ii * _leftSigma * (sbar.s1()*sp.s1()*(-vec. e()*vec.z() + vec.pz()*vec.t() -ii*(vec.py()*vec.x()-vec.px()*vec.y()))+ sbar.s2()*sp.s1()*( p1p2*e0p3 - p0p3*e1p2 ) + sbar.s1()*sp.s2()*( + p1m2*e0m3 - p0m3*e1m2 ) + sbar.s2()*sp.s2()*( vec. e()*vec.z() - vec.pz()*vec.t() -ii*(vec.px()*vec.y()-vec.py()*vec.x()))); } // right sigma piece if(_rightSigma!=0./GeV) { vertex += ii * _rightSigma * (sbar.s3()*sp.s3()*(-vec.e()*vec.z()+vec.pz()*vec.t() -ii*(vec.px()*vec.y()-vec.py()*vec.x()))+ sbar.s4()*sp.s3()*( p1p2*e0m3 - p0m3*e1p2 ) + sbar.s3()*sp.s4()*( p1m2*e0p3 - p0p3*e1m2 ) + sbar.s4()*sp.s4()*( vec.e()*vec.z()-vec.pz()*vec.t() +ii*(vec.px()*vec.y()-vec.py()*vec.x()))); } vertex *= ii; // final factors return vertex*norm(); } // evaluate an off-shell spinor SpinorWaveFunction GeneralFFVVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const SpinorWaveFunction & sp, const VectorWaveFunction &vec, complex mass, complex width) { // extract the pointers to the particle data objects tcPDPtr Psp=sp.particle(); tcPDPtr Pvec=vec.particle(); // first calculate the couplings setCoupling(q2,Psp,out,Pvec); Complex ii(0.,1.); // work out the momentum of the off-shell particle Lorentz5Momentum pout = sp.momentum()+vec.momentum(); // now evaluate the contribution // polarization components Complex e0p3 = vec.t() + vec.z(); Complex e0m3 = vec.t() - vec.z(); Complex e1p2 = vec.x()+ii*vec.y(); Complex e1m2 = vec.x()-ii*vec.y(); // overall factor Energy2 p2 = pout.m2(); Complex fact=-normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = iopt==5 ? ZERO : out->mass(); complex p0p3 = pout.e() + pout.z(); complex p0m3 = pout.e() - pout.z(); complex p1p2 = pout.x() + ii*pout.y(); complex p1m2 = pout.x() - ii*pout.y(); // complex nos for for the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); Complex a1 = fact*( sp.s3()*e0m3-sp.s4()*e1m2); Complex a2 = fact*(-sp.s3()*e1p2+sp.s4()*e0p3); Complex a3 = fact*( sp.s1()*e0p3+sp.s2()*e1m2); Complex a4 = fact*( sp.s1()*e1p2+sp.s2()*e0m3); // left piece if(_left!=0.) { s1 +=UnitRemoval::InvE * _left * (p0m3*a3-p1m2*a4); s2 +=UnitRemoval::InvE * _left * (-p1p2*a3+p0p3*a4); s3 +=UnitRemoval::InvE * _left * a3*mass; s4 +=UnitRemoval::InvE * _left * a4*mass; } // right piece if(_right!=0.) { s1 +=UnitRemoval::InvE * _right * a1*mass; s2 +=UnitRemoval::InvE * _right * a2*mass; s3 +=UnitRemoval::InvE * _right * (p0p3*a1+p1m2*a2); s4 +=UnitRemoval::InvE * _right * (p1p2*a1+p0m3*a2); } complex p0p3b = vec. e() + vec.pz(); complex p0m3b = vec. e() - vec.pz(); complex p1p2b = vec.px() + ii*vec.py(); complex p1m2b = vec.px() - ii*vec.py(); complex b1 = fact*( sp.s3()*p0m3b - sp.s4()*p1m2b); complex b2 = fact*(-sp.s3()*p1p2b + sp.s4()*p0p3b); complex b3 = fact*( sp.s1()*p0p3b + sp.s2()*p1m2b); complex b4 = fact*( sp.s1()*p1p2b + sp.s2()*p0m3b); // left sigma piece if(_leftSigma!=0./GeV) { s1 += -0.5*ii*UnitRemoval::InvE *mass*_leftSigma* ( - a3*p0m3b + a4*p1m2b + b3*e0m3 - b4*e1m2); s2 += 0.5*ii*UnitRemoval::InvE *mass*_leftSigma* ( - a3*p1p2b + a4*p0p3b + b3*e1p2 - b4*e0p3); s3 += -0.5*ii*UnitRemoval::InvE*_leftSigma* ( + p0p3*( - a3*p0m3b + a4*p1m2b + b3*e0m3 - b4*e1m2 ) + p1m2*( a3*p1p2b - a4*p0p3b - b3*e1p2 + b4*e0p3 ) ); s4 += 0.5*ii*UnitRemoval::InvE*_leftSigma* ( + p1p2*( + a3*p0m3b - a4*p1m2b - b3*e0m3 + b4*e1m2 ) + p0m3*( - a3*p1p2b + a4*p0p3b + b3*e1p2 - b4*e0p3 ) ); } // right sigma piece if(_rightSigma!=0./GeV) { s1 += 0.5*ii*UnitRemoval::InvE *_rightSigma* ( + p0m3*( + a1*p0p3b + a2*p1m2b - b1*e0p3 - b2*e1m2 ) + p1m2*( - a1*p1p2b - a2*p0m3b + b1*e1p2 + b2*e0m3 ) ); s2 += -0.5*ii*UnitRemoval::InvE *_rightSigma* ( + p1p2*( + a1*p0p3b + a2*p1m2b - b1*e0p3 - b2*e1m2 ) + p0p3*( - a1*p1p2b - a2*p0m3b + b1*e1p2 + b2*e0m3 ) ); s3 += 0.5*ii*UnitRemoval::InvE *mass*_rightSigma* ( a1*p0p3b + a2*p1m2b - b1*e0p3 - b2*e1m2 ); s4 += -0.5*ii*UnitRemoval::InvE *mass*_rightSigma* ( -a1*p1p2b - a2*p0m3b + b2*e0m3 + b1*e1p2 ); } // return the wavefunction return SpinorWaveFunction(pout,out,s1,s2,s3,s4); } // evaluate an off-shell SpinorBar SpinorBarWaveFunction GeneralFFVVertex::evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec, complex mass, complex width) { // first calculate the couplings setCoupling(q2,out,sbar.particle(),vec.particle()); Complex ii(0.,1.); // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+vec.momentum(); // now evaluate the contribution // polarization components Complex e0p3=vec.t() + vec.z(); Complex e0m3=vec.t() - vec.z(); Complex e1p2=vec.x()+ii*vec.y(); Complex e1m2=vec.x()-ii*vec.y(); // overall factor Energy2 p2 = pout.m2(); Complex fact=-normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); complex p1p2=pout.x() + ii*pout.y(); complex p1m2=pout.x() - ii*pout.y(); complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); // complex numbers for the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); Complex a1 = fact*( sbar.s3()*e0p3+sbar.s4()*e1p2); Complex a2 = fact*( sbar.s3()*e1m2+sbar.s4()*e0m3); Complex a3 = fact*( sbar.s1()*e0m3-sbar.s2()*e1p2); Complex a4 = fact*(-sbar.s1()*e1m2+sbar.s2()*e0p3); complex p0p3b = vec. e() + vec.pz(); complex p0m3b = vec. e() - vec.pz(); complex p1p2b = vec.px() + ii*vec.py(); complex p1m2b = vec.px() - ii*vec.py(); complex b1 = fact*( sbar.s3()*p0p3b+sbar.s4()*p1p2b); complex b2 = fact*( sbar.s3()*p1m2b+sbar.s4()*p0m3b); complex b3 = fact*( sbar.s1()*p0m3b-sbar.s2()*p1p2b); complex b4 = fact*(-sbar.s1()*p1m2b+sbar.s2()*p0p3b); // left piece if(_left!=0.) { s1 += UnitRemoval::InvE*_left*a1*mass; s2 += UnitRemoval::InvE*_left*a2*mass; s3 += UnitRemoval::InvE*_left*(-p0m3*a1+p1p2*a2); s4 += UnitRemoval::InvE*_left*(+p1m2*a1-p0p3*a2); } // right piece if(_right!=0.) { s1 += UnitRemoval::InvE*_right*(-p0p3*a3-p1p2*a4); s2 += UnitRemoval::InvE*_right*(-p1m2*a3-p0m3*a4); s3 += UnitRemoval::InvE*_right*a3*mass; s4 += UnitRemoval::InvE*_right*a4*mass; } // left sigma piece if(_leftSigma!=0./GeV) { s1 += 0.5*ii*UnitRemoval::InvE*_leftSigma*mass* ( + a3*p0p3b + a4*p1p2b - b3*e0p3 - b4*e1p2); s2 += -0.5*ii*UnitRemoval::InvE*_leftSigma*mass* ( - a3*p1m2b - a4*p0m3b + b3*e1m2 + b4*e0m3); s3 += -0.5*ii*UnitRemoval::InvE*_leftSigma* (+p0m3*( + a3*p0p3b + a4*p1p2b - b3*e0p3 - b4*e1p2) +p1p2*( - a3*p1m2b - a4*p0m3b + b3*e1m2 + b4*e0m3)); s4 += +0.5*ii*UnitRemoval::InvE*_leftSigma* (+p1m2*( + a3*p0p3b + a4*p1p2b - b3*e0p3 - b4*e1p2) +p0p3*( - a3*p1m2b - a4*p0m3b + b3*e1m2 + b4*e0m3)); } // right sigma piece if(_rightSigma!=0./GeV) { s1 += +0.5*ii*UnitRemoval::InvE*_rightSigma* (+p0p3*( - a1*p0m3b + a2*p1p2b + b1*e0m3 - b2*e1p2) +p1p2*( + a1*p1m2b - a2*p0p3b - b1*e1m2 + b2*e0p3)); s2 += -0.5*ii*UnitRemoval::InvE*_rightSigma* (+p1m2*( + a1*p0m3b - a2*p1p2b - b1*e0m3 + b2*e1p2) +p0m3*( - a1*p1m2b + a2*p0p3b + b1*e1m2 - b2*e0p3)); s3 += -0.5*ii*UnitRemoval::InvE*_rightSigma*mass* ( - a1*p0m3b + a2*p1p2b + b1*e0m3 - b2*e1p2 ); s4 += 0.5*ii*UnitRemoval::InvE*_rightSigma*mass* ( - a1*p1m2b + a2*p0p3b + b1*e1m2 - b2*e0p3 ); } return SpinorBarWaveFunction(pout,out,s1,s2,s3,s4); } // off-shell vector VectorWaveFunction GeneralFFVVertex::evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, complex mass, complex width) { // first calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),out); Complex ii(0.,1.); // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+sp.momentum(); // overall factor Energy2 p2 = pout.m2(); Complex fact = normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); complex mass2 = sqr(mass); // the vector for the fermion-antifermion Complex vec[4]; complex p1p2=pout.x() + ii*pout.y(); complex p1m2=pout.x() - ii*pout.y(); complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); // left coupling if(_left!=0.) { vec[0] = -_left*(sbar.s3()*sp.s2()+sbar.s4()*sp.s1()); vec[1] = ii*_left*(sbar.s3()*sp.s2()-sbar.s4()*sp.s1()); vec[2] = -_left*(sbar.s3()*sp.s1()-sbar.s4()*sp.s2()); vec[3] = _left*(sbar.s3()*sp.s1()+sbar.s4()*sp.s2()); } // right coupling if(_right!=0.) { vec[0] += +_right*(sbar.s1()*sp.s4()+sbar.s2()*sp.s3()); vec[1] += -ii*_right*(sbar.s1()*sp.s4()-sbar.s2()*sp.s3()); vec[2] += +_right*(sbar.s1()*sp.s3()-sbar.s2()*sp.s4()); vec[3] += +_right*(sbar.s1()*sp.s3()+sbar.s2()*sp.s4()); } // left sigma if(_leftSigma==0./GeV) { vec[0] += -0.5*ii*_leftSigma* (+sp.s1()*sbar.s1()*(p1p2-p1m2)+2.*sp.s1()*sbar.s2()*p0p3 -sp.s2()*sbar.s2()*(p1p2-p1m2)+2.*sp.s2()*sbar.s1()*p0m3); vec[1] += -0.5 *_leftSigma* (+sp.s1()*sbar.s1()*(p1m2-p1p2)+2.*sp.s1()*sbar.s2()*p0p3 +sp.s2()*sbar.s2()*(p1p2+p1m2)-2.*sp.s2()*sbar.s1()*p0m3); vec[2] += -0.5*ii*_leftSigma* (+sp.s1()*sbar.s1()*(p0p3+p0m3)-2.*sp.s1()*sbar.s2()*p1p2 -sp.s2()*sbar.s2()*(p0p3+p0m3)+2.*sp.s2()*sbar.s1()*p1m2); vec[3] += 0.5*ii*_leftSigma* (-sp.s1()*sbar.s1()*(p0p3-p0m3)-2.*sp.s1()*sbar.s2()*p1p2 +sp.s2()*sbar.s2()*(p0p3-p0m3)-2.*sp.s2()*sbar.s1()*p1m2); } // right sigma if(_rightSigma==0./GeV) { vec[0] += 0.5*ii*_rightSigma* (-sp.s3()*sbar.s3()*(p1p2-p1m2)+2.*sp.s3()*sbar.s4()*p0m3 +sp.s4()*sbar.s4()*(p1p2-p1m2)+2.*sp.s4()*sbar.s3()*p0p3); vec[1] += 0.5* _rightSigma* (-sp.s3()*sbar.s3()*(p1p2+p1m2)-2.*sp.s3()*sbar.s4()*p0m3 +sp.s4()*sbar.s4()*(p1p2+p1m2)+2.*sp.s4()*sbar.s3()*p0p3); vec[2] += 0.5*ii*_rightSigma* (+sp.s3()*sbar.s3()*(p0p3+p0m3)+2.*sp.s3()*sbar.s4()*p1p2 -sp.s4()*sbar.s4()*(p0p3+p0m3)-2.*sp.s4()*sbar.s3()*p1m2); vec[3] += -0.5*ii*_rightSigma* (-sp.s3()*sbar.s3()*(p0p3-p0m3)-2.*sp.s3()*sbar.s4()*p1p2 +sp.s4()*sbar.s4()*(p0p3-p0m3)-2.*sp.s4()*sbar.s3()*p1m2); } // massless boson if(mass.real()==ZERO) { for(int ix=0;ix<4;++ix){vec[ix]*=fact;} } // massive boson else { complex dot = ( pout.e() *vec[3] -pout.x()*vec[0] -pout.y()*vec[1] -pout.z()*vec[2])/mass2; vec[0]=fact*(vec[0]-dot*pout.x()); vec[1]=fact*(vec[1]-dot*pout.y()); vec[2]=fact*(vec[2]-dot*pout.z()); vec[3]=fact*(vec[3]-dot*pout.e()); } return VectorWaveFunction(pout,out,vec[0],vec[1],vec[2],vec[3]); } thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVertex.fh0000644000175000017500000000044611747772425020642 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVVVertex class. // #ifndef ThePEG_VVVVertex_FH #define ThePEG_VVVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVVVertex; ThePEG_DECLARE_POINTERS(VVVVertex,VVVVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVVertex.cc0000644000175000017500000003076511754462254020761 0ustar sunsun// -*- C++ -*- // // VVVVVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVVVVertex class. // #include "VVVVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVVVVertex::initVVVVVertex; // Definition of the static class description member. void VVVVVertex::Init() { static ClassDocumentation documentation ("The VVVVVertex class is the implementation of the 4-vector vertex"); } // calculate the vertex Complex VVVVVertex::evaluate(Energy2 q2 , int iopt, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const VectorWaveFunction & vec4) { // workout the coupling setCoupling(q2,vec1.particle(),vec2.particle(), vec3.particle(),vec4.particle()); Complex vertex,ii(0.,1.); // calculate the vertex // QCD type vertex assert(_itype>=1&&_itype<=2); if(_itype==1) { // dot products we need Complex dotv1v2 = vec1.wave().dot(vec2.wave()); Complex dotv3v4 = vec3.wave().dot(vec4.wave()); Complex dotv1v4 = vec1.wave().dot(vec4.wave()); Complex dotv2v3 = vec3.wave().dot(vec2.wave()); // first the 4-point part of the vertex vertex = dotv1v2*dotv3v4-dotv1v4*dotv2v3; // now the virtual gluon exchange if needed if(iopt!=0) { // dot products Complex dotv1v3 = vec1.wave().dot(vec3.wave()); Complex dotv2v4 = vec4.wave().dot(vec2.wave()); complex dotv1p13 = vec1.wave().dot(2.*vec3.momentum() + vec1.momentum()); complex dotv2p24 = vec2.wave().dot(2.*vec4.momentum() + vec2.momentum()); complex dotv3p13 = vec3.wave().dot(2.*vec1.momentum() + vec3.momentum()); complex dotv4p24 = vec4.wave().dot(2.*vec2.momentum() + vec4.momentum()); LorentzPolarizationVectorE veca = dotv3p13*vec1.wave() - dotv1p13*vec3.wave() + dotv1v3*(vec3.momentum()-vec1.momentum()); LorentzPolarizationVectorE vecb = dotv4p24*vec2.wave() - dotv2p24*vec4.wave() + dotv2v4*(vec4.momentum()-vec2.momentum()); InvEnergy2 numerator = 1./(vec1.momentum()+vec3.momentum()).m2(); vertex += numerator*veca.dot(vecb); } } // EW type vertex else if(_itype==2) { Complex dotv1v2 = vec1.wave().dot(vec2.wave()); Complex dotv1v3 = vec1.wave().dot(vec3.wave()); Complex dotv1v4 = vec1.wave().dot(vec4.wave()); Complex dotv2v3 = vec2.wave().dot(vec3.wave()); Complex dotv2v4 = vec2.wave().dot(vec4.wave()); Complex dotv3v4 = vec3.wave().dot(vec4.wave()); // evaluate the vertex // need to sort the order out here if(( _iorder[0]==0 && _iorder[1]==1 && _iorder[2]==2 && _iorder[3]==3)|| ( _iorder[0]==1 && _iorder[1]==0 && _iorder[2]==2 && _iorder[3]==3)|| ( _iorder[0]==0 && _iorder[1]==1 && _iorder[2]==3 && _iorder[3]==2)|| ( _iorder[0]==1 && _iorder[1]==0 && _iorder[2]==3 && _iorder[3]==2)|| ( _iorder[0]==2 && _iorder[1]==3 && _iorder[2]==0 && _iorder[3]==1)|| ( _iorder[0]==2 && _iorder[1]==3 && _iorder[2]==1 && _iorder[3]==0)|| ( _iorder[0]==3 && _iorder[1]==2 && _iorder[2]==0 && _iorder[3]==1)|| ( _iorder[0]==3 && _iorder[1]==2 && _iorder[2]==1 && _iorder[3]==0)) { // contact term vertex = 2.*dotv1v2*dotv3v4-dotv1v3*dotv2v4-dotv1v4*dotv2v3; // now for the u- and t-channel terms if needed if(iopt!=0) { // dot products of momenta and wavefunction complex dotv1p13 = +vec1.wave().dot(vec1.momentum() + 2.*vec3.momentum() ); complex dotv1p14 = +vec1.wave().dot(vec1.momentum() + 2.*vec4.momentum() ); complex dotv2p23 = +vec2.wave().dot(vec2.momentum() + 2.*vec3.momentum() ); complex dotv2p24 = +vec2.wave().dot(vec2.momentum() + 2.*vec4.momentum() ); complex dotv3p31 = +vec3.wave().dot(vec3.momentum() + 2.*vec1.momentum() ); complex dotv3p32 = +vec3.wave().dot(vec3.momentum() + 2.*vec2.momentum() ); complex dotv4p41 = +vec4.wave().dot(vec4.momentum() + 2.*vec1.momentum() ); complex dotv4p42 = +vec4.wave().dot(vec4.momentum() + 2.*vec2.momentum() ); LorentzPolarizationVectorE ja = (vec3.momentum()-vec1.momentum())*dotv1v3 +dotv3p31*vec1.wave()-dotv1p13*vec3.wave(); LorentzPolarizationVectorE jb = (vec4.momentum()-vec2.momentum())*dotv2v4 +dotv4p42*vec2.wave()-dotv2p24*vec4.wave(); LorentzPolarizationVectorE jc = (vec4.momentum()-vec1.momentum())*dotv1v4 +dotv4p41*vec1.wave()-dotv1p14*vec4.wave(); LorentzPolarizationVectorE jd = (vec3.momentum()-vec2.momentum())*dotv2v3 +dotv3p32*vec2.wave()-dotv2p23*vec3.wave(); // dot products of these vectors complex dotjajb = ja.dot(jb); complex dotjcjd = jc.dot(jd); complex dotjaq = ja.dot(vec1.momentum()+vec3.momentum()); complex dotjbq = jb.dot(vec1.momentum()+vec3.momentum()); complex dotjck = jc.dot(vec1.momentum()+vec4.momentum()); complex dotjdk = jd.dot(vec1.momentum()+vec4.momentum()); Energy2 q2 = (vec1.momentum()+vec3.momentum()).m2(); Energy2 k2 = (vec1.momentum()+vec4.momentum()).m2(); // compute the term we need Energy2 mass2; for(int ix=0;ix<2;++ix) { if(_inter[ix]) { mass2 = sqr(_inter[ix]->mass()); if(mass2!=Energy2()) { vertex += UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,q2,_inter[ix])* (dotjajb-dotjaq*dotjbq/mass2); vertex += UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,k2,_inter[ix])* (dotjcjd-dotjck*dotjdk/mass2); } else { vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,q2,_inter[ix])*dotjajb; vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,k2,_inter[ix])*dotjcjd; } } } } } else if(( _iorder[0]==0 && _iorder[1]==2 && _iorder[2]==1 && _iorder[3]==3)|| ( _iorder[0]==2 && _iorder[1]==0 && _iorder[2]==1 && _iorder[3]==3)|| ( _iorder[0]==0 && _iorder[1]==2 && _iorder[2]==3 && _iorder[3]==1)|| ( _iorder[0]==2 && _iorder[1]==0 && _iorder[2]==3 && _iorder[3]==1)|| ( _iorder[0]==1 && _iorder[1]==3 && _iorder[2]==0 && _iorder[3]==2)|| ( _iorder[0]==1 && _iorder[1]==3 && _iorder[2]==2 && _iorder[3]==0)|| ( _iorder[0]==3 && _iorder[1]==1 && _iorder[2]==0 && _iorder[3]==2)|| ( _iorder[0]==3 && _iorder[1]==1 && _iorder[2]==2 && _iorder[3]==0)) { // contact term vertex = 2.*dotv1v3*dotv2v4-dotv1v2*dotv3v4-dotv1v4*dotv2v3; // now for the u- and t-channel terms if needed if(iopt!=0) { // dot products of momenta and wavefunction complex dotv1p12 = vec1.wave().dot(vec1.momentum() + 2.*vec2.momentum() ); complex dotv1p14 = vec1.wave().dot(vec1.momentum() + 2.*vec4.momentum() ); complex dotv3p32 = vec3.wave().dot(vec3.momentum() + 2.*vec2.momentum() ); complex dotv3p34 = vec3.wave().dot(vec3.momentum() + 2.*vec4.momentum() ); complex dotv2p21 = vec2.wave().dot(vec2.momentum() + 2.*vec1.momentum() ); complex dotv2p23 = vec2.wave().dot(vec2.momentum() + 2.*vec3.momentum() ); complex dotv4p41 = vec4.wave().dot(vec4.momentum() + 2.*vec1.momentum() ); complex dotv4p43 = vec4.wave().dot(vec4.momentum() + 2.*vec3.momentum() ); LorentzPolarizationVectorE ja = (vec2.momentum() - vec1.momentum() )*dotv1v2 + dotv2p21*vec1.wave() - dotv1p12*vec2.wave(); LorentzPolarizationVectorE jb = (vec4.momentum() - vec3.momentum())*dotv3v4 + dotv4p43*vec3.wave() - dotv3p34*vec4.wave(); LorentzPolarizationVectorE jc = (vec4.momentum() - vec1.momentum())*dotv1v4 + dotv4p41*vec1.wave() - dotv1p14*vec4.wave(); LorentzPolarizationVectorE jd = (vec2.momentum() - vec3.momentum())*dotv2v3 + dotv2p23*vec3.wave() - dotv3p32*vec2.wave(); // dot products of these vectors complex dotjajb = ja.dot(jb); complex dotjcjd = jc.dot(jd); complex dotjaq = ja.dot(vec1.momentum()+vec2.momentum()); complex dotjbq = jb.dot(vec1.momentum()+vec2.momentum()); complex dotjck = jc.dot(vec1.momentum()+vec4.momentum()); complex dotjdk = jd.dot(vec1.momentum()+vec4.momentum()); Energy2 q2 = (vec1.momentum()+vec2.momentum()).m2(); Energy2 k2 = (vec1.momentum()+vec4.momentum()).m2(); // compute the term we need Energy2 mass2; for(int ix=0;ix<2;++ix) { if(_inter[ix]) { mass2 = (_inter[ix]->mass())*(_inter[ix]->mass()); if(mass2!=Energy2()) { vertex+=UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,q2,_inter[ix])* (dotjajb-dotjaq*dotjbq/mass2); vertex+=UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,k2,_inter[ix])* (dotjcjd-dotjck*dotjdk/mass2); } else { vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,q2,_inter[ix])*dotjajb; vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,k2,_inter[ix])*dotjcjd; } } } } } else if(( _iorder[0]==0 && _iorder[1]==3 && _iorder[2]==1 && _iorder[3]==2)|| ( _iorder[0]==3 && _iorder[1]==0 && _iorder[2]==1 && _iorder[3]==2)|| ( _iorder[0]==0 && _iorder[1]==3 && _iorder[2]==2 && _iorder[3]==1)|| ( _iorder[0]==3 && _iorder[1]==0 && _iorder[2]==2 && _iorder[3]==1)|| ( _iorder[0]==1 && _iorder[1]==2 && _iorder[2]==0 && _iorder[3]==3)|| ( _iorder[0]==2 && _iorder[1]==1 && _iorder[2]==0 && _iorder[3]==3)|| ( _iorder[0]==1 && _iorder[1]==2 && _iorder[2]==3 && _iorder[3]==0)|| ( _iorder[0]==2 && _iorder[1]==1 && _iorder[2]==3 && _iorder[3]==0)) { // contact term vertex = 2.*dotv1v4*dotv2v3-dotv1v3*dotv2v4-dotv1v2*dotv3v4; // now for the u- and t-channel terms if needed if(iopt!=0) { // dot products of momenta and wavefunction complex dotv1p12 = vec1.wave().dot(vec1.momentum() + 2.*vec2.momentum() ); complex dotv1p13 = vec1.wave().dot(vec1.momentum() + 2.*vec3.momentum() ); complex dotv2p24 = vec2.wave().dot(vec2.momentum() + 2.*vec4.momentum() ); complex dotv2p21 = vec2.wave().dot(vec2.momentum() + 2.*vec1.momentum() ); complex dotv3p31 = vec3.wave().dot(vec3.momentum() + 2.*vec1.momentum() ); complex dotv3p34 = vec3.wave().dot(vec3.momentum() + 2.*vec4.momentum() ); complex dotv4p43 = vec4.wave().dot(vec4.momentum() + 2.*vec3.momentum() ); complex dotv4p42 = vec4.wave().dot(vec4.momentum() + 2.*vec2.momentum() ); LorentzPolarizationVectorE ja = (vec2.momentum()-vec1.momentum())*dotv1v2 +dotv2p21*vec1.wave()-dotv1p12*vec2.wave(); LorentzPolarizationVectorE jb = (vec3.momentum()-vec4.momentum())*dotv3v4 +dotv3p34*vec4.wave()-dotv4p43*vec3.wave(); LorentzPolarizationVectorE jc = (vec3.momentum()-vec1.momentum())*dotv1v3 +dotv3p31*vec1.wave()-dotv1p13*vec3.wave(); LorentzPolarizationVectorE jd = (vec2.momentum()-vec4.momentum())*dotv2v4 +dotv2p24*vec4.wave()-dotv4p42*vec2.wave(); // dot products of these vectors complex dotjajb = ja.dot(jb); complex dotjcjd = jc.dot(jd); complex dotjaq = ja.dot(vec1.momentum()+vec2.momentum()); complex dotjbq = jb.dot(vec1.momentum()+vec2.momentum()); complex dotjck = jc.dot(vec1.momentum()+vec3.momentum()); complex dotjdk = jd.dot(vec1.momentum()+vec3.momentum()); Energy2 q2 = (vec1.momentum()+vec2.momentum()).m2(); Energy2 k2 = (vec1.momentum()+vec3.momentum()).m2(); // compute the term we need Energy2 mass2; for(int ix=0;ix<2;++ix) { if(_inter[ix]) { mass2 = sqr(_inter[ix]->mass()); if(mass2!=Energy2()) { vertex+=UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,q2,_inter[ix])* (dotjajb-dotjaq*dotjbq/mass2); vertex+=UnitRemoval::InvE2 * _coup[ix]*propagator(iopt,k2,_inter[ix])* (dotjcjd-dotjck*dotjdk/mass2); } else { vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,q2,_inter[ix])*dotjajb; vertex+=UnitRemoval::InvE2 *_coup[ix]* propagator(iopt,k2,_inter[ix])*dotjcjd; } } } } } else throw HelicityConsistencyError() << "Unknown order of particles in " << "VVVVVertex::evaluate()" << Exception::runerror; } // return the answer return -ii*norm()*vertex; } thepeg-1.8.0.orig/Helicity/Vertex/Vector/VVVVVertex.h0000644000175000017500000001205211747772425020616 0ustar sunsun// -*- C++ -*- // // VVVVVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVVVVertex_H #define ThePEG_VVVVVertex_H // // This is the declaration of the VVVVVertex class. #include "ThePEG/Helicity/Vertex/AbstractVVVVVertex.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "VVVVVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * This is the implementation of the four vector vertex. * It is based on the AbstractVVVVVertex class for the storage of particles * which are allowed to interact at the vertex. * Classes implementation a specific vertex should inherit from this * one and implement the virtual setCoupling member. * * The form of the vertex is * \f[ic^2\left[ * 2\epsilon_1\cdot\epsilon_2\epsilon_3\cdot\epsilon_4- * \epsilon_1\cdot\epsilon_3\epsilon_2\cdot\epsilon_4- * \epsilon_1\cdot\epsilon_4\epsilon_2\cdot\epsilon_3 * \right]\f] * optional the additional diagrams from the three point vertices can be included. * * @see AbstractVVVVVertex */ class VVVVVertex: public AbstractVVVVVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Evaluation option, 0 just evaluate the four point vertex, 1 * include all the three point diagrams as well. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param vec4 The wavefunction for the fourth vector. */ Complex evaluate(Energy2 q2, int iopt, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const VectorWaveFunction & vec4); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4)=0; protected: /** * Set the order of the particles. * @param id1 The PDG code of the first particle. * @param id2 The PDG code of the second particle. * @param id3 The PDG code of the third particle. * @param id4 The PDG code of the fourth particle. */ void setOrder(int id1,int id2,int id3,int id4) { _iorder[0]=id1; _iorder[1]=id2; _iorder[2]=id3; _iorder[3]=id4; } /** * Set the type of the vertex. * @param itype The type of vertex (QCD=1 or electroweak=2). */ void setType(int itype) { _itype=itype; } /** * Set the intermediate particles if including s/u/t channel terms. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param c1 The coupling for the first particle. * @param c2 The coupling for the second particle. */ void setIntermediate(tcPDPtr part1,tcPDPtr part2,Complex c1,Complex c2) { _inter[0]=part1; _inter[1]=part2; _coup[0]=c1; _coup[1]=c2; } private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initVVVVVertex; /** * Private and non-existent assignment operator. */ VVVVVertex & operator=(const VVVVVertex &); private: /** * Type of vertex 1=QCD 2=EW. */ int _itype; /** * Order of the particles. */ int _iorder[4]; /** * Intermediate particles */ tcPDPtr _inter[2]; /** * Couplings of the intermediate particles. */ Complex _coup[2]; }; } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVVVVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVVVVertex. */ typedef ThePEG::Helicity::AbstractVVVVVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVVVVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVVVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Vector/FFVVertex.cc0000644000175000017500000004211611747772425020572 0ustar sunsun// -*- C++ -*- // // FFVVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FFVVertex class. // #include "FFVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; // Definition of the static class description member AbstractNoPIOClassDescription FFVVertex::initFFVVertex; void FFVVertex::Init() { static ClassDocumentation documentation ("The FFVVertex class implements the helicity amplitude" "calculations for a fermion-fantifermion gauge boson vertex. Any " "implementation of such a vertex should inherit from in and implement" " the virtual setCoupling member to calculate the coupling"); } // evalulate the full vertex Complex FFVVertex::evaluate(Energy2 q2, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec) { // first calculate the couplings if(kinematics()) calculateKinematics(sp.momentum(),sbar.momentum(),vec.momentum()); setCoupling(q2,sp.particle(),sbar.particle(),vec.particle()); Complex ii(0.,1.); // useful combinations of the polarization vector components Complex e0p3=vec.t()+vec.z(); Complex e0m3=vec.t()-vec.z(); Complex e1p2=vec.x()+ii*vec.y(); Complex e1m2=vec.x()-ii*vec.y(); Complex vertex(0.); if(_left!=0.) { vertex += _left*(+sbar.s3()*(sp.s1()*e0p3+sp.s2()*e1m2) +sbar.s4()*(sp.s1()*e1p2+sp.s2()*e0m3)); } // then the right piece (often not needed eg W vertex) if(_right!=0.) { vertex += _right*(+sbar.s1()*(sp.s3()*e0m3-sp.s4()*e1m2) -sbar.s2()*(sp.s3()*e1p2-sp.s4()*e0p3)); } vertex*=ii; return vertex*norm(); } // evaluate an off-shell spinor SpinorWaveFunction FFVVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const SpinorWaveFunction & sp, const VectorWaveFunction &vec, complex mass, complex width) { // extract the pointers to the particle data objects tcPDPtr Psp=sp.particle(); tcPDPtr Pvec=vec.particle(); // work out the momentum of the off-shell particle Lorentz5Momentum pout = sp.momentum()+vec.momentum(); // first calculate the couplings if(kinematics()) calculateKinematics(sp.momentum(),pout,vec.momentum()); setCoupling(q2,Psp,out,Pvec); Complex ii(0.,1.); // now evaluate the contribution // polarization components Complex e0p3 = vec.t() + vec.z(); Complex e0m3 = vec.t() - vec.z(); Complex e1p2 = vec.x()+ii*vec.y(); Complex e1m2 = vec.x()-ii*vec.y(); // overall factor Energy2 p2 = pout.m2(); Complex fact=-normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = iopt==5 ? ZERO : out->mass(); complex p1p2 = pout.x()+ii*pout.y(); complex p1m2 = pout.x()-ii*pout.y(); // complex nos for for the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); LorentzSpinor spt =sp .wave(); complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); // left piece if(_left!=0.) { Complex a3=_left*fact*( spt.s1()*e0p3+spt.s2()*e1m2); Complex a4=_left*fact*( spt.s1()*e1p2+spt.s2()*e0m3); s1 +=UnitRemoval::InvE * (p0m3*a3-p1m2*a4); s2 +=UnitRemoval::InvE * (-p1p2*a3+p0p3*a4); s3 +=UnitRemoval::InvE * a3*mass; s4 +=UnitRemoval::InvE * a4*mass; } // right piece if(_right!=0.) { Complex a1=_right*fact*( spt.s3()*e0m3-spt.s4()*e1m2); Complex a2=_right*fact*(-spt.s3()*e1p2+spt.s4()*e0p3); s1 +=UnitRemoval::InvE * a1*mass; s2 +=UnitRemoval::InvE * a2*mass; s3 +=UnitRemoval::InvE * (p0p3*a1+p1m2*a2); s4 +=UnitRemoval::InvE * (p1p2*a1+p0m3*a2); } // return the wavefunction return SpinorWaveFunction(pout,out,s1,s2,s3,s4); } // evaluate an off-shell SpinorBar SpinorBarWaveFunction FFVVertex::evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec, complex mass, complex width) { // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+vec.momentum(); // first calculate the couplings if(kinematics()) calculateKinematics(pout,sbar.momentum(),vec.momentum()); setCoupling(q2,out,sbar.particle(),vec.particle()); Complex ii(0.,1.); // now evaluate the contribution // polarization components Complex e0p3=vec.t() + vec.z(); Complex e0m3=vec.t() - vec.z(); Complex e1p2=vec.x()+ii*vec.y(); Complex e1m2=vec.x()-ii*vec.y(); // overall factor Energy2 p2 = pout.m2(); Complex fact=-normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); complex p1p2=pout.x()+ii*pout.y(); complex p1m2=pout.x()-ii*pout.y(); // complex numbers for the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); LorentzSpinorBar sbart=sbar.wave(); Energy p0p3=pout.e() + pout.z(); Energy p0m3=pout.e() - pout.z(); // left piece if(_left!=0.) { Complex a1 = _left*fact*( sbart.s3()*e0p3+sbart.s4()*e1p2); Complex a2 = _left*fact*( sbart.s3()*e1m2+sbart.s4()*e0m3); s1 += UnitRemoval::InvE*a1*mass; s2 += UnitRemoval::InvE*a2*mass; s3 += UnitRemoval::InvE*(-p0m3*a1+p1p2*a2); s4 += UnitRemoval::InvE*(+p1m2*a1-p0p3*a2); } // right piece if(_right!=0.) { Complex a3 = _right*fact*( sbart.s1()*e0m3-sbart.s2()*e1p2); Complex a4 = _right*fact*(-sbart.s1()*e1m2+sbart.s2()*e0p3); s1 += UnitRemoval::InvE*(-p0p3*a3-p1p2*a4); s2 += UnitRemoval::InvE*(-p1m2*a3-p0m3*a4); s3 += UnitRemoval::InvE*a3*mass; s4 += UnitRemoval::InvE*a4*mass; } return SpinorBarWaveFunction(pout,out,s1,s2,s3,s4); } // off-shell vector VectorWaveFunction FFVVertex::evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, complex mass, complex width) { // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+sp.momentum(); // first calculate the couplings if(kinematics()) calculateKinematics(sp.momentum(),sbar.momentum(),pout); setCoupling(q2,sp.particle(),sbar.particle(),out); Complex ii(0.,1.); // overall factor Energy2 p2 = pout.m2(); Complex fact = normPropagator(iopt,p2,out,mass,width); // momentum components if(mass.real() < ZERO) mass = (iopt==5) ? ZERO : out->mass(); complex mass2 = sqr(mass); // the vector for the fermion-antifermion Complex vec[4]; // left coupling if(_left!=0.) { vec[0] = -_left*(sbar.s3()*sp.s2()+sbar.s4()*sp.s1()); vec[1] = ii*_left*(sbar.s3()*sp.s2()-sbar.s4()*sp.s1()); vec[2] = -_left*(sbar.s3()*sp.s1()-sbar.s4()*sp.s2()); vec[3] = _left*(sbar.s3()*sp.s1()+sbar.s4()*sp.s2()); } // right coupling if(_right!=0.) { vec[0] += +_right*(sbar.s1()*sp.s4()+sbar.s2()*sp.s3()); vec[1] += -ii*_right*(sbar.s1()*sp.s4()-sbar.s2()*sp.s3()); vec[2] += +_right*(sbar.s1()*sp.s3()-sbar.s2()*sp.s4()); vec[3] += +_right*(sbar.s1()*sp.s3()+sbar.s2()*sp.s4()); } // massless boson if(mass.real()==ZERO) { for(int ix=0;ix<4;++ix){vec[ix]*=fact;} } // massive boson else { complex dot = ( pout.e() *vec[3] -pout.x()*vec[0] -pout.y()*vec[1] -pout.z()*vec[2])/mass2; vec[0]=fact*(vec[0]-dot*pout.x()); vec[1]=fact*(vec[1]-dot*pout.y()); vec[2]=fact*(vec[2]-dot*pout.z()); vec[3]=fact*(vec[3]-dot*pout.e()); } return VectorWaveFunction(pout,out,vec[0],vec[1],vec[2],vec[3]); } SpinorWaveFunction FFVVertex::evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp, const VectorWaveFunction & vec, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal, SmallAngleDirection direction, Energy mass, Energy) { assert(fhel <= 1); assert( vhel == 0 || vhel == 2 ); SpinorWaveFunction output; // first calculate the couplings setCoupling(q2,sp.particle(),out,vec.particle()); Complex ii(0.,1.); if(mass < ZERO) mass = iopt==5 ? ZERO : out->mass(); Lorentz5Momentum pout = sp.momentum()+vec.momentum(); assert(sp.direction()!=intermediate); // helicity of the boson double lam = double(vhel)-1.; // energy of the boson Energy Eg = abs(vec.momentum().e()); // energy of the fermion Energy Ef = abs(sp .momentum().e()); // energy fraction of photon double x = Eg/Ef; // velocity of the fermon double beta = sqrt(1.-sqr(mass/Ef)); // dimensionless versions of the variables double dm = mass*UnitRemoval::InvE; double dEf = Ef*UnitRemoval::InvE; double rE = sqrt(.5*dEf); // calculation of propagator accurate as beta->1 and theta -> 0 Energy2 dot = 2.*Ef*Eg*(sqr(mass/Ef)/(1.+beta)*ctheta + sqr(stheta)/(1.+ctheta) ); Complex fact= norm()*(0.5*left()+0.5*right())*UnitRemoval::E2/dot; // phase factor Complex ephig = cos(phi )+ii*sin(phi ); // calculation of the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); // u-type spinor if(sp.wave().Type()==u_spinortype) { // fermion along +z if(direction==PostiveZDirection) { if(fhel==0) { s1 = +x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s2 =-rE*dEf*sqrt(1.+beta)*stheta* (+x*(1.+lam)-(includeEikonal ? 2.*beta*lam : 0. )); s3 = +x*rE*dm/ephig*(lam-1.)*(1.+ctheta)/sqrt(1.+beta); s4 = +rE*dm/sqrt(1.+beta)*stheta* (-x*(1.-lam)+(includeEikonal ? 2.*beta*lam : 0. )); } else if(fhel==1) { s1 = +rE*dm/sqrt(1.+beta)*stheta* (+x*(1.+lam)+(includeEikonal ? 2.*beta*lam : 0. )); s2 = -x*rE*dm*ephig*(lam+1.)*(1.+ctheta)/sqrt(1.+beta); s3 = -rE*dEf*sqrt(1.+beta)*stheta* (-x*(1.-lam)-(includeEikonal ? 2.*beta*lam : 0. )); s4 = -x*rE*dEf*sqrt(1.+beta)*ephig*(lam-1.)*sqr(stheta)/(1.+ctheta); } } // fermion along -z else { if(fhel==0) { s1 = -rE*dEf*sqrt(1.+beta)*stheta* (+x*(1.+lam)-(includeEikonal ? 2.*beta*lam : 0. )); s2 = -x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s3 = rE*dm/sqrt(1.+beta)*stheta* (-x*(1.-lam)+(includeEikonal ? 2.*beta*lam : 0. )); s4 = -x*rE*dm/ephig*(-1.+lam)*(1.+ctheta)/sqrt(1.+beta); } else if(fhel==1) { s1 =-x*rE*dm*ephig*(1.+lam)*(1.+ctheta)/sqrt(1.+beta); s2 =-rE*dm/sqrt(1.+beta)*stheta* ( x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0. )); s3 = x*rE*dEf*sqrt(1.+beta)*ephig*(1.-lam)*sqr(stheta)/(1.+ctheta); s4 =-rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); } } } // v-type spinor else if(sp.wave().Type()==v_spinortype) { // fermion along +z if(direction==PostiveZDirection) { if(fhel==0) { s1 = rE*dm/sqrt(1.+beta)*stheta* (-x*(1.+lam) + ( includeEikonal ? 2.*beta*lam : 0. )); s2 = x*rE*dm*ephig*(lam+1.)*(1.+ctheta)/sqrt(1.+beta); s3 = rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) - ( includeEikonal ? 2.*beta*lam : 0. )); s4 = x*rE*dEf*sqrt(1.+beta)*ephig*(1.-lam)*sqr(stheta)/(1.+ctheta); } else if(fhel==1) { s1 = x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s2 =-rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0.)); s3 = x*rE*dm/ephig*(1.-lam)*(1.+ctheta)/sqrt(1.+beta); s4 = rE*dm/sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); } } // fermion aling -z else { if(fhel==0) { s1 = x*rE*dm*ephig*(1.+lam)*(1.+ctheta)/sqrt(1.+beta); s2 = rE*dm/sqrt(1.+beta)*stheta* ( x*(1.+lam) - ( includeEikonal ? 2.*beta*lam : 0. )); s3 = x*rE*dEf*sqrt(1.+beta)*ephig*(1.-lam)*sqr(stheta) / (1.+ctheta); s4 =-rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) - ( includeEikonal ? 2.*beta*lam : 0. )); } else if(fhel==1) { s1 =-rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.+lam) + ( includeEikonal ? 2.*beta*lam : 0. )); s2 =-x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s3 = rE*dm/sqrt(1.+beta)*stheta* ( x*(1.-lam) + ( includeEikonal ? 2.*beta*lam : 0. )); s4 =-x*rE*dm/ephig*(1.-lam)*(1.+ctheta)/sqrt(1.+beta); } } } s1 *= -fact; s2 *= -fact; s3 *= -fact; s4 *= -fact; return SpinorWaveFunction(pout,out,s1,s2,s3,s4); } SpinorBarWaveFunction FFVVertex::evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal, SmallAngleDirection direction, Energy mass, Energy) { assert(fhel <= 1); assert( vhel == 0 || vhel == 2 ); SpinorBarWaveFunction output; // first calculate the couplings setCoupling(q2,out,sbar.particle(),vec.particle()); Complex ii(0.,1.); if(mass < ZERO) mass = iopt==5 ? ZERO : out->mass(); Lorentz5Momentum pout = sbar.momentum()+vec.momentum(); assert(sbar.direction()!=intermediate); // helicity of the boson double lam = double(vhel)-1.; // energies and velocities Energy Ef = abs(sbar.momentum().e()); Energy Eg = abs(vec .momentum().e()); double x = Eg/Ef; double beta = sqrt(1.-sqr(mass/Ef)); // calculation of propagator accurate as beta->1 and theta -> 0 Energy2 dot = 2.*Ef*Eg*(sqr(mass/Ef)/(1.+beta)*ctheta + sqr(stheta)/(1.+ctheta) ); Complex fact= norm()*(0.5*left()+0.5*right())*UnitRemoval::E2/dot; // calculation of the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); Complex ephig = cos(phi )+ii*sin(phi ); double dm = mass*UnitRemoval::InvE; double dEf = Ef*UnitRemoval::InvE; double rE = sqrt(.5*dEf); // u-type spinor if(sbar.wave().Type()==u_spinortype) { // fermion along +z if(direction==PostiveZDirection) { if(fhel==0) { s1 = x*rE*dm*ephig*(1.+lam)*(1.+ctheta)/sqrt(1.+beta); s2 = rE*dm/sqrt(1.+beta)*stheta* (+x*(1.+lam) - (includeEikonal ? 2.*beta*lam : 0. )); s3 = -x*rE*dEf*sqrt(1.+beta)*ephig*(1.-lam)*sqr(stheta)/(1.+ctheta); s4 = rE*dEf*sqrt(1.+beta)*stheta* (+x*(1.-lam) - (includeEikonal ? 2.*beta*lam : 0. )); } else if(fhel==1) { s1 = -rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0. )); s2 = -x*rE*dEf*sqrt(1.+beta)/ephig*(lam+1.)*sqr(stheta)/(1.+ctheta); s3 =-rE*dm/sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); s4 = -x*rE*dm/ephig*(lam-1.)*(1.+ctheta)/sqrt(1.+beta); s4 = rE*dm*(1.+ctheta)/ephig*x*(1.-lam)/sqrt(1.+beta); } } // fermion aling -z else { if(fhel==0) { s1 = rE*dm/sqrt(1.+beta)*stheta* (+x*(1.+lam) - (includeEikonal ? 2.*beta*lam : 0. )); s2 = -x*rE*dm*ephig*(1.+lam)*(1.+ctheta)/sqrt(1.+beta); s3 = rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) - (includeEikonal ? 2.*beta*lam : 0. )); s4 = -x*rE*dEf*sqrt(1.+beta)*ephig*(lam-1.)*sqr(stheta)/(1.+ctheta); } else if(fhel==1) { s1 = -x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s2 = rE*dEf*sqrt(1.+beta)*stheta* (+x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0. )); s3 =-x*rE*dm/ephig*(lam-1.)*(1.+ctheta)/sqrt(1.+beta); s4 = rE*dm/sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); } } } // v-type spinor else if(sbar.wave().Type()==v_spinortype) { // anti fermion along +z if(direction==PostiveZDirection) { if(fhel==0) { s1 = -rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.+lam) - (includeEikonal ? 2.*beta*lam : 0. )); s2 = -x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s3 = rE*dm/sqrt(1.+beta)*stheta* ( x*(1.-lam) - (includeEikonal ? 2.*beta*lam : 0. )); s4 =-x*rE*dm/ephig*(1.-lam)*(1.+ctheta)/sqrt(1.+beta); } else if(fhel==1) { s1 =-x*rE*dm*ephig*(1.+lam)*(1.+ctheta)/sqrt(1.+beta); s2 =-rE*dm/sqrt(1.+beta)*stheta* ( x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0. )); s3 =-x*rE*dEf*sqrt(1.+beta)*ephig*(1.-lam)*sqr(stheta)/(1.+ctheta); s4 = rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); } } // anti fermion aling -z else { if(fhel==0) { s1 = -x*rE*dEf*sqrt(1.+beta)/ephig*(1.+lam)*sqr(stheta)/(1.+ctheta); s2 = rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.+lam) - (includeEikonal ? 2.*beta*lam : 0. )); s3 = x*rE*dm/ephig*(-1.+lam)*(1.+ctheta)/sqrt(1.+beta); s4 =-rE*dm/sqrt(1.+beta)*stheta* (+x*(1.-lam) - (includeEikonal ? 2.*beta*lam : 0. )); } else if(fhel==1) { s1 =-rE*dm/sqrt(1.+beta)*stheta* ( x*(1.+lam) + (includeEikonal ? 2.*beta*lam : 0. )); s2 = x*rE*dm*ephig*(lam+1.)*(1.+ctheta)/sqrt(1.+beta); s3 = rE*dEf*sqrt(1.+beta)*stheta* ( x*(1.-lam) + (includeEikonal ? 2.*beta*lam : 0. )); s4 =-x*rE*dEf*sqrt(1.+beta)*ephig*(lam-1.)*sqr(stheta)/(1.+ctheta); } } } s1 *= -fact; s2 *= -fact; s3 *= -fact; s4 *= -fact; return SpinorBarWaveFunction(pout,out,s1,s2,s3,s4); } thepeg-1.8.0.orig/Helicity/Vertex/Vector/FFVVertex.h0000644000175000017500000002323211747772425020432 0ustar sunsun// -*- C++ -*- // // FFVVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FFVVertex_H #define ThePEG_FFVVertex_H // // This is the declaration of the FFVVertex class. #include #include #include #include #include "FFVVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The FFVVertex class is the base class for all helicity amplitude * vertices which use the renormalisable form for the * fermion-fermion-vector vertex. * * Any such vertices should inherit from this class and implement the virtual * setcoupling member function. The base AbstractFFVVertex class is used to store the * particles allowed to interact at the vertex. * * The form of the vertex is * \f[ic\bar{f_2}\gamma^\mu a^\lambda P_\lambda f_1\epsilon_{3\mu}\f] * * @see AbstractFFVVertex */ class FFVVertex: public AbstractFFVVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); //@} /** * Special members for off-shell fermion wavefunctions with massless * gauge bosons at small angles in the small angle limit for * numerical accuracy. In order to get sufficient accuracy it is * assumed that the fermion lies along either the positive or negative z * axis. */ //@{ /** Small angle approx for an off-shell spinor * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param fhel Helicity of the fermion * @param vhel Helicity of the vector * @param ctheta The cosine of the * polar angle of the photon with respect to the fermion * @param phi The azimuthal angle of the photon with respect to the fermion * @param stheta The sine of the * polar angle of the photon with respect to the fermion * @param includeEikonal Whether or not to include the eikonal piece * @param direction Whether fermion along + or - z direction * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal = true, SmallAngleDirection direction = PostiveZDirection, Energy mass=-GeV, Energy width=-GeV); /** Small angle approx for an off-shell spinor * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param fhel Helicity of the fermion * @param vhel Helicity of the vector * @param ctheta The cosine of the * polar angle of the photon with respect to the fermion * @param phi The azimuthal angle of the photon with respect to the fermion * @param stheta The sine of the * polar angle of the photon with respect to the fermion * @param includeEikonal Whether or not to include the eikonal piece * @param direction Whether fermion along + or - z direction * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal = true, SmallAngleDirection direction = PostiveZDirection, Energy mass=-GeV, Energy width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; /** * Get the Couplings */ //@{ /** * Get the left coupling. */ const Complex & left() const { return _left; } /** * Get the right coupling. */ const Complex & right() const { return _right; } //@} protected: /** * Set the couplings */ //@{ /** * Set the left coupling. */ void left(const Complex & in) { _left = in; } /** * Set the right coupling. */ void right(const Complex & in) { _right = in; } //@} private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initFFVVertex; /** * Private and non-existent assignment operator. */ FFVVertex & operator=(const FFVVertex &); private: /** * Left coupling. */ Complex _left; /** * Right coupling. */ Complex _right; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of FFVVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of FFVVertex. */ typedef ThePEG::Helicity::AbstractFFVVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::FFVVertex"; } }; /** @endcond */ } #endif /* ThePEG_FFVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Vector/Makefile.in0000644000175000017500000004434511756366734020521 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Helicity/Vertex/Vector DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGVVertex_la_LIBADD = am_libThePEGVVertex_la_OBJECTS = FFVVertex.lo GeneralFFVVertex.lo \ VVVVertex.lo VVVVVertex.lo RFVVertex.lo libThePEGVVertex_la_OBJECTS = $(am_libThePEGVVertex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGVVertex_la_SOURCES) DIST_SOURCES = $(libThePEGVVertex_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libThePEGVVertex.la libThePEGVVertex_la_SOURCES = \ FFVVertex.cc FFVVertex.h FFVVertex.fh \ GeneralFFVVertex.cc GeneralFFVVertex.h GeneralFFVVertex.fh \ VVVVertex.cc VVVVertex.h VVVVertex.fh \ VVVVVertex.cc VVVVVertex.h VVVVVertex.fh \ RFVVertex.cc RFVVertex.h RFVVertex.fh all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/Vertex/Vector/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/Vertex/Vector/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGVVertex.la: $(libThePEGVVertex_la_OBJECTS) $(libThePEGVVertex_la_DEPENDENCIES) $(EXTRA_libThePEGVVertex_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGVVertex_la_OBJECTS) $(libThePEGVVertex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FFVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeneralFFVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RFVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVVVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVVVertex.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/Vertex/Vector/RFVVertex.cc0000644000175000017500000001053511747772425020606 0ustar sunsun// -*- C++ -*- // // RFVVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RFVVertex class. // #include "RFVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; // Definition of the static class description member AbstractNoPIOClassDescription RFVVertex::initRFVVertex; void RFVVertex::Init() { static ClassDocumentation documentation ("The RFVVertex class implements the helicity amplitude" "calculations for a spin-3/2 fermion-fantifermion gauge boson vertex. Any " "implementation of such a vertex should inherit from in and implement" " the virtual setCoupling member to calculate the coupling"); } Complex RFVVertex::evaluate(Energy2 q2,const RSSpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec) { // calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),vec.particle()); LorentzSpinor wdot1 = sp.wave().dot(vec.wave()); Complex lS1 = wdot1. leftScalar(sbar.wave()); Complex rS1 = wdot1.rightScalar(sbar.wave()); LorentzSpinor wdot2 = sp.wave().dot(sbar.momentum()); Complex lS2 = wdot2. leftCurrent(sbar.wave()).dot(vec.wave()); Complex rS2 = wdot2.rightCurrent(sbar.wave()).dot(vec.wave()); swap(lS2,rS2); Complex dot = sbar.momentum().dot(vec.wave())*UnitRemoval::InvE; Complex lS3 = wdot2. leftScalar(sbar.wave())*dot; Complex rS3 = wdot2.rightScalar(sbar.wave())*dot; return Complex(0.,1.)*norm()* (lS1*left()[0]+rS1*right()[0]+ lS2*left()[1]+rS2*right()[1]+ lS3*left()[2]+rS3*right()[2]); } Complex RFVVertex::evaluate(Energy2 q2,const SpinorWaveFunction & sp, const RSSpinorBarWaveFunction & sbar, const VectorWaveFunction & vec) { // calculate the couplings setCoupling(q2,sbar.particle(),sp.particle(),vec.particle()); LorentzSpinorBar wdot1 = sbar.wave().dot(vec.wave()); Complex lS1 = sp.wave(). leftScalar(wdot1); Complex rS1 = sp.wave().rightScalar(wdot1); LorentzSpinorBar wdot2 = sbar.wave().dot(sp.momentum()); Complex lS2 = sp.wave(). leftCurrent(wdot2).dot(vec.wave()); Complex rS2 = sp.wave().rightCurrent(wdot2).dot(vec.wave()); Complex dot = sbar.momentum().dot(vec.wave())*UnitRemoval::InvE; Complex lS3 = sp.wave(). leftScalar(wdot2)*dot; Complex rS3 = sp.wave().rightScalar(wdot2)*dot; return Complex(0.,1.)*norm()* (lS1*left()[0]+rS1*right()[0]+ lS2*left()[1]+rS2*right()[1]+ lS3*left()[2]+rS3*right()[2]); } SpinorBarWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorBarWaveFunction & , const VectorWaveFunction & , complex , complex ) { assert(false); return SpinorBarWaveFunction(); } RSSpinorBarWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorBarWaveFunction & , const VectorWaveFunction & , complex , complex ) { assert(false); return RSSpinorBarWaveFunction(); } VectorWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorWaveFunction & , const SpinorBarWaveFunction & , complex , complex ) { assert(false); return VectorWaveFunction(); } VectorWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorWaveFunction & , const RSSpinorBarWaveFunction & , complex , complex ) { assert(false); return VectorWaveFunction(); } RSSpinorWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorWaveFunction & , const VectorWaveFunction & , complex , complex ) { assert(false); return RSSpinorWaveFunction(); } SpinorWaveFunction RFVVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorWaveFunction & , const VectorWaveFunction & , complex , complex ) { assert(false); return SpinorWaveFunction(); } thepeg-1.8.0.orig/Helicity/Vertex/Vector/GeneralFFVVertex.fh0000644000175000017500000000052011747772425022071 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the GeneralFFVVertex class. // #ifndef ThePEG_GeneralFFVVertex_FH #define ThePEG_GeneralFFVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class GeneralFFVVertex; ThePEG_DECLARE_POINTERS(GeneralFFVVertex,GeneralFFVVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Vector/RFVVertex.h0000644000175000017500000002252411747772425020451 0ustar sunsun// -*- C++ -*- // // RFVVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RFVVertex_H #define ThePEG_RFVVertex_H // // This is the declaration of the RFVVertex class. #include #include #include #include #include "RFVVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The RFVVertex class is the base class for all helicity amplitude * vertices which use the renormalisable form for the * spin-3/2 fermion-fermion-vector vertex. * * Any such vertices should inherit from this class and implement the virtual * setcoupling member function. The base AbstractRFVVertex class is used to store the * particles allowed to interact at the vertex. * * The form of the vertex is * \f[ic\bar{f_2}_\mu \left[ g^{\mu\nu} a^{1\lambda} P_\lambda * +\gamma^\nu p_{1}^\mu a^{2\lambda} P_\lambda * +p_{1}^\mu p_{2}^\nu a^{3\lambda} P_\lambda * \right]f_1\epsilon_{3\nu}\f] * * @see AbstractRFVVertex */ class RFVVertex: public AbstractRFVVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ Complex evaluate(Energy2 q2,const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3); /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ RSSpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ RSSpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; /** * Get the Couplings */ //@{ /** * Get the left coupling. */ const vector & left() const { return _left; } /** * Get the right coupling. */ const vector & right() const { return _right; } //@} protected: /** * Set the couplings */ //@{ /** * Set the left coupling. */ void left(const vector & in) { _left = in; } /** * Set the right coupling. */ void right(const vector & in) { _right = in; } //@} private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initRFVVertex; /** * Private and non-existent assignment operator. */ RFVVertex & operator=(const RFVVertex &); private: /** * Left coupling. */ vector _left; /** * Right coupling. */ vector _right; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of RFVVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of RFVVertex. */ typedef ThePEG::Helicity::AbstractRFVVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::RFVVertex"; } }; /** @endcond */ } #endif /* ThePEG_RFVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Vector/Makefile.am0000644000175000017500000000045211747772425020475 0ustar sunsunnoinst_LTLIBRARIES = libThePEGVVertex.la libThePEGVVertex_la_SOURCES = \ FFVVertex.cc FFVVertex.h FFVVertex.fh \ GeneralFFVVertex.cc GeneralFFVVertex.h GeneralFFVVertex.fh \ VVVVertex.cc VVVVertex.h VVVVertex.fh \ VVVVVertex.cc VVVVVertex.h VVVVVertex.fh \ RFVVertex.cc RFVVertex.h RFVVertex.fh thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVertex.h0000644000175000017500000000666311754467375020730 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVVVertex_H #define HELICITY_AbstractVVVVertex_H // // This is the declaration of the AbstractVVVVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractVVVVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractVVVVertex class provides the base class for all * vector-vector-vector interactions in ThePEG */ class AbstractVVVVertex: public VertexBase { public: /** * Default constructor */ AbstractVVVVertex() : VertexBase(VertexType::VVV) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. */ virtual Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVVVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVVVertex & operator=(const AbstractVVVVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVVVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVVVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVVVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVVVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/VertexBase.fh0000644000175000017500000000045411747772425017570 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VertexBase class. // #ifndef ThePEG_VertexBase_FH #define ThePEG_VertexBase_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VertexBase; ThePEG_DECLARE_POINTERS(VertexBase,VertexBasePtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVTVertex.fh0000644000175000017500000000076311754467215021060 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVTVertex class. // #ifndef HELICITY_AbstractVVTVertex_FH #define HELICITY_AbstractVVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVTVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVT = 335; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVTVertex,AbstractVVTVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVVertex.fh0000644000175000017500000000077311754467215021211 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVVVVertex class. // #ifndef HELICITY_AbstractVVVVVertex_FH #define HELICITY_AbstractVVVVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVVVVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVVV = 3333; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVVVVertex,AbstractVVVVVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSVertex.h0000644000175000017500000001034711754467375020717 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVSVertex_H #define HELICITY_AbstractVVSVertex_H // // This is the declaration of the AbstractVVSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractVVSVertex.fh" namespace ThePEG { namespace Helicity { /** * Here is the documentation of the AbstractVVSVertex class. */ class AbstractVVSVertex: public VertexBase { public: /** * Default constructor */ AbstractVVSVertex() : VertexBase(VertexType::VVS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the scalar. */ virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the vector. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVSVertex & operator=(const AbstractVVSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVSVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSSVertex.cc0000644000175000017500000000120211754467375021166 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVSSVertex class. // #include "AbstractVVSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVVSSVertex::initAbstractVVSSVertex; // Definition of the static class description member. void AbstractVVSSVertex::Init() { static ClassDocumentation documentation ("The AbstractVVSSVertex class is the base class for " "vector-vector-scalar-scalar interactions in ThePEG"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFSVertex.fh0000644000175000017500000000076311754467215021017 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractFFSVertex class. // #ifndef HELICITY_AbstractFFSVertex_FH #define HELICITY_AbstractFFSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractFFSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T FFS = 221; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractFFSVertex,AbstractFFSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSTVertex.cc0000644000175000017500000000116311754467375021044 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractSSTVertex class. // #include "AbstractSSTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractSSTVertex::initAbstractSSTVertex; // Definition of the static class description member. void AbstractSSTVertex::Init() { static ClassDocumentation documentation ("The AbstractSSTVertex class is the base class for scalar-scalar-tensor" "interactions in ThePEG."); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVTVertex.fh0000644000175000017500000000077311754467215021207 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVVTVertex class. // #ifndef HELICITY_AbstractVVVTVertex_FH #define HELICITY_AbstractVVVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVVTVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVVT = 3335; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVVTVertex,AbstractVVVTVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSVertex.fh0000644000175000017500000000076311754467215021057 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVSVertex class. // #ifndef HELICITY_AbstractVVSVertex_FH #define HELICITY_AbstractVVSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVS = 331; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVSVertex,AbstractVVSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSVertex.cc0000644000175000017500000000115411754467375021051 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVSVertex class. // #include "AbstractVVSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVVSVertex::initAbstractVVSVertex; // Definition of the static class description member. void AbstractVVSVertex::Init() { static ClassDocumentation documentation ("The AbstractVVSVertex class is the base class for the " "vector-vector-scalar interaction"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVVertex.fh0000644000175000017500000000076311754467215021022 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractFFVVertex class. // #ifndef HELICITY_AbstractFFVVertex_FH #define HELICITY_AbstractFFVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractFFVVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T FFV = 223; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractFFVVertex,AbstractFFVVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSTVertex.h0000644000175000017500000001043211754467375020705 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractSSTVertex_H #define HELICITY_AbstractSSTVertex_H // // This is the declaration of the AbstractSSTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "AbstractSSTVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractSSTVertex class is the base class for * scalar-scalar-tensor interactions in ThePEG */ class AbstractSSTVertex: public VertexBase { public: /** * Default constructor */ AbstractSSTVertex() : VertexBase(VertexType::SST) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar * @param ten3 The wavefunction for the tensor. */ virtual Complex evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const TensorWaveFunction & ten3) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual TensorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractSSTVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractSSTVertex & operator=(const AbstractSSTVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractSSTVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractSSTVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractSSTVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractSSTVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractSSTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVertex.cc0000644000175000017500000000120611754467375021052 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVVVertex class. // #include "AbstractVVVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace ThePEG::Helicity; AbstractNoPIOClassDescription AbstractVVVVertex::initAbstractVVVVertex; // Definition of the static class description member. void AbstractVVVVertex::Init() { static ClassDocumentation documentation ("The AbstractVVVVertex class provides the base class for" " all vector-vector-vector interactions in ThePEG."); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFTVertex.fh0000644000175000017500000000076311754467215021020 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractFFTVertex class. // #ifndef HELICITY_AbstractFFTVertex_FH #define HELICITY_AbstractFFTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractFFTVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T FFT = 225; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractFFTVertex,AbstractFFTVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFTVertex.h0000644000175000017500000001223311754467375020654 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractFFTVertex_H #define HELICITY_AbstractFFTVertex_H // // This is the declaration of the AbstractFFTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "AbstractFFTVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractFFTVertex class is the base class for all fermion-fermion-tensor * interactions in ThePEG */ class AbstractFFTVertex: public VertexBase { public: /** * Default constructor */ AbstractFFTVertex() : VertexBase(VertexType::FFT) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param ten3 The wavefunction for the tensor. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction & ten3) = 0; /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual TensorWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction& ten3, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractFFTVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractFFTVertex & operator=(const AbstractFFTVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractFFTVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractFFTVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractFFTVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractFFTVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractFFTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVVertex.cc0000644000175000017500000000120311754467375021175 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVVVVertex class. // #include "AbstractVVVVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVVVVVertex::initAbstractVVVVVertex; // Definition of the static class description member. void AbstractVVVVVertex::Init() { static ClassDocumentation documentation ("The AbstractVVVVVertex class is the base class for " "vector-vector-vector-vector interactions in ThePEG."); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSVertex.cc0000644000175000017500000000115511754467375021044 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractSSSVertex class. // #include "AbstractSSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractSSSVertex::initAbstractSSSVertex; // Definition of the static class description member. void AbstractSSSVertex::Init() { static ClassDocumentation documentation ("The AbstractSSSVertex class is the base class for all " "scalar-scalar-scalar interactions"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSSVertex.fh0000644000175000017500000000077311754467215021175 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractSSSSVertex class. // #ifndef HELICITY_AbstractSSSSVertex_FH #define HELICITY_AbstractSSSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractSSSSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T SSSS = 1111; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractSSSSVertex,AbstractSSSSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVVertex.cc0000644000175000017500000000245511754473631021011 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractFFVVertex class. // #include "AbstractFFVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace Helicity; AbstractNoPIOClassDescription AbstractFFVVertex::initAbstractFFVVertex; // Definition of the static class description member. void AbstractFFVVertex::Init() { static ClassDocumentation documentation ("The AbstractFFVVertex class provides a base class for all" " fermion-fermion-vector interactions"); } SpinorWaveFunction AbstractFFVVertex::evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, unsigned int , unsigned int , double , double , double , bool , SmallAngleDirection , Energy mass, Energy width) { return evaluate(q2,iopt,out,sp1,vec3,mass,width); } SpinorBarWaveFunction AbstractFFVVertex::evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, unsigned int , unsigned int , double , double , double , bool , SmallAngleDirection , Energy mass, Energy width) { return evaluate(q2,iopt,out,sbar2,vec3,mass,width); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVTVertex.h0000644000175000017500000001500111754467375020776 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractFFVTVertex_H #define HELICITY_AbstractFFVTVertex_H // // This is the declaration of the AbstractFFVTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "AbstractFFVTVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractFFVTVertex class is the base class for all * fermion-fermion-vector-tensor interactions in ThePEG. */ class AbstractFFVTVertex: public VertexBase { public: /** * Default constructor */ AbstractFFVTVertex() : VertexBase(VertexType::FFVT) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4) = 0; /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractFFVTVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractFFVTVertex & operator=(const AbstractFFVTVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractFFVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractFFVTVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractFFVTVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractFFVTVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractFFVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFSVertex.cc0000644000175000017500000000116111754473631020777 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractFFSVertex class. // #include "AbstractFFSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace Helicity; AbstractNoPIOClassDescription AbstractFFSVertex::initAbstractFFSVertex; // Definition of the static class description member. void AbstractFFSVertex::Init() { static ClassDocumentation documentation ("The AbstractFFSVertex class is an abstract base class for" " the implementation of all fermion-fermion-scalar vertices"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVTVertex.h0000644000175000017500000001115211754467375021041 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVVTVertex_H #define HELICITY_AbstractVVVTVertex_H // // This is the declaration of the AbstractVVVTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "AbstractVVVTVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractVVVTVertex class is the base class for all vector-vector-vector-tensor * interactions in ThePEG. */ class AbstractVVVTVertex: public VertexBase { public: /** * Default constructor */ AbstractVVVTVertex() : VertexBase(VertexType::VVVT) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param ten4 The wavefunction for the tensor. */ virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4) = 0; /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVVTVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVVTVertex & operator=(const AbstractVVVTVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVVTVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVVTVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVVTVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFSVertex.h0000644000175000017500000001222511754473631020644 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractFFSVertex_H #define HELICITY_AbstractFFSVertex_H // // This is the declaration of the AbstractFFSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "AbstractFFSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractFFSVertex class provides a base class for all * fermion-fermion-scalar vertices in ThePEG. */ class AbstractFFSVertex: public VertexBase { public: /** * Default constructor */ AbstractFFSVertex() : VertexBase(VertexType::FFS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractFFSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractFFSVertex & operator=(const AbstractFFSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractFFSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractFFSVertex. */ typedef VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractFFSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractFFSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractFFSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFVVertex.h0000644000175000017500000002020511754467375020670 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractRFVVertex_H #define HELICITY_AbstractRFVVertex_H // // This is the declaration of the AbstractRFVVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/RSSpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/RSSpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractRFVVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractRFVVertex class provides a base class for all * spin-3/2 fermion-fermion-vector vertices in ThePEG. */ class AbstractRFVVertex: public VertexBase { public: /** * Default constructor */ AbstractRFVVertex() : VertexBase(VertexType::RFV) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the RS ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ virtual Complex evaluate(Energy2 q2,const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3) = 0; /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the RS antifermion. * @param vec3 The wavefunction for the vector. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual RSSpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual RSSpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractRFVVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractRFVVertex & operator=(const AbstractRFVVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractRFVVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractRFVVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractRFVVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractRFVVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractRFVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVVertex.h0000644000175000017500000002145211754467375020661 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractFFVVertex_H #define HELICITY_AbstractFFVVertex_H // // This is the declaration of the AbstractFFVVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractFFVVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractFFVVertex class provides a base class for all * fermion-fermion-vector vertices in ThePEG. */ class AbstractFFVVertex: public VertexBase { public: /** * Enum for the direction in the small angle limit */ enum SmallAngleDirection { NegativeZDirection = -1, ///< Along -z PostiveZDirection = 1 ///< Along +z }; public: /** * Default constructor */ AbstractFFVVertex() : VertexBase(VertexType::FFV) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV) = 0; //@} /** * Special members for off-shell fermion wavefunctions with massless * gauge bosons at small angles in the small angle limit for * numerical accuracy. In order to get sufficient accuracy it is * assumed that the fermion lies along either the positive or negative z * axis * * Unlike the other members this is not required to be implemented in * all inheriting classes and a default implementation which returns * the general result is included. */ //@{ /** Small angle approx for an off-shell spinor * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param fhel Helicity of the fermion * @param vhel Helicity of the vector * @param ctheta The cosine of the * polar angle of the photon with respect to the fermion * @param phi The azimuthal angle of the photon with respect to the fermion * @param stheta The sine of the * polar angle of the photon with respect to the fermion * @param includeEikonal Whether or not to include the eikonal piece * @param direction Whether fermion along + or - z direction * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal = true, SmallAngleDirection direction = PostiveZDirection, Energy mass=-GeV, Energy width=-GeV); /** Small angle approx for an off-shell spinor * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param fhel Helicity of the fermion * @param vhel Helicity of the vector * @param ctheta The cosine of the * polar angle of the photon with respect to the fermion * @param phi The azimuthal angle of the photon with respect to the fermion * @param stheta The sine of the * polar angle of the photon with respect to the fermion * @param includeEikonal Whether or not to include the eikonal piece * @param direction Whether fermion along + or - z direction * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluateSmall(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, unsigned int fhel, unsigned int vhel, double ctheta, double phi, double stheta, bool includeEikonal = true, SmallAngleDirection direction = PostiveZDirection, Energy mass=-GeV, Energy width=-GeV); //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractFFVVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractFFVVertex & operator=(const AbstractFFVVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractFFVVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractFFVVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractFFVVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractFFVVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractFFVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSSVertex.h0000644000175000017500000001114611754467375021040 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVSSVertex_H #define HELICITY_AbstractVVSSVertex_H // // This is the declaration of the AbstractVVSSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractVVSSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractVVSSVertex class is the base class for vector-vector-scalar-scalar * interactions in ThePEG */ class AbstractVVSSVertex: public VertexBase { public: /** * Default constructor */ AbstractVVSSVertex() : VertexBase(VertexType::VVSS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the first scalar. * @param sca4 The wavefunction for the second scalar. */ virtual Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the first scalar. * @param sca4 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVSSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVSSVertex & operator=(const AbstractVVSSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVSSVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVSSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVSSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVSSVertex.cc0000644000175000017500000000117011754467375021044 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVSSVertex class. // #include "AbstractVSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVSSVertex::initAbstractVSSVertex; // Definition of the static class description member. void AbstractVSSVertex::Init() { static ClassDocumentation documentation ("The AbstractVSSVertex class is the base class for all " "vector-scalar-scalar interactions in ThePEG."); } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/0000755000175000017500000000000011756460366016446 5ustar sunsunthepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVVTVertex.cc0000644000175000017500000001515511747772425020771 0ustar sunsun// -*- C++ -*- // // VVVTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVVTVertex class. // #include "VVVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVVTVertex::initVVVTVertex; // Definition of the static class description member. void VVVTVertex::Init() { static ClassDocumentation documentation ("The VVVTVertex class is the implementation f the" " helicity amplitude calculation of the vector-vector-vector-tensor" " vertex. All such vertices should inherit from it."); } // function to evaluate the vertex Complex VVVTVertex::evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten) { // set the couplings setCoupling(q2,vec1.particle(),vec2.particle(), vec3.particle(),ten.particle()); Complex ii(0.,1.); // dot products of the wavefunctions Complex dotv1v2 = vec1.wave().dot(vec2.wave()); Complex dotv1v3 = vec1.wave().dot(vec3.wave()); Complex dotv2v3 = vec2.wave().dot(vec3.wave()); // dot product of wavefunctions and momenta complex dotv1k23 = vec1.wave().dot(vec2.momentum()-vec3.momentum()); complex dotv2k31 = vec2.wave().dot(vec3.momentum()-vec1.momentum()); complex dotv3k12 = vec3.wave().dot(vec1.momentum()-vec2.momentum()); // components of the tensor Complex tentx = ten.tx()+ten.xt(); Complex tenty = ten.ty()+ten.yt(); Complex tentz = ten.tz()+ten.zt(); Complex tenxy = ten.xy()+ten.yx(); Complex tenxz = ten.xz()+ten.zx(); Complex tenyz = ten.yz()+ten.zy(); // dot product of wavefunctions and momenta with the tensor Complex tenv1v2 = 2.*(+ten.tt()*vec1.t()*vec2.t()+ten.xx()*vec1.x()*vec2.x() +ten.yy()*vec1.y()*vec2.y()+ten.zz()*vec1.z()*vec2.z()) -tentx*(vec1.t()*vec2.x()+vec1.x()*vec2.t()) -tenty*(vec1.t()*vec2.y()+vec1.y()*vec2.t()) -tentz*(vec1.t()*vec2.z()+vec1.z()*vec2.t()) +tenxy*(vec1.x()*vec2.y()+vec1.y()*vec2.x()) +tenxz*(vec1.x()*vec2.z()+vec1.z()*vec2.x()) +tenyz*(vec1.y()*vec2.z()+vec1.z()*vec2.y()); Complex tenv1v3 = 2.*(+ten.tt()*vec1.t()*vec3.t()+ten.xx()*vec1.x()*vec3.x() +ten.yy()*vec1.y()*vec3.y()+ten.zz()*vec1.z()*vec3.z()) -tentx*(vec1.t()*vec3.x()+vec1.x()*vec3.t()) -tenty*(vec1.t()*vec3.y()+vec1.y()*vec3.t()) -tentz*(vec1.t()*vec3.z()+vec1.z()*vec3.t()) +tenxy*(vec1.x()*vec3.y()+vec1.y()*vec3.x()) +tenxz*(vec1.x()*vec3.z()+vec1.z()*vec3.x()) +tenyz*(vec1.y()*vec3.z()+vec1.z()*vec3.y()); Complex tenv2v3 = 2.*(+ten.tt()*vec2.t()*vec3.t()+ten.xx()*vec2.x()*vec3.x() +ten.yy()*vec2.y()*vec3.y()+ten.zz()*vec2.z()*vec3.z()) -tentx*(vec2.t()*vec3.x()+vec2.x()*vec3.t()) -tenty*(vec2.t()*vec3.y()+vec2.y()*vec3.t()) -tentz*(vec2.t()*vec3.z()+vec2.z()*vec3.t()) +tenxy*(vec2.x()*vec3.y()+vec2.y()*vec3.x()) +tenxz*(vec2.x()*vec3.z()+vec2.z()*vec3.x()) +tenyz*(vec2.y()*vec3.z()+vec2.z()*vec3.y()); complex tenv1k23 = 2.*(+ten.tt()*vec1.t()*(vec2.e() -vec3.e() ) +ten.xx()*vec1.x()*(vec2.px()-vec3.px()) +ten.yy()*vec1.y()*(vec2.py()-vec3.py()) +ten.zz()*vec1.z()*(vec2.pz()-vec3.pz())) -tentx*(vec1.t()*(vec2.px()-vec3.px())+vec1.x()*(vec2.e() -vec3.e() )) -tenty*(vec1.t()*(vec2.py()-vec3.py())+vec1.y()*(vec2.e() -vec3.e() )) -tentz*(vec1.t()*(vec2.pz()-vec3.pz())+vec1.z()*(vec2.e() -vec3.e() )) +tenxy*(vec1.x()*(vec2.py()-vec3.py())+vec1.y()*(vec2.px()-vec3.px())) +tenxz*(vec1.x()*(vec2.pz()-vec3.pz())+vec1.z()*(vec2.px()-vec3.px())) +tenyz*(vec1.y()*(vec2.pz()-vec3.pz())+vec1.z()*(vec2.py()-vec3.py())); complex tenv2k31 = 2.*(+ten.tt()*vec2.t()*(vec3.e() -vec1.e() ) +ten.xx()*vec2.x()*(vec3.px()-vec1.px()) +ten.yy()*vec2.y()*(vec3.py()-vec1.py()) +ten.zz()*vec2.z()*(vec3.pz()-vec1.pz())) -tentx*(vec2.t()*(vec3.px()-vec1.px())+vec2.x()*(vec3.e() -vec1.e() )) -tenty*(vec2.t()*(vec3.py()-vec1.py())+vec2.y()*(vec3.e() -vec1.e() )) -tentz*(vec2.t()*(vec3.pz()-vec1.pz())+vec2.z()*(vec3.e() -vec1.e() )) +tenxy*(vec2.x()*(vec3.py()-vec1.py())+vec2.y()*(vec3.px()-vec1.px())) +tenxz*(vec2.x()*(vec3.pz()-vec1.pz())+vec2.z()*(vec3.px()-vec1.px())) +tenyz*(vec2.y()*(vec3.pz()-vec1.pz())+vec2.z()*(vec3.py()-vec1.py())); complex tenv3k12 = 2.*(+ten.tt()*vec3.t()*(vec1.e() -vec2.e() ) +ten.xx()*vec3.x()*(vec1.px()-vec2.px()) +ten.yy()*vec3.y()*(vec1.py()-vec2.py()) +ten.zz()*vec3.z()*(vec1.pz()-vec2.pz())) -tentx*(vec3.t()*(vec1.px()-vec2.px())+vec3.x()*(vec1.e() -vec2.e() )) -tenty*(vec3.t()*(vec1.py()-vec2.py())+vec3.y()*(vec1.e() -vec2.e() )) -tentz*(vec3.t()*(vec1.pz()-vec2.pz())+vec3.z()*(vec1.e() -vec2.e() )) +tenxy*(vec3.x()*(vec1.py()-vec2.py())+vec3.y()*(vec1.px()-vec2.px())) +tenxz*(vec3.x()*(vec1.pz()-vec2.pz())+vec3.z()*(vec1.px()-vec2.px())) +tenyz*(vec3.y()*(vec1.pz()-vec2.pz())+vec3.z()*(vec1.py()-vec2.py())); // trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // compute the vertex Complex vertex= -0.5 * ii * norm() * UnitRemoval::InvE * ( +dotv3k12*(tenv1v2-trace*dotv1v2) +dotv2k31*(tenv1v3-trace*dotv1v3) +dotv1k23*(tenv2v3-trace*dotv2v3) +dotv2v3*tenv1k23+dotv1v3*tenv2k31+dotv1v2*tenv3k12 ); // return the answer return vertex; } TensorWaveFunction VVVTVertex::evaluate(Energy2 ,int , tcPDPtr , const VectorWaveFunction & , const VectorWaveFunction & , const VectorWaveFunction &, complex, complex ) { throw Exception() << "VVVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } VectorWaveFunction VVVTVertex::evaluate(Energy2 ,int , tcPDPtr , const VectorWaveFunction & , const VectorWaveFunction & , const TensorWaveFunction &, complex, complex ) { throw Exception() << "VVVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/SSTVertex.cc0000644000175000017500000001436511747772425020637 0ustar sunsun// -*- C++ -*- // // SSTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SSTVertex class. // #include "SSTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription SSTVertex::initSSTVertex; // Definition of the static class description member. void SSTVertex::Init() { static ClassDocumentation documentation ("The SSTVertex class is the implementation of the " "helicity amplitude calculation for the scalar-scalar-tensor vertex" ", all such vertices should inherit from it"); } // evaluate the vertex Complex SSTVertex::evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const TensorWaveFunction & ten) { // obtain the coupling setCoupling(q2,sca1.particle(),sca2.particle(),ten.particle()); Complex ii(0.,1.); // evaluate the trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // dot product of the two momenta Energy2 dot = sca1.momentum()*sca2.momentum(); Energy mass = sca1.particle()->mass(); // second term complex second = +2.*ten.tt()*sca1.e()*sca2.e() +2.*ten.xx()*sca1.px()*sca2.px() +2.*ten.yy()*sca1.py()*sca2.py()+2.*ten.zz()*sca1.pz()*sca2.pz() -(ten.tx()+ten.xt())*(sca1.e()*sca2.px() +sca1.px()*sca2.e()) -(ten.ty()+ten.yt())*(sca1.e()*sca2.py() +sca1.py()*sca2.e()) -(ten.tz()+ten.zt())*(sca1.e()*sca2.pz() +sca1.pz()*sca2.e()) +(ten.xy()+ten.yx())*(sca1.py()*sca2.px()+sca1.px()*sca2.py()) +(ten.xz()+ten.zx())*(sca1.pz()*sca2.px()+sca1.px()*sca2.pz()) +(ten.yz()+ten.zy())*(sca1.pz()*sca2.py()+sca1.py()*sca2.pz()); // return the answer return -0.5*ii*norm()*UnitRemoval::InvE2* (trace*(mass*mass-dot)+second)*sca1.wave()*sca2.wave(); } // off-shell tensor TensorWaveFunction SSTVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass, complex width) { // obtain the coupling setCoupling(q2,sca1.particle(),sca2.particle(),out); // array for the tensor Complex ten[4][4]; // calculate the outgoing momentum Lorentz5Momentum pout = sca1.momentum()+sca2.momentum(); // prefactor if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); Energy2 p2 = pout.m2(); Complex fact = 0.5*norm()*sca1.wave()*sca2.wave()* propagator(iopt,p2,out,mass,width); // dot products we need Energy2 dot12 = sca1.momentum()*sca2.momentum(); Energy2 dot1 = sca1.momentum()*pout; Energy2 dot2 = pout*sca2.momentum(); // the vectors that we need for the tensor LorentzPolarizationVectorE vec1,vec2; Complex a,b; Energy2 mphi2 = sqr(sca1.particle()->mass()); // massive case if(mass.real()!=ZERO) { Complex norm1=dot1/mass2; Complex norm2=dot2/mass2; a = UnitRemoval::InvE2 * ((mphi2+dot12)*(Complex(2.*p2/mass2)-5.) +4.*(dot12-dot1*dot2/mass2))/3.; b = -(-(mphi2+dot12)*(2.+p2/mass2)+4.*(dot12-dot1*(dot2/mass2)))/3./mass2; vec1 = LorentzPolarizationVectorE(sca1.momentum()) - LorentzPolarizationVectorE(norm1 * pout); vec2 = LorentzPolarizationVectorE(sca2.momentum()) - LorentzPolarizationVectorE(norm2 * pout); } // massless case else { a = UnitRemoval::InvE2 * (-5.*(mphi2+dot12)+4.*dot12)/3.; b = 0.; vec1 = sca1.momentum(); vec2 = sca2.momentum(); } // calculate the wavefunction complex vec1_tmp[4] = {vec1.x(), vec1.y(), vec1.z(), vec1.t()}; complex vec2_tmp[4] = {vec2.x(), vec2.y(), vec2.z(), vec2.t()}; complex pout_tmp[4] = {pout.x(), pout.y(), pout.z(), pout.t()}; for(int ix=0;ix<4;++ix) { for(int iy=0;iy<4;++iy) { complex temp = -2.*( vec1_tmp[ix]*vec2_tmp[iy] + vec1_tmp[ix]*vec2_tmp[iy]) -b*pout_tmp[ix]*pout_tmp[iy]; ten[ix][iy]= UnitRemoval::InvE2 * temp; } } ten[3][3]=ten[3][3]-a; for(int ix=0;ix<3;++ix){ten[ix][ix]=ten[ix][ix]+a;} // prefactor for(int ix=0;ix<4;++ix){for(int iy=0;iy<4;++iy){ten[ix][iy]=fact*ten[ix][iy];}} // return the wavefunction return TensorWaveFunction(pout,out, ten[0][0],ten[0][1],ten[0][2],ten[0][3], ten[1][0],ten[1][1],ten[1][2],ten[1][3], ten[2][0],ten[2][1],ten[2][2],ten[2][3], ten[3][0],ten[3][1],ten[3][2],ten[3][3]); } // off-shell scalar ScalarWaveFunction SSTVertex::evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca, const TensorWaveFunction & ten, complex mass, complex width) { // obtain the coupling setCoupling(q2,sca.particle(),out,ten.particle()); // calculate the outgoing momentum Lorentz5Momentum pout = sca.momentum()+ten.momentum(); // prefactors if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); Energy2 p2 = pout.m2(); Complex fact = 0.5*norm()*sca.wave()*propagator(iopt,p2,out,mass,width); // trace of the tensor Complex trace1 = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // dot product of the two momenta Energy2 dot = sca.momentum()*pout; // first term complex trace = trace1*(mass2-dot); // second term complex second = +2.*ten.tt()*sca.e()*pout.e() +2.*ten.xx()*sca.px()*pout.x() +2.*ten.yy()*sca.py()*pout.y()+2.*ten.zz()*sca.pz()*pout.z() -(ten.tx()+ten.xt())*( sca.e()*pout.x()+sca.px()*pout.e()) -(ten.ty()+ten.yt())*( sca.e()*pout.y()+sca.py()*pout.e()) -(ten.tz()+ten.zt())*( sca.e()*pout.z()+sca.pz()*pout.e()) +(ten.xy()+ten.yx())*(sca.py()*pout.x()+sca.px()*pout.y()) +(ten.xz()+ten.zx())*(sca.pz()*pout.x()+sca.px()*pout.z()) +(ten.yz()+ten.zy())*(sca.py()*pout.z()+sca.pz()*pout.y()); // put it all together second = fact*(trace+second); Complex result = second * UnitRemoval::InvE2; return ScalarWaveFunction(pout,out,result); } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVVTVertex.fh0000644000175000017500000000045311747772425020774 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVVTVertex class. // #ifndef ThePEG_VVVTVertex_FH #define ThePEG_VVVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVVTVertex; ThePEG_DECLARE_POINTERS(VVVTVertex,VVVTVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFVTVertex.h0000644000175000017500000001761611747772425020577 0ustar sunsun// -*- C++ -*- // // FFVTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FFVTVertex_H #define ThePEG_FFVTVertex_H // // This is the declaration of the FFVTVertex class. // #include "ThePEG/Helicity/Vertex/AbstractFFVTVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "FFVTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The FFVTVertex class is the implementation of the * fermion-fermion--vector-tensor vertex. * It inherits from the AbstractFFVTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The form of the vertex is * \f[\frac{ig\kappa}4t^a_{nm}\bar{f_2}(C_{\mu\nu,\rho\sigma}-g_{\mu\nu}g_{\rho\sigma}) * \gamma^\sigma f_1\epsilon_{3\rho}\epsilon_4^{\mu\nu}\f] * where * -\f$C_{\mu\nu,\rho\sigma}=g_{\mu\rho}g_{\nu\sigma}+g_{\mu\sigma}g_{\nu\rho} * -g_{\mu\nu}g_{\rho\sigma}\f$. * * @see AbstractFFVTVertex */ class FFVTVertex: public AbstractFFVTVertex { public: /** * Default constructor */ FFVTVertex() : left_(1.), right_(1.) {} /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4); /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp1, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param vec3 The wavefunction for the vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4)=0; /** * Left and right couplings */ //@{ /** * Get left */ Complex left() const {return left_;} /** * Set left */ void left(Complex in) {left_ = in;} /** * Get right */ Complex right() const {return right_;} /** * Set right */ void right(Complex in) {right_ = in;} //@} private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initFFVTVertex; /** * Private and non-existent assignment operator. */ FFVTVertex & operator=(const FFVTVertex &); private: /** * Left coupling */ Complex left_; /** * Right coupling */ Complex right_; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of FFVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of FFVTVertex. */ typedef ThePEG::Helicity::AbstractFFVTVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::FFVTVertex"; } }; /** @endcond */ } #endif /* ThePEG_FFVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFVTVertex.fh0000644000175000017500000000045411747772425020735 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FFVTVertex class. // #ifndef ThePEG_FFVTVertex_FH #define ThePEG_FFVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class FFVTVertex; ThePEG_DECLARE_POINTERS(FFVTVertex,FFVTVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVTVertex.h0000644000175000017500000001270711747772425020505 0ustar sunsun// -*- C++ -*- // // VVTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVTVertex_H #define ThePEG_VVTVertex_H // // This is the declaration of the VVTVertex class. #include "ThePEG/Helicity/Vertex/AbstractVVTVertex.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "VVTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VVTVertex class is the implementation of the * vector-vector-tensor vertex. * It inherits from the AbstractVVTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The vertex has the form * \f[ * \left[m^2_v+k_1\cdot k_2)C_{\mu\nu,\rho\sigma}+D_{\mu\nu,\rho\sigma}\right] * \epsilon_1^\rho\epsilon_2^\sigma \epsilon_3^{\mu\nu} * \f] * where * - \f$C_{\mu\nu,\rho\sigma}=g_{\mu\rho}g_{\nu\sigma}+g_{\mu\sigma}g_{\nu\rho} * -g_{\mu\nu}g_{\rho\sigma}\f$ * - \f$D_{\mu\nu,\rho\sigma}= * g_{\mu\nu}k_{1\sigma}k_{2\rho}-\left[g_{\mu\sigma}k_{1\nu}k_{2\rho}+g_{\mu\rho}k_{1\sigma}k_{2\nu}-g_{\rho\sigma}k_{1\mu}k_{2\nu}+(\mu\leftrightarrow\nu)\right] * \f$ * * @see AbstractVVTVertex */ class VVTVertex: public AbstractVVTVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param ten3 The wavefunction for the tensor. * @param vmass The mass of the vector boson. */ Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const TensorWaveFunction & ten3, Energy vmass=-GeV); /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vmass The mass of the vector boson. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, Energy vmass=-GeV, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec1 The wavefunction for the first vector. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe a concrete class with persistent data. */ static AbstractNoPIOClassDescription initVVTVertex; /** * Private and non-existent assignment operator. */ VVTVertex & operator=(const VVTVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVTVertex. */ typedef ThePEG::Helicity::AbstractVVTVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVTVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVTVertex.cc0000644000175000017500000002477111747772425020647 0ustar sunsun// -*- C++ -*- // // VVTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVTVertex class. // #include "VVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVTVertex::initVVTVertex; // Definition of the static class description member. void VVTVertex::Init() { static ClassDocumentation documentation ("The VVTVertex class is the implementation of" "the vector-vector tensor vertices for helicity " "amplitude calculations. All such vertices should inherit" "from it."); } // function to evaluate the vertex Complex VVTVertex::evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const TensorWaveFunction & ten, Energy vmass) { // set the couplings setCoupling(q2,vec1.particle(),vec2.particle(),ten.particle()); // mass of the vector if(vmassmass(); // mass+k1.k2 Energy2 mdot = vec1.momentum()*vec2.momentum(); if(vmass!=ZERO) mdot += sqr(vmass); // dot product of wavefunctions and momenta Complex dotv1v2 = vec1.wave().dot(vec2.wave()); complex dotk1v2 = vec1.momentum()*vec2.wave(); complex dotk2v1 = vec1.wave()*vec2.momentum(); // dot product of wavefunctions and momenta with the tensor LorentzPolarizationVector tv1 = ten.wave().postDot(vec1.wave()); LorentzPolarizationVector tv2 = ten.wave().postDot(vec2.wave()); LorentzPolarizationVectorE tk1 = ten.wave().postDot(vec1.momentum()); LorentzPolarizationVectorE tk2 = ten.wave().postDot(vec2.momentum()); Complex tenv1v2 = vec1.wave ().dot(tv2) + vec2.wave ().dot(tv1); complex tenk1v2 = vec1.momentum().dot(tv2) + vec2.wave ().dot(tk1); complex tenk2v1 = vec2.momentum().dot(tv1) + vec1.wave ().dot(tk2); complex tenk1k2 = vec2.momentum().dot(tk1) + vec1.momentum().dot(tk2); // trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // evaluate the vertex return -0.5*Complex(0.,1.)*norm()*UnitRemoval::InvE2 * (trace*(dotk1v2*dotk2v1-dotv1v2*mdot) +mdot*tenv1v2-dotk2v1*tenk1v2 -dotk1v2*tenk2v1+dotv1v2*tenk1k2); } // evaluate an off-shell vector VectorWaveFunction VVTVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const VectorWaveFunction & vec, const TensorWaveFunction & ten, complex mass, complex width) { // evaluate the couplings setCoupling(q2,vec.particle(),out,ten.particle()); // outgoing momentum Lorentz5Momentum pout = ten.momentum()+vec.momentum(); // normalisation factor if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); Energy2 p2 = pout.m2(); Complex fact = -0.5*norm()*propagator(iopt,p2,out,mass,width); // dot product of wavefunctions and momenta complex dotk1k2 = vec.momentum()*pout; complex dotk2v1 = vec.wave() *pout; // mass-k1.k2 complex mdot = -dotk1k2; if(mass.real()!=ZERO) mdot += mass2; // components of the tensor Complex tentx = ten.tx()+ten.xt(); Complex tenty = ten.ty()+ten.yt(); Complex tentz = ten.tz()+ten.zt(); Complex tenxy = ten.xy()+ten.yx(); Complex tenxz = ten.xz()+ten.zx(); Complex tenyz = ten.yz()+ten.zy(); // dot product of momenta and polarization vectors with the tensor complex tenk2v1 = 2.*(+ten.tt()*vec.t()*pout.e() +ten.xx()*vec.x()*pout.x() +ten.yy()*vec.y()*pout.y()+ten.zz()*vec.z()*pout.z()) -tentx*(vec.t()*pout.x()+vec.x()*pout.e()) -tenty*(vec.t()*pout.y()+vec.y()*pout.e()) -tentz*(vec.t()*pout.z()+vec.z()*pout.e()) +tenxy*(vec.x()*pout.y()+vec.y()*pout.x()) +tenxz*(vec.x()*pout.z()+vec.z()*pout.x()) +tenyz*(vec.y()*pout.z()+vec.z()*pout.y()); complex tenk1k2 = 2.*(+ten.tt()*vec.e()*pout.e() +ten.xx()*vec.px()*pout.x() +ten.yy()*vec.py()*pout.y()+ten.zz()*vec.pz()*pout.z()) -tentx*(vec.e()*pout.x() +vec.px()*pout.e()) -tenty*(vec.e()*pout.y() +vec.py()*pout.e()) -tentz*(vec.e()*pout.z() +vec.pz()*pout.e()) +tenxy*(vec.px()*pout.y()+vec.py()*pout.x()) +tenxz*(vec.px()*pout.z()+vec.pz()*pout.x()) +tenyz*(vec.py()*pout.z()+vec.pz()*pout.y()); // trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // compute the vector Complex vec1[4]; vec1[0] = UnitRemoval::InvE2* (mdot*(+ tentx* vec.t()-2.*ten.xx()*vec.x() - tenxy* vec.y()- tenxz* vec.z()-trace*vec.x()) +(tenk2v1-trace*dotk2v1)*vec.px()-tenk1k2*vec.x() +dotk2v1*(+ tentx* vec.e() -2.*ten.xx()*vec.px() - tenxy* vec.py()- tenxz* vec.pz())); vec1[1] = UnitRemoval::InvE2*( mdot * (+ tenty* vec.t() - tenxy* vec.x() -2.*ten.yy()*vec.y() - tenyz* vec.z()-trace*vec.y() ) +(tenk2v1-trace*dotk2v1)*vec.py() -tenk1k2*vec.y() +dotk2v1*(+ tenty* vec.e() - tenxy* vec.px() -2.*ten.yy()*vec.py() - tenyz* vec.pz())); vec1[2] = UnitRemoval::InvE2* (mdot* (+ tentz* vec.t()- tenxz* vec.x() - tenyz* vec.y()-2.*ten.zz()*vec.z()-trace*vec.z()) +(tenk2v1-trace*dotk2v1)*vec.pz()-tenk1k2*vec.z() +dotk2v1*(+ tentz* vec.e() - tenxz *vec.px() - tenyz* vec.py()-2.*ten.zz()*vec.pz())); vec1[3] = UnitRemoval::InvE2* (mdot*(+2.*ten.tt()*vec.t()- tentx* vec.x() - tenty* vec.y()- tentz* vec.z()-trace*vec.t()) +(tenk2v1-trace*dotk2v1)*vec.e() -tenk1k2*vec.t() +dotk2v1*(+2.*ten.tt()*vec.e() - tentx* vec.px() - tenty* vec.py()- tentz* vec.pz())); // now add the piece for massive bosons if(mass.real()!=ZERO) { // DGRELL unit problem? Complex dot = tenk2v1 * UnitRemoval::InvE - dotk1k2 * trace * UnitRemoval::InvE2; vec1[0] -= dot*pout.x() * UnitRemoval::InvE; vec1[1] -= dot*pout.y() * UnitRemoval::InvE; vec1[2] -= dot*pout.z() * UnitRemoval::InvE; vec1[3] -= dot*pout.e() * UnitRemoval::InvE; } // return the VectorWaveFunction for(int ix=0;ix<4;++ix){vec1[ix]=vec1[ix]*fact;} return VectorWaveFunction(pout,out,vec1[0],vec1[1],vec1[2],vec1[3]); } // off-shell tensor TensorWaveFunction VVTVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, Energy vmass, complex tmass, complex width) { // coupling setCoupling(q2,vec1.particle(),vec2.particle(),out); // momenta of the outgoing tensor // outgoing momentum Lorentz5Momentum pout= vec1.momentum()+vec2.momentum(); // overall normalisation if(tmass.real() < ZERO) tmass = out->mass(); complex tmass2 = sqr(tmass); if(vmassmass(); Energy2 vmass2 = sqr(vmass); Energy2 p2 = pout.m2(); Complex fact = 0.5*norm()*propagator(iopt,p2,out,tmass,width); // dot products we need to construct the tensor complex dotk1k2 = vec1.momentum()*vec2.momentum(); complex dotv1k2 = vec1.wave()*vec2.momentum(); Complex dotv1v2 = vec1.wave().dot(vec2.wave()); complex dotk1v2 = vec1.momentum()*vec2.wave(); complex dotkk1 = vec1.momentum()*pout; complex dotkk2 = vec2.momentum()*pout; complex dotkv1 = vec1.wave()*pout; complex dotkv2 = vec2.wave()*pout; // dot product ma^2+k1.k2 complex mdot = vmass2+dotk1k2; // vectors to help construct the tensor Complex vecv1[4],vecv2[4]; complex veck1[4],veck2[4]; complex tmass2inv(ZERO); if(tmass.real()> ZERO) tmass2inv = 1./tmass2; vecv1[0]=vec1.x() -pout.x()*dotkv1*tmass2inv; vecv2[0]=vec2.x() -pout.x()*dotkv2*tmass2inv; veck1[0]=vec1.px()-pout.x()*dotkk1*tmass2inv; veck2[0]=vec2.px()-pout.x()*dotkk2*tmass2inv; vecv1[1]=vec1.y() -pout.y()*dotkv1*tmass2inv; vecv2[1]=vec2.y() -pout.y()*dotkv2*tmass2inv; veck1[1]=vec1.py()-pout.y()*dotkk1*tmass2inv; veck2[1]=vec2.py()-pout.y()*dotkk2*tmass2inv; vecv1[2]=vec1.z() -pout.z()*dotkv1*tmass2inv; vecv2[2]=vec2.z() -pout.z()*dotkv2*tmass2inv; veck1[2]=vec1.pz()-pout.z()*dotkk1*tmass2inv; veck2[2]=vec2.pz()-pout.z()*dotkk2*tmass2inv; vecv1[3]=vec1.t() -pout.e()*dotkv1*tmass2inv; vecv2[3]=vec2.t() -pout.e()*dotkv2*tmass2inv; veck1[3]=vec1.e() -pout.e()*dotkk1*tmass2inv; veck2[3]=vec2.e() -pout.e()*dotkk2*tmass2inv; // coefficient of g(nu,mu)-k^muk^nu/m^2 Complex coeff1 = UnitRemoval::InvE2 * ( +4./3.*mdot*(-2.*dotv1v2+Complex((dotkv1*dotkv2+p2*dotv1v2)*tmass2inv)) +4./3.*(dotv1k2*(dotk1v2-dotkk1*dotkv2*tmass2inv) +dotk1v2*(dotv1k2-dotkk2*dotkv1*tmass2inv) -dotv1v2*(dotk1k2-dotkk1*dotkk2*tmass2inv) +(1.-p2*tmass2inv)*dotk1v2*dotv1k2) ); // coefficient of g(nu,mu) Complex coeff2 = UnitRemoval::InvE2 * ( 2.*mdot*(1.-p2*tmass2inv)*dotv1v2 -2.*(1.-p2*tmass2inv)*dotk1v2*dotv1k2 ); // construct the tensor Complex ten[4][4]; const Energy pout_tmp[4] = {pout.x(), pout.y(), pout.z(), pout.e()}; for(int ix=0;ix<4;++ix) { for(int iy=0;iy<4;++iy) { complex temp; temp = 2.*mdot* (vecv1[ix]*vecv2[iy]+vecv1[iy]*vecv2[ix]); temp -= 2.*dotv1k2*(veck1[ix]*vecv2[iy]+veck1[iy]*vecv2[ix]); temp -= 2.*dotk1v2*(veck2[ix]*vecv1[iy]+veck2[iy]*vecv1[ix]); temp += 2.*dotv1v2*(veck1[ix]*veck2[iy]+veck1[iy]*veck2[ix]); ten[ix][iy] = UnitRemoval::InvE2 * temp -coeff1*tmass2inv*pout_tmp[ix]*pout_tmp[iy]; } } // add the g(mu,nu) term ten[0][0] = ten[0][0]-(coeff1+coeff2); ten[1][1] = ten[1][1]-(coeff1+coeff2); ten[2][2] = ten[2][2]-(coeff1+coeff2); ten[3][3] = ten[3][3]+(coeff1+coeff2); // overall coefficent for(int ix=0;ix<4;++ix) { for(int iy=0;iy<4;++iy) { ten[ix][iy] = fact*ten[ix][iy]; } } // return the wavefunction return TensorWaveFunction(pout,out, ten[0][0],ten[0][1],ten[0][2],ten[0][3], ten[1][0],ten[1][1],ten[1][2],ten[1][3], ten[2][0],ten[2][1],ten[2][2],ten[2][3], ten[3][0],ten[3][1],ten[3][2],ten[3][3]); } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVVTVertex.h0000644000175000017500000001354711747772425020636 0ustar sunsun// -*- C++ -*- // // VVVTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVVTVertex_H #define ThePEG_VVVTVertex_H // // This is the declaration of the VVVTVertex class. // #include "ThePEG/Helicity/Vertex/AbstractVVVTVertex.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "VVVTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VVTVertex class is the implementation of the * vector-vector-vector-tensor vertex. * It inherits from the AbstractVVVTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The vertex has the form * \f[ * g\frac\kappa2f^{abc}\left[ * C_{\mu\nu,\rho\sigma}(k_1-k_2)_\lambda+C_{\mu\nu,\rho\lambda}(k_3-k_1)_\sigma * +C_{\mu\nu,\sigma\lambda}(k_2-k_3)_\rho+F_{\mu\nu,\rho\sigma\lambda} * \right]\epsilon_1^\rho\epsilon^\sigma_2\epsilon^\lambda_3 * \epsilon^{\mu\nu}_4 * \f] * where * -\f$C_{\mu\nu,\rho\sigma}=g_{\mu\rho}g_{\nu\sigma}+g_{\mu\sigma}g_{\nu\rho} * -g_{\mu\nu}g_{\rho\sigma}\f$ * -\f$F_{\mu\nu,\rho\sigma\lambda} = * g_{\mu\rho}g_{\sigma\lambda}(k_2-k_3)_\nu * +g_{\mu\sigma}g_{\rho\lambda}(k_3-k_1)_\nu * +g_{\mu\lambda}g_{\rho\sigma}(k_1-k_2)_\nu+(\mu\leftrightarrow\nu) * \f$ * * @see AbstractVVVTVertex */ class VVVTVertex: public AbstractVVVTVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param ten4 The wavefunction for the tensor. */ Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const TensorWaveFunction & ten4); /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param ten4 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const TensorWaveFunction & ten4, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3, tcPDPtr part4)=0; private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initVVVTVertex; /** * Private and non-existent assignment operator. */ VVVTVertex & operator=(const VVVTVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVVTVertex. */ typedef ThePEG::Helicity::AbstractVVVTVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVVTVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Tensor/VVTVertex.fh0000644000175000017500000000045011747772425020643 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVTVertex class. // #ifndef ThePEG_VVTVertex_FH #define ThePEG_VVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVTVertex; ThePEG_DECLARE_POINTERS(VVTVertex,VVTVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFTVertex.h0000644000175000017500000001360011747772425020436 0ustar sunsun// -*- C++ -*- // // FFTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FFTVertex_H #define ThePEG_FFTVertex_H // // This is the declaration of the FFTVertex class. // #include "ThePEG/Helicity/Vertex/AbstractFFTVertex.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "FFTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The FFTVertex class is the implementation of the fermion-fermion-tensor * vertex. It inherits from the AbstractFFTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The vertex has the form * \f[-\frac{i\kappa}8\bar{f_2}\left[ * \gamma_\mu(k_1-k_2)_\nu+\gamma_\nu(k_1-k_2)_\mu * -2g_{\mu\nu}(k\!\!\!\!\!\not\,\,\,_1-k\!\!\!\!\!\not\,\,\,_2)+4g_{\mu\nu}m_{f} * \right]f_1\epsilon^{\mu\nu}_3\f] * * @see AbstractFFTVertex */ class FFTVertex: public AbstractFFTVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param ten3 The wavefunction for the tensor. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction & ten3); /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ TensorWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar2, const TensorWaveFunction& ten3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initFFTVertex; /** * Private and non-existent assignment operator. */ FFTVertex & operator=(const FFTVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of FFTVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of FFTVertex. */ typedef ThePEG::Helicity::AbstractFFTVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::FFTVertex"; } }; /** @endcond */ } #endif /* ThePEG_FFTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Tensor/SSTVertex.fh0000644000175000017500000000044611747772425020642 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the SSTVertex class. // #ifndef ThePEG_SSTVertex_FH #define ThePEG_SSTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class SSTVertex; ThePEG_DECLARE_POINTERS(SSTVertex,SSTVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFTVertex.fh0000644000175000017500000000044511747772425020607 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FFTVertex class. // #ifndef ThePEG_FFTVertex_FH #define ThePEG_FFTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class FFTVertex; ThePEG_DECLARE_POINTERS(FFTVertex,FFTVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFTVertex.cc0000644000175000017500000002615411747772425020604 0ustar sunsun// -*- C++ -*- // // FFTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FFTVertex class. // #include "FFTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; // Definition of the static class description member AbstractNoPIOClassDescription FFTVertex::initFFTVertex; void FFTVertex::Init() { static ClassDocumentation documentation ("The FFTVertex class is the implementation of" "the fermion-antifermion tensor vertices for helicity " "amplitude calculations. All such vertices should inherit" "from it."); } // function to evaluate the vertex Complex FFTVertex::evaluate(Energy2 q2,const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const TensorWaveFunction & ten) { // set the couplings setCoupling(q2,sp.particle(),sbar.particle(),ten.particle()); // vector current LorentzPolarizationVector as = sp.wave().vectorCurrent(sbar.wave()); // momentum difference Lorentz5Momentum vdiff = sp.momentum()-sbar.momentum(); // first term LorentzPolarizationVectorE test = ten.wave().postDot(vdiff) + ten.wave().preDot(vdiff); complex term1 = as.dot(test); // trace of polarization tensor Complex trace = ten.wave().trace(); // dot products with polarization tensor // product of spinors Complex ffbar= sp.wave().scalar(sbar.wave()); // put everything together return -0.125*Complex(0.,1.)*norm()*UnitRemoval::InvE* ( term1 + 4.0*(sp.particle()->mass())*trace*ffbar ); } // member function to evaluate an off-shell spinor SpinorWaveFunction FFTVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const SpinorWaveFunction & sp, const TensorWaveFunction & ten, complex mass, complex width) { // momentum of the outgoing fermion Lorentz5Momentum pout = ten.momentum()+sp.momentum(); // set the couplings setCoupling(q2,sp.particle(),out,ten.particle()); Complex ii(0.,1.); // trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // mass of the fermion if(mass.real() < ZERO) mass = out->mass(); // overall factor Energy2 p2 = pout.m2(); Complex fact = 0.125*norm()*propagator(iopt,p2,out,mass,width); // compute the vector we need complex dot[4]; for(int ix=0;ix<4;++ix) { // evaluate the products we need dot[ix] =(ten(ix,3)+ten(3,ix))*(pout.e()+sp.e()); dot[ix]-=(ten(ix,0)+ten(0,ix))*(pout.x()+sp.px()); dot[ix]-=(ten(ix,1)+ten(1,ix))*(pout.y()+sp.py()); dot[ix]-=(ten(ix,2)+ten(2,ix))*(pout.z()+sp.pz()); } LorentzVector > vec(dot[0],dot[1],dot[2],dot[3]); vec -= 2.0 * trace * (pout + sp.momentum()); // combinations of the vector complex a1p2=vec.x()+ii*vec.y(); complex a1m2=vec.x()-ii*vec.y(); LorentzSpinor spt =sp .wave(); // now compute the first stage of the spinor wavefunction complex a0p3=vec.t()+vec.z(); complex a0m3=vec.t()-vec.z(); vec.setX(a0m3*spt.s3()-a1m2*spt.s4()); vec.setY(a0p3*spt.s4()-a1p2*spt.s3()); vec.setZ(a0p3*spt.s1()+a1m2*spt.s2()); vec.setT(a0m3*spt.s2()+a1p2*spt.s1()); if(mass.real()!=ZERO) { complex dot = 4.*mass*trace; vec.setX(vec.x() + dot*spt.s1()); vec.setY(vec.y() + dot*spt.s2()); vec.setZ(vec.z() + dot*spt.s3()); vec.setT(vec.t() + dot*spt.s4()); } // combinations of the momentum complex p1p2=pout.x()+ii*pout.y(); complex p1m2=pout.x()-ii*pout.y(); // finally put everything together as the spinor Complex ferm[4]; complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); ferm[0] = UnitRemoval::InvE2 * fact*( p0m3*vec.z()-p1m2*vec.t()); ferm[1] = UnitRemoval::InvE2 * fact*(-p1p2*vec.z()+p0p3*vec.t()); ferm[2] = UnitRemoval::InvE2 * fact*( p0p3*vec.x()+p1m2*vec.y()); ferm[3] = UnitRemoval::InvE2 * fact*( p1p2*vec.x()+p0m3*vec.y()); if(mass.real()!=ZERO) { ferm[0] += UnitRemoval::InvE2 * fact*(mass*vec.x()); ferm[1] += UnitRemoval::InvE2 * fact*(mass*vec.y()); ferm[2] += UnitRemoval::InvE2 * fact*(mass*vec.z()); ferm[3] += UnitRemoval::InvE2 * fact*(mass*vec.t()); } // return the wavefunction return SpinorWaveFunction(pout,out,ferm[0],ferm[1],ferm[2],ferm[3]); } // member function to evaluate an off-shell spinor bar SpinorBarWaveFunction FFTVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const SpinorBarWaveFunction & sbar, const TensorWaveFunction & ten, complex mass, complex width) { // momentum of the outgoing fermion Lorentz5Momentum pout = ten.momentum()+sbar.momentum(); // set the couplings setCoupling(q2,out,sbar.particle(),ten.particle()); Complex ii(0.,1.); // trace of the tensor Complex trace = ten.tt()-ten.xx()-ten.yy()-ten.zz(); // mass of the fermion if(mass.real() < ZERO) mass = out->mass(); // overall factor Energy2 p2 = pout.m2(); Complex fact=0.125*norm()*propagator(iopt,p2,out,mass,width); // vector complex dot[4]; for(int ix=0;ix<4;++ix) { // evaluate the products we need dot[ix] =-(ten(ix,3)+ten(3,ix))*(pout.e()+sbar.e()); dot[ix]+= (ten(ix,0)+ten(0,ix))*(pout.x()+sbar.px()); dot[ix]+= (ten(ix,1)+ten(1,ix))*(pout.y()+sbar.py()); dot[ix]+= (ten(ix,2)+ten(2,ix))*(pout.z()+sbar.pz()); } LorentzVector > vec(dot[0],dot[1],dot[2],dot[3]); vec += 2.*trace*(pout+sbar.momentum()); // combinations of the vector complex a1p2=vec.x()+ii*vec.y(); complex a1m2=vec.x()-ii*vec.y(); LorentzSpinorBar sbart=sbar.wave(); // now compute the first stage of the spinorbar wavefunction complex a0p3=vec.t()+vec.z(); complex a0m3=vec.t()-vec.z(); vec.setX(a0p3*sbart.s3()+a1p2*sbart.s4()); vec.setY(a0m3*sbart.s4()+a1m2*sbart.s3()); vec.setZ(a0m3*sbart.s1()-a1p2*sbart.s2()); vec.setT(a0p3*sbart.s2()-a1m2*sbart.s1()); if(mass.real()!=ZERO) { complex dot = 4.*mass*trace; vec.setX(vec.x() + dot*sbart.s1()); vec.setY(vec.y() + dot*sbart.s2()); vec.setZ(vec.z() + dot*sbart.s3()); vec.setT(vec.t() + dot*sbart.s4()); } // combinations of the momentum complex p1p2=pout.x()+ii*pout.y(); complex p1m2=pout.x()-ii*pout.y(); // finally put everything together as the spinor Complex ferm[4]; complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); ferm[0] = UnitRemoval::InvE2 * fact*(-p0p3*vec.z()-p1p2*vec.t()); ferm[1] = UnitRemoval::InvE2 * fact*(-p1m2*vec.z()-p0m3*vec.t()); ferm[2] = UnitRemoval::InvE2 * fact*(-p0m3*vec.x()+p1p2*vec.y()); ferm[3] = UnitRemoval::InvE2 * fact*( p1m2*vec.x()-p0p3*vec.y()); if(mass.real()!=ZERO) { ferm[0] += UnitRemoval::InvE2 * fact*mass*vec.x(); ferm[1] += UnitRemoval::InvE2 * fact*mass*vec.y(); ferm[2] += UnitRemoval::InvE2 * fact*mass*vec.z(); ferm[3] += UnitRemoval::InvE2 * fact*mass*vec.t(); } // return the wavefunction return SpinorBarWaveFunction(pout,out,ferm[0],ferm[1],ferm[2],ferm[3]); } // member function to evaluate an off-shell tensor TensorWaveFunction FFTVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, complex mass, complex width) { // calculating the couplings setCoupling(q2,sp.particle(),sbar.particle(),out); Complex ii(0.,1.); // momentum of the outgoing tensor Lorentz5Momentum pout = sp.momentum()+sbar.momentum(); // calculate the prefactor Energy2 p2 = pout.m2(); Complex fact = 0.125*norm()*propagator(iopt,p2,out,mass,width); if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); // spinor vector Complex aspin[4]; LorentzSpinorBar sbart=sbar.wave(); LorentzSpinor spt =sp .wave(); aspin[3] = sbart.s1()*spt.s3()+sbart.s2()*spt.s4() +sbart.s3()*spt.s1()+sbart.s4()*spt.s2(); // spatial components are the same in both conventions aspin[0] = +sbart.s1()*spt.s4()+sbart.s2()*spt.s3() -sbart.s3()*spt.s2()-sbart.s4()*spt.s1(); aspin[1] = ii*(-sbart.s1()*spt.s4()+sbart.s2()*spt.s3() +sbart.s3()*spt.s2()-sbart.s4()*spt.s1()); aspin[2] = +sbart.s1()*spt.s3()-sbart.s2()*spt.s4() -sbart.s3()*spt.s1()+sbart.s4()*spt.s2(); // mass dependent term Complex ffbar; if(sp.particle()->mass()!=ZERO) { ffbar = UnitRemoval::InvE * (sp.particle()->mass())* (sp.s1()*sbar.s1()+sp.s2()*sbar.s2()+sp.s3()*sbar.s3()+sp.s4()*sbar.s4()); } else { ffbar = 0.; } // dot products for the calculation complex dotka = +aspin[3]*pout.e()-aspin[0]*pout.x() -aspin[1]*pout.y()-aspin[2]*pout.z(); complex dot12a = +aspin[3]*(sp.e() -sbar.e() )-aspin[0]*(sp.px()-sbar.px()) -aspin[1]*(sp.py()-sbar.py())-aspin[2]*(sp.pz()-sbar.pz()); complex diff=sp.m2()-sbar.m2(); complex dotkam=dotka/mass2; Complex diffm =diff/mass2; Complex p2m = p2/mass2; // construct the vectors for the first two terms Complex veca[4],vecb[4]; veca[0] = aspin[0]-UnitRemoval::InvE2*dotka*pout.x(); vecb[0] = UnitRemoval::InvE*(sp.px()-sbar.px()-diffm*pout.x()); veca[1] = aspin[1]-UnitRemoval::InvE2*dotka*pout.y(); vecb[1] = UnitRemoval::InvE*(sp.py()-sbar.py()-diffm*pout.y()); veca[2] = aspin[2]-UnitRemoval::InvE2*dotka*pout.z(); vecb[2] = UnitRemoval::InvE*(sp.pz()-sbar.pz()-diffm*pout.z()); veca[3] = aspin[3]-UnitRemoval::InvE2*dotka*pout.e(); vecb[3] = UnitRemoval::InvE*(sp.e()-sbar.e()-diffm*pout.e()); // coefficients fr hte second two terms Complex temp = UnitRemoval::InvE*(p2m*dot12a-dotkam*diff); Complex coeff1 = -4./3.*(2.*ffbar*(1.-p2m) + temp); temp = UnitRemoval::InvE*(-3.*dot12a+2.*p2m*dot12a+diffm*dotka); Complex coeff2 = -4./3./mass2*( 4.*ffbar*(1.-p2m) + temp)*UnitRemoval::E2; // construct the tensor Complex ten[4][4]; const complex pout_tmp[4] = {pout.x(), pout.y(), pout.z(), pout.e()}; for(int ix=0;ix<4;++ix) { for(int iy=0;iy<4;++iy) { Complex temp = coeff2*pout_tmp[ix]*pout_tmp[iy]*UnitRemoval::InvE2; ten[ix][iy] = 2.*(veca[ix]*vecb[iy]+veca[iy]*vecb[ix]) + temp; } } ten[0][0]=ten[0][0]-coeff1; ten[1][1]=ten[1][1]-coeff1; ten[2][2]=ten[2][2]-coeff1; ten[3][3]=ten[3][3]+coeff1; // multiply by final prefactor for(int ix=0;ix<4;++ix) { for(int iy=0;iy<4;++iy) { ten[ix][iy] = fact*ten[ix][iy]; } } // return the wavefunction return TensorWaveFunction(pout,out, ten[0][0],ten[0][1],ten[0][2],ten[0][3], ten[1][0],ten[1][1],ten[1][2],ten[1][3], ten[2][0],ten[2][1],ten[2][2],ten[2][3], ten[3][0],ten[3][1],ten[3][2],ten[3][3]); } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/Makefile.in0000644000175000017500000004431211756366734020523 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Helicity/Vertex/Tensor DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGTVertex_la_LIBADD = am_libThePEGTVertex_la_OBJECTS = FFTVertex.lo FFVTVertex.lo \ SSTVertex.lo VVTVertex.lo VVVTVertex.lo libThePEGTVertex_la_OBJECTS = $(am_libThePEGTVertex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGTVertex_la_SOURCES) DIST_SOURCES = $(libThePEGTVertex_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libThePEGTVertex.la libThePEGTVertex_la_SOURCES = \ FFTVertex.cc FFTVertex.h FFTVertex.fh \ FFVTVertex.cc FFVTVertex.h FFVTVertex.fh \ SSTVertex.cc SSTVertex.h SSTVertex.fh \ VVTVertex.cc VVTVertex.h VVTVertex.fh \ VVVTVertex.cc VVVTVertex.h VVVTVertex.fh all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/Vertex/Tensor/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/Vertex/Tensor/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGTVertex.la: $(libThePEGTVertex_la_OBJECTS) $(libThePEGTVertex_la_DEPENDENCIES) $(EXTRA_libThePEGTVertex_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGTVertex_la_OBJECTS) $(libThePEGTVertex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FFTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FFVTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVVTVertex.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/Vertex/Tensor/FFVTVertex.cc0000644000175000017500000000706711747772425020734 0ustar sunsun// -*- C++ -*- // // FFVTVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FFVTVertex class. // #include "FFVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription FFVTVertex::initFFVTVertex; // Definition of the static class description member. void FFVTVertex::Init() { static ClassDocumentation documentation ("The FFVTVertex class is the implementation of the" "helicity amplitude calculation of the fermion-antifermion-vector-tensor" "vertex. All such vertices should inherit from it."); } // function to evaluate the vertex Complex FFVTVertex::evaluate(Energy2 q2, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const VectorWaveFunction & vec, const TensorWaveFunction & ten) { // set the couplings setCoupling(q2,sp.particle(),sbar.particle(), vec.particle(),ten.particle()); Complex ii(0.,1.); // vector current LorentzPolarizationVector as = left_ *sp.wave(). leftCurrent(sbar.wave()) + right_*sp.wave().rightCurrent(sbar.wave()); // trace of the tensor Complex trace = ten.wave().trace(); // dot product Complex dotav = as.dot(vec.wave()); // product with tensor and current LorentzPolarizationVector preDot = ten.wave(). preDot(as); LorentzPolarizationVector postDot = ten.wave().postDot(as); Complex tenav = preDot.dot(vec.wave())+postDot.dot(vec.wave()); // return the vertex return ii*0.25*norm()*(tenav-2.*trace*dotav); } TensorWaveFunction FFVTVertex::evaluate(Energy2,int , tcPDPtr , const SpinorWaveFunction & , const SpinorBarWaveFunction & , const VectorWaveFunction & , complex, complex) { throw Exception() << "FFVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } VectorWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , const SpinorWaveFunction & , const SpinorBarWaveFunction & , const TensorWaveFunction & , complex, complex) { throw Exception() << "FFVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } SpinorWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , const SpinorWaveFunction & , const VectorWaveFunction & , const TensorWaveFunction & , complex, complex) { throw Exception() << "FFVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } SpinorBarWaveFunction FFVTVertex::evaluate(Energy2 ,int , tcPDPtr , const SpinorBarWaveFunction & , const VectorWaveFunction & , const TensorWaveFunction & , complex, complex) { throw Exception() << "FFVTVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "not the off-shell wavefunctions" << Exception::runerror; } thepeg-1.8.0.orig/Helicity/Vertex/Tensor/Makefile.am0000644000175000017500000000043311747772425020504 0ustar sunsunnoinst_LTLIBRARIES = libThePEGTVertex.la libThePEGTVertex_la_SOURCES = \ FFTVertex.cc FFTVertex.h FFTVertex.fh \ FFVTVertex.cc FFVTVertex.h FFVTVertex.fh \ SSTVertex.cc SSTVertex.h SSTVertex.fh \ VVTVertex.cc VVTVertex.h VVTVertex.fh \ VVVTVertex.cc VVVTVertex.h VVVTVertex.fh thepeg-1.8.0.orig/Helicity/Vertex/Tensor/SSTVertex.h0000644000175000017500000001174111747772425020474 0ustar sunsun// -*- C++ -*- // // SSTVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SSTVertex_H #define ThePEG_SSTVertex_H // // This is the declaration of the SSTVertex class. // #include "ThePEG/Helicity/Vertex/AbstractSSTVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "SSTVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VVTVertexclass is the implementation of the * scalar-scalar-tensor vertex. * It inherits from the AbstractSSTVertex class for the storage of the particles * interacting at the vertex and implements the helicity amplitude calculations. * * All implementations of this vertex should inherit from it and implement the * virtual setCoupling member. * * The form of the vertex is * \f[ * -\frac{i\kappa}2\left[m^2_Sg_{\mu\nu}-k_{1\mu}k_{2\nu}-k_{1\nu}k_{2\mu} * +g_{\mu\nu}k_1\cdot k_2\right]\epsilon^{\mu\nu}_3\phi_1\phi_2 * * \f] * * @see AbstractSSTVertex */ class SSTVertex: public AbstractSSTVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar * @param ten3 The wavefunction for the tensor. */ Complex evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const TensorWaveFunction & ten3); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ TensorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initSSTVertex; /** * Private and non-existent assignment operator. */ SSTVertex & operator=(const SSTVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of SSTVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of SSTVertex. */ typedef ThePEG::Helicity::AbstractSSTVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::SSTVertex"; } }; /** @endcond */ } #endif /* ThePEG_SSTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSSVertex.h0000644000175000017500000000657411754467375021043 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractSSSSVertex_H #define HELICITY_AbstractSSSSVertex_H // // This is the declaration of the AbstractSSSSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "AbstractSSSSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractSSSSVertex class is the base class for all scalar-scalar-scalar * interactions in ThePEG */ class AbstractSSSSVertex: public VertexBase { public: /** * Default constructor */ AbstractSSSSVertex() : VertexBase(VertexType::SSSS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. * @param sca4 The wavefunction for the fourth scalar. */ virtual Complex evaluate(Energy2 q2,const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractSSSSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractSSSSVertex & operator=(const AbstractSSSSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractSSSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractSSSSVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractSSSSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractSSSSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractSSSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFVVertex.cc0000644000175000017500000000114311754473631021016 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractRFVVertex class. // #include "AbstractRFVVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace Helicity; AbstractNoPIOClassDescription AbstractRFVVertex::initAbstractRFVVertex; // Definition of the static class description member. void AbstractRFVVertex::Init() { static ClassDocumentation documentation ("The AbstractRFVVertex class provides a base class for all" " spin-3/2 fermion-fermion-vector interactions"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVTVertex.cc0000644000175000017500000000121111754467375021132 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractFFVTVertex class. // #include "AbstractFFVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractFFVTVertex::initAbstractFFVTVertex; // Definition of the static class description member. void AbstractFFVTVertex::Init() { static ClassDocumentation documentation ("The AbstractFFVTVertex class is the base class for all " "fermion-fermion-vector-tensor interactions in ThePEG."); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVTVertex.cc0000644000175000017500000000120211754467375021172 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVVTVertex class. // #include "AbstractVVVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVVVTVertex::initAbstractVVVTVertex; // Definition of the static class description member. void AbstractVVVTVertex::Init() { static ClassDocumentation documentation ("The AbstractVVVTVertex class is the base class for vector-vector-vector-tensor" " interactions in ThePEG"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFTVertex.cc0000644000175000017500000000117111754467375021011 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractFFTVertex class. // #include "AbstractFFTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractFFTVertex::initAbstractFFTVertex; // Definition of the static class description member. void AbstractFFTVertex::Init() { static ClassDocumentation documentation ("The AbstractFFTVertex class is the base class for all fermion-fermion-tensor" " interactions in ThePEG"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFSVertex.h0000644000175000017500000002022211754473631020654 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractRFSVertex_H #define HELICITY_AbstractRFSVertex_H // // This is the declaration of the AbstractRFSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/RSSpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/RSSpinorBarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "AbstractRFSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractRFSVertex class provides a base class for all * spin-3/2 fermion-fermion-scalar vertices in ThePEG. */ class AbstractRFSVertex: public VertexBase { public: /** * Default constructor */ AbstractRFSVertex() : VertexBase(VertexType::RFS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the RS ferimon. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. */ virtual Complex evaluate(Energy2 q2,const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3) = 0; /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the RS antifermion. * @param sca3 The wavefunction for the scalar. */ virtual Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3) = 0; /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell RS spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual RSSpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell barred RS spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual RSSpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the RS ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the RS antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractRFSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractRFSVertex & operator=(const AbstractRFSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractRFSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractRFSVertex. */ typedef VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractRFSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractRFSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractRFSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSSVertex.cc0000644000175000017500000000117411754467375021170 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractSSSSVertex class. // #include "AbstractSSSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractSSSSVertex::initAbstractSSSSVertex; // Definition of the static class description member. void AbstractSSSSVertex::Init() { static ClassDocumentation documentation ("The AbstractSSSSVertex class is the base class for all " "scalar-scalar-scalar-scalar interactions"); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/0000755000175000017500000000000011756460365016400 5ustar sunsunthepeg-1.8.0.orig/Helicity/Vertex/Scalar/RFSVertex.fh0000644000175000017500000000044611747772425020556 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RFSVertex class. // #ifndef ThePEG_RFSVertex_FH #define ThePEG_RFSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class RFSVertex; ThePEG_DECLARE_POINTERS(RFSVertex,RFSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/FFSVertex.fh0000644000175000017500000000044611747772425020542 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FFSVertex class. // #ifndef ThePEG_FFSVertex_FH #define ThePEG_FFSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class FFSVertex; ThePEG_DECLARE_POINTERS(FFSVertex,FFSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSSVertex.fh0000644000175000017500000000045411747772425020724 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVSSVertex class. // #ifndef ThePEG_VVSSVertex_FH #define ThePEG_VVSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVSSVertex; ThePEG_DECLARE_POINTERS(VVSSVertex,VVSSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/FFSVertex.h0000644000175000017500000001471711747772425020402 0ustar sunsun// -*- C++ -*- // // FFSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FFSVertex_H #define ThePEG_FFSVertex_H // // This is the declaration of the FFSVertex class. #include "ThePEG/Helicity/Vertex/AbstractFFSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "FFSVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The FFSVertex class is the implementation of the interact of a * scalar boson and a fermion-antifermion pair. It inherits from the AbstractFFSVertex * class for storage of the particles interacting at the vertex and implements * the helicity calculations. * * Implementations of specific interactions should inherit from this and implement * the virtual setCoupling member. * * The form of the vertex is * \f[ic\bar{f_2}a^\lambda P_\lambda f_1\phi_3\f] * where \f$a^\pm\f$ are the right and left couplings and \f$P_\pm=(1\pm\gamma_5)\f$ * are the chirality projection operators. * * @see AbstractFFSVertex */ class FFSVertex: public AbstractFFSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3)=0; /** * Get the couplings */ //@{ /** * Get the left coupling. */ Complex left() { return _left; } /** * Get the right coupling. */ Complex right() { return _right; } //@} protected: /** * Set the couplings */ //@{ /** * Set the left coupling. */ void left(Complex in) { _left = in; } /** * Set the right coupling. */ void right(Complex in) { _right = in; } //@} private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initFFSVertex; /** * Private and non-existent assignment operator. */ FFSVertex & operator=(const FFSVertex &); private: /** * Storage of the left coupling. */ Complex _left; /** * Storage of the right coupling. */ Complex _right; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of FFSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of FFSVertex. */ typedef ThePEG::Helicity::AbstractFFSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::FFSVertex"; } }; /** @endcond */ } #endif /* ThePEG_FFSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSVertex.cc0000644000175000017500000000361411747772425020564 0ustar sunsun// -*- C++ -*- // // SSSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SSSVertex class. // #include "SSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription SSSVertex::initSSSVertex; // Definition of the static class description member. void SSSVertex::Init() { static ClassDocumentation documentation ("The SSSVertex class is the implementation of the SSS" "vertex. All such vertices shoud inherit from it"); } // evaluate the vertex Complex SSSVertex::evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3) { // calculate the coupling setCoupling(q2,sca1.particle(),sca2.particle(),sca3.particle()); // return the answer return Complex(0.,1.)*norm()*sca1.wave()*sca2.wave()*sca3.wave(); } // off-shell scalar ScalarWaveFunction SSSVertex::evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout = sca1.momentum()+sca2.momentum(); // calculate the coupling setCoupling(q2,sca1.particle(),sca2.particle(),out); // wavefunction Energy2 p2=pout.m2(); Complex fact=-norm()*sca1.wave()*sca2.wave()*propagator(iopt,p2,out,mass,width); return ScalarWaveFunction(pout,out,fact); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/GeneralVVSVertex.cc0000644000175000017500000000702511747772425022070 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the GeneralVVSVertex class. // #include "GeneralVVSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Helicity/epsilon.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription GeneralVVSVertex::initGeneralVVSVertex; // Definition of the static class description member. void GeneralVVSVertex::Init() { static ClassDocumentation documentation ("The GeneralVVSVertex class implements a general form of" " the vector-vector-scalar interaction"); } Complex GeneralVVSVertex::evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca) { Lorentz5Momentum pSca = sca.momentum(); Lorentz5Momentum pvec1 = vec1.momentum(); Lorentz5Momentum pvec2 = vec2.momentum(); // calculate kinematics if(kinematics()) calculateKinematics(pSca,pvec1,pvec2); // calculate coupling setCoupling(q2, vec1.particle(), vec2.particle(), sca.particle()); Complex e1e2(vec1.wave().dot(vec2.wave())); complex e1p1(vec1.wave().dot(pvec1)); complex e1p2(vec1.wave().dot(pvec2)); complex e2p1(vec2.wave().dot(pvec1)); complex e2p2(vec2.wave().dot(pvec2)); complex p1p2(invariant(1,2)); LorentzPolarizationVectorE eps = epsilon(vec1.wave(),vec2.wave(),pvec2); complex p1Ep2 = eps.dot(pvec1); Complex output = UnitRemoval::InvE2 * (_a00*e1e2*p1p2 + _aEp*p1Ep2 + _a11*e1p1*e2p1 + _a12*e1p1*e2p2 + _a21*e1p2*e2p1+ _a22*e1p2*e2p2); return -norm()*Complex(0.,1.) * sca.wave() * output; } ScalarWaveFunction GeneralVVSVertex::evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass, complex width) { // pointers to the particle data objects tcPDPtr Pvec1(vec1.particle()); tcPDPtr Pvec2(vec2.particle()); Lorentz5Momentum pvec1 = vec1.momentum(); Lorentz5Momentum pvec2 = vec2.momentum(); Lorentz5Momentum pout = pvec1 + pvec2; pout.rescaleMass(); // calculate kinematics if needed if(kinematics()) calculateKinematics(pout,pvec1,pvec2); // calculate coupling setCoupling(q2,Pvec1,Pvec2,out); // propagator Complex prop = propagator(iopt,pout.m2(),out,mass,width); // lorentz part Complex e1e2(vec1.wave().dot(vec2.wave())); complex e1p1(vec1.wave().dot(pvec1)); complex e1p2(vec1.wave().dot(pvec2)); complex e2p1(vec2.wave().dot(pvec1)); complex e2p2(vec2.wave().dot(pvec2)); complex p1p2(invariant(1,2)); LorentzPolarizationVectorE eps = epsilon(vec1.wave(),vec2.wave(),pvec2); complex p1Ep2 = eps.dot(pvec1); Complex output = UnitRemoval::InvE2 * (_a00*e1e2*p1p2 + _aEp*p1Ep2 + _a11*e1p1*e2p1 + _a12*e1p1*e2p2 + _a21*e1p2*e2p1+ _a22*e1p2*e2p2); output *= -norm()*prop; return ScalarWaveFunction(pout,out,output); } VectorWaveFunction GeneralVVSVertex::evaluate(Energy2 ,int ,tcPDPtr , const VectorWaveFunction & , const ScalarWaveFunction & , complex, complex) { throw Exception() << "GeneralVVSVertex::evaluate() only implemented for the " << "member which returns the amplitude, " << "and off-shell scalar not the off-shell vector" << Exception::runerror; } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSSVertex.cc0000644000175000017500000000402511747772425020704 0ustar sunsun// -*- C++ -*- // // SSSSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SSSSVertex class. // #include "SSSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription SSSSVertex::initSSSSVertex; // Definition of the static class description member. void SSSSVertex::Init() { static ClassDocumentation documentation ("The SSSSVertex class is the implementation" "of the helicity amplitude for the four scalar vertex" "all vertices of trhis type should inherit from it"); } // evaluate the vertex Complex SSSSVertex::evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4) { // calculate the coupling setCoupling(q2,sca1.particle(),sca2.particle(), sca3.particle(),sca4.particle()); // return the answer return Complex(0.,1.)*norm()*sca1.wave()*sca2.wave()*sca3.wave()*sca4.wave(); } // off-shell scalar ScalarWaveFunction SSSSVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3) { // outgoing momentum Lorentz5Momentum pout = sca1.momentum()+sca2.momentum()+sca3.momentum(); // calculate the coupling setCoupling(q2,sca1.particle(),sca2.particle(),sca3.particle(),out); // wavefunction Energy2 p2 = pout.m2(); Complex fact = -norm()*sca1.wave()*sca2.wave()*sca3.wave()* propagator(iopt,p2,out); return ScalarWaveFunction(pout,out,fact); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSVertex.h0000644000175000017500000001144611747772425020436 0ustar sunsun// -*- C++ -*- // // VVSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVSVertex_H #define ThePEG_VVSVertex_H // // This is the declaration of the VVSVertex class. #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "VVSVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VVSVertex class is the implementation of the vector-vector-scalar. * It inherits from the AbstractVVSVertex class for the storage of the particles and * implements the helicity calculations. * * All interactions of this type should inherit from it and implement the virtual * setCoupling member. * * The form of the vertex is * \f[icg^{\mu\nu}\epsilon_{1\mu}\epsilon_{2\nu}\f] * * @see AbstractVVSVertex */ class VVSVertex: public AbstractVVSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the scalar. */ Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the vector. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first scalar. * @param part2 The ParticleData pointer for the second scalar. * @param part3 The ParticleData pointer for the third scalar. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initVVSVertex; /** * Private and non-existent assignment operator. */ VVSVertex & operator=(const VVSVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVSVertex. */ typedef ThePEG::Helicity::AbstractVVSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVSVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSVertex.h0000644000175000017500000000776111747772425020435 0ustar sunsun// -*- C++ -*- // // SSSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SSSVertex_H #define ThePEG_SSSVertex_H // // This is the declaration of the SSSVertex class. // #include "ThePEG/Helicity/Vertex/AbstractSSSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "SSSVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The SSSVertex class is the implementation of the interaction of * three scalars. It inherits from the AbstractSSSVertex class for the storage of the * particles interacting at the vertex and implements the helicity calculations. * * Any classes implementating the vertex should inherit from it and implement * the virtual set Coupling member. * * The form of the vertex is * \f[ic\phi_1\phi_2\phi_3\f] * * @see AbstractSSSVertex */ class SSSVertex: public AbstractSSSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. */ Complex evaluate(Energy2 q2,const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2,const ScalarWaveFunction & sca3); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initSSSVertex; /** * Private and non-existent assignment operator. */ SSSVertex & operator=(const SSSVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of SSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of SSSVertex. */ typedef ThePEG::Helicity::AbstractSSSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::SSSVertex"; } }; /** @endcond */ } #endif /* ThePEG_SSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/RFSVertex.cc0000644000175000017500000000651211755457334020544 0ustar sunsun// -*- C++ -*- // // RFSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RFSVertex class. // #include "RFSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace ThePEG::Helicity; AbstractNoPIOClassDescription RFSVertex::initRFSVertex; // Definition of the static class description member. void RFSVertex::Init() { static ClassDocumentation documentation ("The RFSVertex class is the implementation of the RFS" "vertex. All such vertices shoud inherit from it"); } Complex RFSVertex::evaluate(Energy2 q2,const RSSpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const ScalarWaveFunction & sca) { // calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),sca.particle()); LorentzSpinor wdot = sp.wave().dot(sbar.momentum()); Complex lS = wdot. leftScalar(sbar.wave()); Complex rS = wdot.rightScalar(sbar.wave()); swap(lS,rS); return Complex(0.,1.)*norm()*sca.wave()*(lS*left()+rS*right()); } Complex RFSVertex::evaluate(Energy2 q2,const SpinorWaveFunction & sp, const RSSpinorBarWaveFunction & sbar, const ScalarWaveFunction & sca) { // calculate the couplings setCoupling(q2,sbar.particle(),sp.particle(),sca.particle()); LorentzSpinorBar wdot = sbar.wave().dot(sp.momentum()); Complex lS = sp.wave(). leftScalar(wdot); Complex rS = sp.wave().rightScalar(wdot); return Complex(0.,1.)*norm()*sca.wave()*(lS*left()+rS*right()); } SpinorWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorWaveFunction & , const ScalarWaveFunction & , complex , complex ) { assert(false); return SpinorWaveFunction(); } RSSpinorWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorWaveFunction & , const ScalarWaveFunction & , complex , complex ) { assert(false); return RSSpinorWaveFunction(); } SpinorBarWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorBarWaveFunction & , const ScalarWaveFunction & , complex , complex ) { assert(false); return SpinorBarWaveFunction(); } RSSpinorBarWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorBarWaveFunction & , const ScalarWaveFunction & , complex , complex ) { assert(false); return RSSpinorBarWaveFunction(); } ScalarWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const RSSpinorWaveFunction & , const SpinorBarWaveFunction & , complex , complex ) { assert(false); return ScalarWaveFunction(); } ScalarWaveFunction RFSVertex::evaluate(Energy2 ,int ,tcPDPtr , const SpinorWaveFunction & , const RSSpinorBarWaveFunction & , complex , complex ) { assert(false); return ScalarWaveFunction(); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/FFSVertex.cc0000644000175000017500000001155611747772425020536 0ustar sunsun// -*- C++ -*- // // FFSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FFSVertex class. // #include "FFSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace ThePEG::Helicity; AbstractNoPIOClassDescription FFSVertex::initFFSVertex; // Definition of the static class description member. void FFSVertex::Init() { static ClassDocumentation documentation ("The FFSVertex class is the implementation of the FFS" "vertex. All such vertices shoud inherit from it"); } // evaluate the full vertex Complex FFSVertex::evaluate(Energy2 q2, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, const ScalarWaveFunction & sca) { // calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),sca.particle()); Complex vertex( _left*(sbar.s1()*sp.s1()+sbar.s2()*sp.s2()) +_right*(sbar.s3()*sp.s3()+sbar.s4()*sp.s4()) ); // final factors return Complex(0.,1.)*norm()*sca.wave()*vertex; } // off-shell scalar ScalarWaveFunction FFSVertex::evaluate(Energy2 q2,int iopt, tcPDPtr out, const SpinorWaveFunction & sp, const SpinorBarWaveFunction & sbar, complex mass, complex width) { // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+sp.momentum(); // first calculate the couplings setCoupling(q2,sp.particle(),sbar.particle(),out); Energy2 p2 = pout.m2(); Complex fact = norm()*propagator(iopt,p2,out,mass,width); Complex output = _left*(sbar.s1()*sp.s1()+sbar.s2()*sp.s2()) +_right*(sbar.s3()*sp.s3()+sbar.s4()*sp.s4()); // final factors and output output*=fact; return ScalarWaveFunction(pout,out,output); } // off-shell spinor SpinorWaveFunction FFSVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const SpinorWaveFunction & sp, const ScalarWaveFunction & sca, complex mass, complex width) { // work out the momentum of the off-shell particle Lorentz5Momentum pout = sp.momentum()+sca.momentum(); // first calculate the couplings setCoupling(q2,sp.particle(),out,sca.particle()); Energy2 p2 = pout.m2(); Complex fact = -norm()*sca.wave()*propagator(iopt,p2,out,mass,width); Complex ii(0.,1.); // useful combinations of the momenta if(mass.real() < ZERO) mass = out->mass(); complex p1p2 = pout.x()+ii*pout.y(); complex p1m2 = pout.x()-ii*pout.y(); Complex s1(0.),s2(0.),s3(0.),s4(0.); LorentzSpinor spt = sp.wave(); complex p0p3=pout.e()+pout.z(); complex p0m3=pout.e()-pout.z(); s1 = UnitRemoval::InvE * fact*( _left*mass*spt.s1()+_right*(p0m3*spt.s3()-p1m2*spt.s4())); s2 = UnitRemoval::InvE * fact*( _left*mass*spt.s2()+_right*(p0p3*spt.s4()-p1p2*spt.s3())); s3 = UnitRemoval::InvE * fact*(_right*mass*spt.s3()+ _left*(p0p3*spt.s1()+p1m2*spt.s2())); s4 = UnitRemoval::InvE * fact*(_right*mass*spt.s4()+ _left*(p0m3*spt.s2()+p1p2*spt.s1())); return SpinorWaveFunction(pout,out,s1,s2,s3,s4); } // off-shell SpinorBar SpinorBarWaveFunction FFSVertex::evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar, const ScalarWaveFunction & sca, complex mass, complex width) { // work out the momentum of the off-shell particle Lorentz5Momentum pout = sbar.momentum()+sca.momentum(); // first calculate the couplings setCoupling(q2,out,sbar.particle(),sca.particle()); Energy2 p2 = pout.m2(); Complex fact = -norm()*sca.wave()*propagator(iopt,p2,out,mass,width); Complex ii(0.,1.); // momentum components if(mass.real() < ZERO) mass = out->mass(); complex p1p2 = pout.x()+ii*pout.y(); complex p1m2 = pout.x()-ii*pout.y(); // complex numbers for the spinor Complex s1(0.),s2(0.),s3(0.),s4(0.); LorentzSpinorBar sbart=sbar.wave(); complex p0p3=pout.e() + pout.z(); complex p0m3=pout.e() - pout.z(); s1 = UnitRemoval::InvE * fact*( mass*_left*sbart.s1()-_right*(p0p3*sbart.s3()+p1p2*sbart.s4())); s2 = UnitRemoval::InvE * fact*( mass*_left*sbart.s2()-_right*(p1m2*sbart.s3()+p0m3*sbart.s4())); s3 = UnitRemoval::InvE * fact*(mass*_right*sbart.s3()- _left*(p0m3*sbart.s1()-p1p2*sbart.s2())); s4 = UnitRemoval::InvE * fact*(mass*_right*sbart.s4()+ _left*(p1m2*sbart.s1()-p0p3*sbart.s2())); return SpinorBarWaveFunction(pout,out,s1,s2,s3,s4); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSSVertex.h0000644000175000017500000001237611747772425020564 0ustar sunsun// -*- C++ -*- // // VVSSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VVSSVertex_H #define ThePEG_VVSSVertex_H // // This is the declaration of the VVSSVertex class. // #include "ThePEG/Helicity/Vertex/AbstractVVSSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "VVSSVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VVSSVertex class is the implementation of the coupling of two * vectors and two scalars. It inherits from the AbstractVVSSVertex class for the * storage of the particles and implements the helicity calculations. * * All classes implementing the vertex should inherit from it and implement the * virtual setCoupling member. * * The form of the vertex is \f[icg^{\mu\nu}\epsilon_{1\mu}\epsilon_{2\nu}\f] * * @see AbstractVVSSVertex */ class VVSSVertex: public AbstractVVSSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the first scalar. * @param sca4 The wavefunction for the second scalar. */ Complex evaluate(Energy2 q2, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the first scalar. * @param sca4 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3, tcPDPtr part4)=0; private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initVVSSVertex; /** * Private and non-existent assignment operator. */ VVSSVertex & operator=(const VVSSVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VVSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VVSSVertex. */ typedef ThePEG::Helicity::AbstractVVSSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VVSSVertex"; } }; /** @endcond */ } #endif /* ThePEG_VVSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSVertex.fh0000644000175000017500000000044611747772425020602 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VVSVertex class. // #ifndef ThePEG_VVSVertex_FH #define ThePEG_VVSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VVSVertex; ThePEG_DECLARE_POINTERS(VVSVertex,VVSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSSVertex.h0000644000175000017500000001004511747772425020545 0ustar sunsun// -*- C++ -*- // // SSSSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SSSSVertex_H #define ThePEG_SSSSVertex_H // // This is the declaration of the SSSSVertex class. // #include "ThePEG/Helicity/Vertex/AbstractSSSSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "SSSSVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The SSSSVertex class is the implementation of the interaction of * four scalars. It inherits from the AbstractSSSSVertex class for the storage * of the particles interacting at the vertex and implements the * helicity calculations. * * Any classes implementating the vertex should inherit from it and implement * the virtual set Coupling member. * * The form of the vertex is * \f[ic\phi_1\phi_2\phi_3\phi_4\f] * * @see AbstractSSSSVertex */ class SSSSVertex: public AbstractSSSSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. * @param sca4 The wavefunction for the fourth scalar. */ Complex evaluate(Energy2 q2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3, const ScalarWaveFunction & sca4); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. */ ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. * @param part4 The ParticleData pointer for the fourth particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2, tcPDPtr part3,tcPDPtr part4)=0; private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initSSSSVertex; /** * Private and non-existent assignment operator. */ SSSSVertex & operator=(const SSSSVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of SSSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of SSSSVertex. */ typedef ThePEG::Helicity::AbstractSSSSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::SSSSVertex"; } }; /** @endcond */ } #endif /* ThePEG_SSSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSVertex.cc0000644000175000017500000000567611747772425020604 0ustar sunsun// -*- C++ -*- // // VVSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVSVertex class. // #include "VVSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Reference.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVSVertex::initVVSVertex; // Definition of the static class description member. void VVSVertex::Init() { static ClassDocumentation documentation ("The VVSVertex class is the implementation of the" "vector-vector-scalar vertex. All such vertices should inherit" "from it."); } // evaluate the vertex Complex VVSVertex::evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca) { // calculate the coupling setCoupling(q2,vec1.particle(),vec2.particle(),sca.particle()); // evaluate the vertex return Complex(0.,1.)*norm()*sca.wave()*vec1.wave().dot(vec2.wave()); } // evaluate an off-shell vector VectorWaveFunction VVSVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec, const ScalarWaveFunction & sca, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout = vec.momentum()+sca.momentum(); // calculate the coupling setCoupling(q2,out,vec.particle(),sca.particle()); // prefactor Energy2 p2 = pout.m2(); if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); Complex fact = norm()*sca.wave()*propagator(iopt,p2,out,mass,width); // evaluate the wavefunction LorentzPolarizationVector vect; // massless case if(mass.real()==ZERO) { vect = fact*vec.wave(); } // massive case else { complex dot = vec.wave().dot(pout)/mass2; vect = fact*(vec.wave()-dot*pout); } return VectorWaveFunction(pout,out,vect); } // off-shell scalar ScalarWaveFunction VVSVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout = vec1.momentum()+vec2.momentum(); // calculate the coupling setCoupling(q2,vec1.particle(),vec2.particle(),out); // prefactor Energy2 p2 = pout.m2(); Complex fact = -norm()*propagator(iopt,p2,out,mass,width); // evaluate the wavefunction Complex output = fact*vec1.wave().dot(vec2.wave()); return ScalarWaveFunction(pout,out,output); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VSSVertex.cc0000644000175000017500000000646211747772425020573 0ustar sunsun// -*- C++ -*- // // VSSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VSSVertex class. // #include "VSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VSSVertex::initVSSVertex; // Definition of the static class description member. void VSSVertex::Init() { static ClassDocumentation documentation ("The VSSVertex class is hte implementation of the" "vector-scalar-scalar vertex for helicity amplitude calculations." " all such vertices should inherit from it"); } // evaluate the vertex Complex VSSVertex::evaluate(Energy2 q2, const VectorWaveFunction & vec, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2) { // calculate the coupling setCoupling(q2,vec.particle(),sca1.particle(),sca2.particle()); // calculate the vertex return UnitRemoval::InvE * -Complex(0.,1.) * norm() * sca1.wave()*sca2.wave()* vec.wave().dot(sca1.momentum()-sca2.momentum()); } // off-shell vector VectorWaveFunction VSSVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout(sca1.momentum()+sca2.momentum()); // calculate the coupling setCoupling(q2,out,sca1.particle(),sca2.particle()); // mass and width if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); // calculate the prefactor Energy2 p2 = pout.m2(); Complex fact = norm()*sca1.wave()*sca2.wave()*propagator(iopt,p2,out,mass,width); // compute the vector LorentzPolarizationVector vec; // massless outgoing vector if(mass.real()==ZERO) { vec = UnitRemoval::InvE * fact * (sca2.momentum()-sca1.momentum()); } // massive outgoing vector else { // first the dot product for the second term Complex dot = (sca1.m2()-sca2.m2())/mass2; // compute the vector vec = fact * (LorentzPolarizationVector(UnitRemoval::InvE * (sca2.momentum()-sca1.momentum())) +dot*UnitRemoval::InvE * pout); } return VectorWaveFunction(pout,out,vec); } // return an off-shell scalar ScalarWaveFunction VSSVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const VectorWaveFunction & vec, const ScalarWaveFunction & sca, complex mass, complex width ) { // momentum of the particle Lorentz5Momentum pout = sca.momentum()+vec.momentum(); // calculate the coupling setCoupling(q2,vec.particle(),sca.particle(),out); // calculate the prefactor Energy2 p2 = pout.m2(); Complex fact = norm()*sca.wave()*propagator(iopt,p2,out,mass,width); // compute the wavefunction fact = UnitRemoval::InvE * fact*vec.wave().dot(sca.momentum()+pout); return ScalarWaveFunction(pout,out,fact); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/GeneralVVSVertex.h0000644000175000017500000001621111747772425021727 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_GeneralVVSVertex_H #define HELICITY_GeneralVVSVertex_H // // This is the declaration of the GeneralVVSVertex class. // #include "ThePEG/Helicity/Vertex/AbstractVVSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "GeneralVVSVertex.fh" namespace ThePEG { namespace Helicity { using namespace ThePEG; /** * The GeneralVVSVertex class implements a * general Vector-Vector-Scalar vertex allowing for decay modes * that only enter at the one-loop level * * The loop integral is calculated by Passarino-Veltman reduction * and the coefficients are stored here. They must be calculated * in the inheriting class along with implementation of the * setCoupling member. * * The vertex takes the form * \f[ a_{00}g^{\mu\nu}p_1\cdot p_2 + a_{11}p_1^\mu p_1^\nu * + a_{12}p_1^\mu p_2^\nu + a_{21}p_2^\mu p_1^\nu * + a_{22}p_2^\mu p_2^\nu +a_e\epsilon^{p_1 \mu \nu p_2}\f] * */ class GeneralVVSVertex: public AbstractVVSVertex { public: /** * The default constructor. */ GeneralVVSVertex() : _a00(1), _a11(0), _a12(0), _a21(0), _a22(0), _aEp(0) {} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param sca3 The wavefunction for the scalar. */ virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec2 The wavefunction for the vector. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate coupling. * @param q2 Scale at which to evaluate couplings * @param part1 ParticleDataPointer to first particle * @param part2 ParticleDataPointer to second particle * @param part3 ParticleDataPointer to third particle */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2, tcPDPtr part3)=0; public: /**@name Set and Get tensor coefficients.*/ //@{ /** * Access coefficient of \f$g^{\mu\nu}\f$ */ Complex a00() const {return _a00;} /** * Access coefficient of \f$p_1^\mu p_1^\nu\f$ */ Complex a11() const {return _a11;} /** * Access coefficient of \f$p_1^\mu p_2^\nu\f$ */ Complex a12() const {return _a12;} /** * Access coefficient of \f$p_2^\mu p_1^\nu\f$ */ Complex a21() const {return _a21;} /** * Access coefficient of \f$p_2^\mu p_2^\nu\f$ */ Complex a22() const {return _a22;} /** * Access coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$ */ Complex aEp() const {return _aEp;} /** * Set tensor coefficient of \f$g^{\mu\nu}\f$ */ void a00(const Complex & val) {_a00 = val;} /** * Set tensor coefficient of \f$p_1^\mu p_1^\nu\f$ */ void a11(const Complex & val) {_a11 = val;} /** * Set tensor coefficient of \f$p_1^\mu p_2^\nu\f$ */ void a12(const Complex & val) {_a12 = val;} /** * Set tensor coefficient of \f$p_2^\mu p_1^\nu\f$ */ void a21(const Complex & val) {_a21 = val;} /** * Set tensor coefficient of \f$p_2^\mu p_2^\nu\f$ */ void a22(const Complex & val) {_a22 = val;} /** * Set tensor coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$ */ void aEp(const Complex & val) {_aEp = val;} //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initGeneralVVSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ GeneralVVSVertex & operator=(const GeneralVVSVertex &); private: /** @name Store tensor coefficients.*/ //@{ /** * Coefficient of \f$g^{\mu\nu}\f$ */ Complex _a00; /** * Coefficient of \f$p_1^\mu p_1^\nu\f$ */ Complex _a11; /** * Coefficient of \f$p_1^\mu p_2^\nu\f$ */ Complex _a12; /** * Coefficient of \f$p_2^\mu p_1^\nu\f$ */ Complex _a21; /** * Coefficient of \f$p_2^\mu p_2^\nu\f$ */ Complex _a22; /** * Coefficient of \f$\epsilon^{\mu\nu\alpha\beta}p_1\alpha p_2\beta\f$ */ Complex _aEp; //@} }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of GeneralVVSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of GeneralVVSVertex. */ typedef Helicity::AbstractVVSVertex NthBase; }; /** This template specialization informs ThePEG about the name of * the GeneralVVSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::GeneralVVSVertex"; } }; /** @endcond */ } #endif /* HELICITY_GeneralVVSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/Makefile.in0000644000175000017500000004516311756366734020463 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Helicity/Vertex/Scalar DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGSVertex_la_LIBADD = am_libThePEGSVertex_la_OBJECTS = FFSVertex.lo SSSSVertex.lo \ SSSVertex.lo VSSVertex.lo VVSSVertex.lo VVSVertex.lo \ GeneralVVSVertex.lo RFSVertex.lo libThePEGSVertex_la_OBJECTS = $(am_libThePEGSVertex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGSVertex_la_SOURCES) DIST_SOURCES = $(libThePEGSVertex_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libThePEGSVertex.la libThePEGSVertex_la_SOURCES = \ FFSVertex.cc FFSVertex.h FFSVertex.fh \ SSSSVertex.cc SSSSVertex.h SSSSVertex.fh \ SSSVertex.cc SSSVertex.h SSSVertex.fh \ VSSVertex.cc VSSVertex.h VSSVertex.fh \ VVSSVertex.cc VVSSVertex.h VVSSVertex.fh \ VVSVertex.cc VVSVertex.h VVSVertex.fh \ GeneralVVSVertex.cc GeneralVVSVertex.h \ GeneralVVSVertex.fh \ RFSVertex.cc RFSVertex.h RFSVertex.fh all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/Vertex/Scalar/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/Vertex/Scalar/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGSVertex.la: $(libThePEGSVertex_la_OBJECTS) $(libThePEGSVertex_la_DEPENDENCIES) $(EXTRA_libThePEGSVertex_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGSVertex_la_OBJECTS) $(libThePEGSVertex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FFSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GeneralVVSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RFSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VVSVertex.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSVertex.fh0000644000175000017500000000044611747772425020574 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the SSSVertex class. // #ifndef ThePEG_SSSVertex_FH #define ThePEG_SSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class SSSVertex; ThePEG_DECLARE_POINTERS(SSSVertex,SSSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VVSSVertex.cc0000644000175000017500000000624711747772425020722 0ustar sunsun// -*- C++ -*- // // VVSSVertex.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VVSSVertex class. // #include "VVSSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription VVSSVertex::initVVSSVertex; // Definition of the static class description member. void VVSSVertex::Init() { static ClassDocumentation documentation ("The VVSSVertex class is the implementation of helicity" "amplitude calculation of the vector-vector-scalar-scalar vertex." "All classes for this type of vertex should inherit from it."); } // evaluate the vertex Complex VVSSVertex::evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2) { // calculate the coupling setCoupling(q2,vec1.particle(),vec2.particle(), sca1.particle(),sca2.particle()); // evaluate the vertex return Complex(0.,1.)*norm()*sca1.wave()*sca2.wave()* vec1.wave().dot(vec2.wave()); } // evaluate an off-shell vector VectorWaveFunction VVSSVertex::evaluate(Energy2 q2, int iopt, tcPDPtr out, const VectorWaveFunction & vec, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout = vec.momentum()+sca1.momentum()+sca2.momentum(); // calculate the coupling setCoupling(q2,out,vec.particle(),sca1.particle(),sca2.particle()); // prefactor Energy2 p2 = pout.m2(); if(mass.real() < ZERO) mass = out->mass(); complex mass2 = sqr(mass); Complex fact = norm()*sca1.wave()*sca2.wave()*propagator(iopt,p2,out,mass,width); // evaluate the wavefunction LorentzPolarizationVector vect; // massless case if(mass.real()==ZERO) { vect = fact*vec.wave(); } // massive case else { complex dot = vec.wave().dot(pout)/mass2; vect = fact*(vec.wave()-(dot*pout)); } return VectorWaveFunction(pout,out,vect); } // off-shell scalar ScalarWaveFunction VVSSVertex::evaluate(Energy2 q2, int iopt,tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const ScalarWaveFunction & sca, complex mass, complex width) { // outgoing momentum Lorentz5Momentum pout = vec1.momentum()+vec2.momentum()+sca.momentum(); // calculate the coupling setCoupling(q2,vec1.particle(),vec2.particle(),out,sca.particle()); // prefactor Energy2 p2 = pout.m2(); Complex fact = -norm()*sca.wave()*propagator(iopt,p2,out,mass,width); // evaluate the wavefunction Complex output = fact*vec1.wave().dot(vec2.wave()); return ScalarWaveFunction(pout,out,output); } thepeg-1.8.0.orig/Helicity/Vertex/Scalar/RFSVertex.h0000644000175000017500000002243411747772425020411 0ustar sunsun// -*- C++ -*- // // RFSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RFSVertex_H #define ThePEG_RFSVertex_H // // This is the declaration of the RFSVertex class. #include "ThePEG/Helicity/Vertex/AbstractRFSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/SpinorBarWaveFunction.h" #include "RFSVertex.fh" namespace ThePEG { namespace Helicity{ /** \ingroup Helicity * * The RFSVertex class is the implementation of the interact of a * scalar boson and a spin-3/2 fermion-antifermion pair. It inherits from the AbstractRFSVertex * class for storage of the particles interacting at the vertex and implements * the helicity calculations. * * Implementations of specific interactions should inherit from this and implement * the virtual setCoupling member. * * The form of the vertex is * \f[ic\bar{f_2}_\mu p_{1}^\mu a^\lambda P_\lambda f_1\phi_3\f] * where \f$a^\pm\f$ are the right and left couplings and \f$P_\pm=(1\pm\gamma_5)\f$ * are the chirality projection operators. * * @see AbstractRFSVertex */ class RFSVertex: public AbstractRFSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the RS ferimon. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. */ Complex evaluate(Energy2 q2,const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3); /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the RS antifermion. * @param sca3 The wavefunction for the scalar. */ Complex evaluate(Energy2 q2,const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell spinor. * @param out The ParticleData pointer for the off-shell spinor. * @param sp1 The wavefunction for the ferimon. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ RSSpinorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ SpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell barred spinor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell barred spinor. * @param out The ParticleData pointer for the off-shell barred spinor. * @param sbar2 The wavefunction for the antifermion. * @param sca3 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ RSSpinorBarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorBarWaveFunction & sbar2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the RS ferimon. * @param sbar2 The wavefunction for the antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const RSSpinorWaveFunction & sp1, const SpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sp1 The wavefunction for the ferimon. * @param sbar2 The wavefunction for the RS antifermion. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const SpinorWaveFunction & sp1, const RSSpinorBarWaveFunction & sbar2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1, tcPDPtr part2,tcPDPtr part3)=0; /** * Get the couplings */ //@{ /** * Get the left coupling. */ Complex left() { return _left; } /** * Get the right coupling. */ Complex right() { return _right; } //@} protected: /** * Set the couplings */ //@{ /** * Set the left coupling. */ void left(Complex in) { _left = in; } /** * Set the right coupling. */ void right(Complex in) { _right = in; } //@} private: /** * Describe an abstract base class with persistent data. */ static AbstractNoPIOClassDescription initRFSVertex; /** * Private and non-existent assignment operator. */ RFSVertex & operator=(const RFSVertex &); private: /** * Storage of the left coupling. */ Complex _left; /** * Storage of the right coupling. */ Complex _right; }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of RFSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of RFSVertex. */ typedef ThePEG::Helicity::AbstractRFSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::RFSVertex"; } }; /** @endcond */ } #endif /* ThePEG_RFSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/SSSSVertex.fh0000644000175000017500000000045411747772425020716 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the SSSSVertex class. // #ifndef ThePEG_SSSSVertex_FH #define ThePEG_SSSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class SSSSVertex; ThePEG_DECLARE_POINTERS(SSSSVertex,SSSSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/GeneralVVSVertex.fh0000644000175000017500000000056611747772425022103 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the GeneralVVSVertex class. // #ifndef HELICITY_GeneralVVSVertex_FH #define HELICITY_GeneralVVSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class GeneralVVSVertex; } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::GeneralVVSVertex,GeneralVVSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/Scalar/Makefile.am0000644000175000017500000000065611747772425020446 0ustar sunsunnoinst_LTLIBRARIES = libThePEGSVertex.la libThePEGSVertex_la_SOURCES = \ FFSVertex.cc FFSVertex.h FFSVertex.fh \ SSSSVertex.cc SSSSVertex.h SSSSVertex.fh \ SSSVertex.cc SSSVertex.h SSSVertex.fh \ VSSVertex.cc VSSVertex.h VSSVertex.fh \ VVSSVertex.cc VVSSVertex.h VVSSVertex.fh \ VVSVertex.cc VVSVertex.h VVSVertex.fh \ GeneralVVSVertex.cc GeneralVVSVertex.h \ GeneralVVSVertex.fh \ RFSVertex.cc RFSVertex.h RFSVertex.fh thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VSSVertex.h0000644000175000017500000001147611747772425020436 0ustar sunsun// -*- C++ -*- // // VSSVertex.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VSSVertex_H #define ThePEG_VSSVertex_H // // This is the declaration of the VSSVertex class. // #include "ThePEG/Helicity/Vertex/AbstractVSSVertex.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "VSSVertex.fh" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The VSSVertex class is the implementation of the vector-scalar-scalar * vertex. It inherits from the AbstractVSSVertex class for storage of the particles * and implements the helicity calculations. * * All such vertices should inherit from this class and implement the virtual * setCoupling member * * The form of the vertex is * \f[-ic\left(p_2-p_3\right)\cdot\epsilon_1\phi_2\phi_3\f] * * @see AbstractVSSVertex */ class VSSVertex: public AbstractVSSVertex { public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the vector. * @param sca2 The wavefunction for the first scalar. * @param sca3 The wavefunction for the second scalar. */ Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3); /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sca2 The wavefunction for the first scalar. * @param sca3 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV); /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the vector. * @param sca2 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV); //@} /** * Calculate the couplings. This method is virtual and must be implemented in * classes inheriting from this. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param part1 The ParticleData pointer for the first particle. * @param part2 The ParticleData pointer for the second particle. * @param part3 The ParticleData pointer for the third particle. */ virtual void setCoupling(Energy2 q2,tcPDPtr part1,tcPDPtr part2,tcPDPtr part3)=0; private: /** * Describe an abstract class with persistent data. */ static AbstractNoPIOClassDescription initVSSVertex; /** * Private and non-existent assignment operator. */ VSSVertex & operator=(const VSSVertex &); }; } /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the base class of VSSVertex. */ typedef ThePEG::Helicity::AbstractVSSVertex NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VSSVertex"; } }; /** @endcond */ } #endif /* ThePEG_VSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Scalar/VSSVertex.fh0000644000175000017500000000044511747772425020576 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VSSVertex class. // #ifndef ThePEG_VSSVertex_FH #define ThePEG_VSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class VSSVertex; ThePEG_DECLARE_POINTERS(VSSVertex,VSSVertexPtr); } } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVertex.fh0000644000175000017500000000076311754467215021062 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVVVertex class. // #ifndef HELICITY_AbstractVVVVertex_FH #define HELICITY_AbstractVVVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVVVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVV = 333; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVVVertex,AbstractVVVVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVSSVertex.fh0000644000175000017500000000077311754467215021203 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVVSSVertex class. // #ifndef HELICITY_AbstractVVSSVertex_FH #define HELICITY_AbstractVVSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVVSSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VVSS = 3311; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVVSSVertex,AbstractVVSSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFSVertex.fh0000644000175000017500000000076311754467215021033 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractRFSVertex class. // #ifndef HELICITY_AbstractRFSVertex_FH #define HELICITY_AbstractRFSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractRFSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T RFS = 421; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractRFSVertex,AbstractRFSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVTVertex.h0000644000175000017500000001061111754467375020712 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVTVertex_H #define HELICITY_AbstractVVTVertex_H // // This is the declaration of the AbstractVVTVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/TensorWaveFunction.h" #include "AbstractVVTVertex.fh" namespace ThePEG { namespace Helicity { /** * Here is the documentation of the AbstractVVTVertex class. */ class AbstractVVTVertex: public VertexBase { public: /** * Default constructor */ AbstractVVTVertex() : VertexBase(VertexType::VVT) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evalulate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param ten3 The wavefunction for the tensor. * @param vmass The mass of the vector boson */ virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const TensorWaveFunction & ten3, Energy vmass=-GeV) = 0; /** * Evaluate the off-shell tensor coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell tensor. * @param out The ParticleData pointer for the off-shell tensor. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object * @param vmass The mass of the vector boson */ virtual TensorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, Energy vmass=-GeV, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param vec1 The wavefunction for the first vector. * @param ten3 The wavefunction for the tensor. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const TensorWaveFunction & ten3, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVTVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVTVertex & operator=(const AbstractVVTVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVTVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVTVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVTVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVTVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVTVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractVSSVertex.h0000644000175000017500000001041711754467375020712 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVSSVertex_H #define HELICITY_AbstractVSSVertex_H // // This is the declaration of the AbstractVSSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractVSSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractVSSVertex class is the base class for vector-scalar-scalar * interactions in ThePEG */ class AbstractVSSVertex: public VertexBase { public: /** * Default constructor */ AbstractVSSVertex() : VertexBase(VertexType::VSS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param vec1 The wavefunction for the vector. * @param sca2 The wavefunction for the first scalar. * @param sca3 The wavefunction for the second scalar. */ virtual Complex evaluate(Energy2 q2,const VectorWaveFunction & vec1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3) = 0; /** * Evaluate the off-shell vector coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell vector. * @param out The ParticleData pointer for the off-shell vector. * @param sca2 The wavefunction for the first scalar. * @param sca3 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual VectorWaveFunction evaluate(Energy2 q2,int iopt,tcPDPtr out, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3, complex mass=-GeV, complex width=-GeV) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param vec1 The wavefunction for the vector. * @param sca2 The wavefunction for the scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const VectorWaveFunction & vec1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVSSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVSSVertex & operator=(const AbstractVSSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVSSVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVSSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVSSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/VertexBase.h0000644000175000017500000003171111754473631017415 0ustar sunsun// -*- C++ -*- // // VertexBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VertexBase_H #define ThePEG_VertexBase_H // // This is the declaration of the VertexBase class. #include #include #include #include #include "ThePEG/StandardModel/StandardModelBase.h" #include "VertexBase.fh" namespace ThePEG { namespace Helicity { /** * Namespace for naming of vertices. Each child class should extend this * with its own spin configuration. */ namespace VertexType { typedef unsigned T; /** * Undefined Enum for the Lorentz structures */ const T UNDEFINED = 0; } /** \ingroup Helicity * * The VertexBase class is the base class for all helicity amplitude * vertices. In implements the storage of the particles * which are allowed to interact at the vertex and some simple functions * which are often needed by the classes which implement the specific * vertices. * * In practice little use is made of this information and it is mainly * included for future extensions. It can also be used at the development * and debugging stage. * */ class VertexBase : public Interfaced { /** * The output operator is a friend to avoid the data being public. */ friend ostream & operator<<(ostream &, const VertexBase &); public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor for \f$n\f$-point vertices. * @param name The type of vertex * @param kine Whether the kinematic invariants should be calculated. */ VertexBase(VertexType::T name, bool kine=false); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); public: /** * Access to the particle information */ //@{ /** * Number of different particle combinations allowed. */ unsigned int size() const { return _particles.size(); } public: /** * Is a particle allowed as an incoming particle? * @param p The ParticleData pointer */ bool isIncoming(tPDPtr p) const { return _inpart.find(p) != _inpart.end(); } /** * Is a particle allowed as an outgoing particle? * @param p The ParticleData pointer */ bool isOutgoing(tPDPtr p) const { return _outpart.find(p) != _outpart.end(); } /** * Get the list of incoming particles. */ const set & incoming() const { return _inpart; } /** * Get the list of outgoing particles. */ const set & outgoing() const { return _outpart; } /** * Get the coupling. */ Complex norm() const { return _norm; } /** * Function to search the list. * @param ilist Which list to search * @param id The PDG code to look for. */ vector search(unsigned int ilist,long id) const; /** * Function to search the list. * @param ilist Which list to search * @param id The particle to look for. */ vector search(unsigned int ilist,tcPDPtr id) const; /** * Is a given combination allowed. * @param id1 PDG code of the first particle. * @param id2 PDG code of the second particle. * @param id3 PDG code of the third particle. * @param id4 PDG code of the fourth particle. */ bool allowed(long id1, long id2, long id3, long id4 = 0) const; /** * Get name of Vertex */ VertexType::T getName() const { return _theName; } /** * Get number of lines on Vertex */ unsigned int getNpoint() const { return _npoint; } /** * Get the order in \f$g_EM\f$ */ unsigned int orderInGem() const { return _ordergEM; } /** * Get the order in \f$g_s\f$ */ unsigned int orderInGs() const { return _ordergS; } //@} public: /** * @name Calculation of the strong, electromagnetic and weak couplings */ //@{ /** * Strong coupling */ double strongCoupling(Energy2 q2) const { if(_coupopt==0) { double val = 4.0*Constants::pi*generator()->standardModel()->alphaS(q2); assert(val>=0.); return sqrt(val); } else if(_coupopt==1) return sqrt(4.0*Constants::pi*generator()->standardModel()->alphaS()); else return _gs; } /** * Electromagnetic coupling */ double electroMagneticCoupling(Energy2 q2) const { if(_coupopt==0) return sqrt(4.0*Constants::pi*generator()->standardModel()->alphaEMME(q2)); else if(_coupopt==1) return sqrt(4.0*Constants::pi*generator()->standardModel()->alphaEMMZ()); else return _ee; } /** * Weak coupling */ double weakCoupling(Energy2 q2) const { if( _coupopt == 0 ) return sqrt(4.0*Constants::pi*generator()->standardModel()->alphaEMME(q2)/ generator()->standardModel()->sin2ThetaW()); else if( _coupopt == 1 ) return sqrt(4.0*Constants::pi*generator()->standardModel()->alphaEMMZ()/ generator()->standardModel()->sin2ThetaW()); else return _ee/_sw; } double sin2ThetaW() const { if( _coupopt == 0 || _coupopt == 1) return generator()->standardModel()->sin2ThetaW(); else return sqr(_sw); } //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans); /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} protected: /** * Members to set-up the particles */ //@{ /** * Set up the lists of outer particles for the vertex. * @param ids A vector of PDG codes for the particles. */ void addToList(const vector & ids); /** * Set up the lists of outer particles for the three-/four-point vertex. * For small vertices, this form is much easier to use. * @param ida The PDG codes for the first set of particles. * @param idb The PDG codes for the second set of particles. * @param idc The PDG codes for the third set of particles. * @param idd The PDG codes for the fourth set of particles. */ void addToList(long ida, long idb, long idc, long idd = 0); //@} protected: /** * Members for the amplitude calculations */ //@{ /** * Set the coupling. * @param coup The coupling. */ void norm(const Complex & coup) { _norm = coup; } /** * Calculate the propagator for a diagram. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ virtual Complex propagator(int iopt, Energy2 q2,tcPDPtr part, complex mass=-GeV, complex width=-GeV); /** * Calculate propagator multiplied by coupling. * @param iopt The option for the Breit-Wigner shape * @param q2 The scale * @param part The ParticleData pointer for the off-shell particle. * @param mass The mass if not to be taken from the ParticleData object * @param width The width if not to be taken from the ParticleData object */ Complex normPropagator(int iopt, Energy2 q2,tcPDPtr part, complex mass=-GeV, complex width=-GeV) { return _norm*propagator(iopt,q2,part,mass,width); } //@} public: /** @name Kinematic invariants for loop diagrams */ //@{ /** * Whether or not to calculate the kinematics invariants */ bool kinematics() const { return _calckinematics; } /** * Set whether or not to calculate the kinematics invariants */ void kinematics(bool kine ) { _calckinematics=kine; } /** * Calculate the kinematics for a 3-point vertex */ void calculateKinematics(const Lorentz5Momentum & p0, const Lorentz5Momentum & p1, const Lorentz5Momentum & p2) { _kine[0][0]=p0*p0; _kine[1][1]=p1*p1; _kine[2][2]=p2*p2; _kine[0][1]=p0*p1;_kine[1][0]=_kine[0][1]; _kine[0][2]=p0*p2;_kine[2][0]=_kine[0][2]; _kine[1][2]=p1*p2;_kine[2][1]=_kine[1][2]; } /** * Calculate the kinematics for a 4-point vertex */ void calculateKinematics(const Lorentz5Momentum & p0, const Lorentz5Momentum & p1, const Lorentz5Momentum & p2, const Lorentz5Momentum & p3) { _kine[0][0]=p0*p0; _kine[1][1]=p1*p1; _kine[2][2]=p2*p2; _kine[3][3]=p3*p3; _kine[0][1]=p0*p1;_kine[1][0]=_kine[0][1]; _kine[0][2]=p0*p2;_kine[2][0]=_kine[0][2]; _kine[0][3]=p0*p3;_kine[3][0]=_kine[0][3]; _kine[1][2]=p1*p2;_kine[2][1]=_kine[1][2]; _kine[1][3]=p1*p3;_kine[3][1]=_kine[1][3]; _kine[2][3]=p2*p3;_kine[3][2]=_kine[2][3]; } /** * Calculate the kinematics for a n-point vertex */ void calculateKinematics(const vector & p) { unsigned int ix,iy; for(ix=0;ix initVertexBase; /** * Private and non-existent assignment operator. */ VertexBase & operator=(const VertexBase &); private: /** * Storage of the particles. */ //@{ /** * Particles interacting at the vertex */ vector > _particles; /** * Number of particles at the vertex */ unsigned int _npoint; /** * ParticleData pointers for the allowed incoming particles. */ set _inpart; /** * ParticleData pointers for the allowed outgoing particles. */ set _outpart; //@} /** * The overall coupling. */ Complex _norm; /** * Whether or not to calculate the kinematic invariants for the vertex */ bool _calckinematics; /** * Kinematica quantities needed for loop vertices */ vector > _kine; /** * Name of vertex */ VertexType::T _theName; /** * Order of vertex in \f$g_EM\f$ */ unsigned int _ordergEM; /** * Order of vertex in \f$g_s\f$ */ unsigned int _ordergS; /** * option for the coupling */ unsigned int _coupopt; /** * Fixed value of strong coupling to use */ double _gs; /** * Fixed value of the electromagentic coupling to use */ double _ee; /** * Fixed value of \f$\sin\theta_W\f$ to use */ double _sw; }; /** * Output the information on the vertex. */ ostream & operator<<(ostream &, const VertexBase &); } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of VertexBase. */ template <> struct BaseClassTrait { /** Typedef of the base class of VertexBase. */ typedef Interfaced NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::VertexBase"; } }; /** @endcond */ } #endif /* ThePEG_VertexBase_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSTVertex.fh0000644000175000017500000000076311754467215021052 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractSSTVertex class. // #ifndef HELICITY_AbstractSSTVertex_FH #define HELICITY_AbstractSSTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractSSTVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T SST = 115; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractSSTVertex,AbstractSSTVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSVertex.h0000644000175000017500000000665511754467375020720 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractSSSVertex_H #define HELICITY_AbstractSSSVertex_H // // This is the declaration of the AbstractSSSVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/ScalarWaveFunction.h" #include "AbstractSSSVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractSSSVertex class is the base class for all scalar-scalar-scalar * interactions in ThePEG */ class AbstractSSSVertex: public VertexBase { public: /** * Default constructor */ AbstractSSSVertex() : VertexBase(VertexType::SSS) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param sca3 The wavefunction for the third scalar. */ virtual Complex evaluate(Energy2 q2,const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, const ScalarWaveFunction & sca3) = 0; /** * Evaluate the off-shell scalar coming from the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Option of the shape of the Breit-Wigner for the off-shell scalar. * @param out The ParticleData pointer for the off-shell scalar. * @param sca1 The wavefunction for the first scalar. * @param sca2 The wavefunction for the second scalar. * @param mass The mass of the off-shell particle if not taken from the ParticleData * object * @param width The width of the off-shell particle if not taken from the ParticleData * object */ virtual ScalarWaveFunction evaluate(Energy2 q2,int iopt, tcPDPtr out, const ScalarWaveFunction & sca1, const ScalarWaveFunction & sca2, complex mass=-GeV, complex width=-GeV) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractSSSVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractSSSVertex & operator=(const AbstractSSSVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractSSSVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractSSSVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractSSSVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractSSSVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractSSSVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/Makefile.in0000644000175000017500000006413511756366734017256 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Helicity/Vertex DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGVertex_la_DEPENDENCIES = Scalar/libThePEGSVertex.la \ Vector/libThePEGVVertex.la Tensor/libThePEGTVertex.la am_libThePEGVertex_la_OBJECTS = VertexBase.lo AbstractFFSVertex.lo \ AbstractFFVVertex.lo AbstractVVVVertex.lo AbstractSSSVertex.lo \ AbstractSSSSVertex.lo AbstractVSSVertex.lo \ AbstractFFTVertex.lo AbstractVVTVertex.lo AbstractVVSVertex.lo \ AbstractSSTVertex.lo AbstractVVSSVertex.lo \ AbstractFFVTVertex.lo AbstractVVVTVertex.lo \ AbstractVVVVVertex.lo AbstractRFSVertex.lo \ AbstractRFVVertex.lo libThePEGVertex_la_OBJECTS = $(am_libThePEGVertex_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGVertex_la_SOURCES) DIST_SOURCES = $(libThePEGVertex_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = Scalar Vector Tensor noinst_LTLIBRARIES = libThePEGVertex.la libThePEGVertex_la_SOURCES = \ VertexBase.cc VertexBase.h VertexBase.fh \ AbstractFFSVertex.h AbstractFFSVertex.fh AbstractFFSVertex.cc \ AbstractFFVVertex.h AbstractFFVVertex.fh AbstractFFVVertex.cc \ AbstractVVVVertex.h AbstractVVVVertex.fh AbstractVVVVertex.cc \ AbstractSSSVertex.h AbstractSSSVertex.fh AbstractSSSVertex.cc \ AbstractSSSSVertex.h AbstractSSSSVertex.fh AbstractSSSSVertex.cc \ AbstractVSSVertex.h AbstractVSSVertex.fh AbstractVSSVertex.cc \ AbstractFFTVertex.h AbstractFFTVertex.fh AbstractFFTVertex.cc \ AbstractVVTVertex.h AbstractVVTVertex.fh AbstractVVTVertex.cc \ AbstractVVSVertex.h AbstractVVSVertex.fh AbstractVVSVertex.cc \ AbstractSSTVertex.h AbstractSSTVertex.fh AbstractSSTVertex.cc \ AbstractVVSSVertex.h AbstractVVSSVertex.fh AbstractVVSSVertex.cc \ AbstractFFVTVertex.h AbstractFFVTVertex.fh AbstractFFVTVertex.cc \ AbstractVVVTVertex.h AbstractVVVTVertex.fh AbstractVVVTVertex.cc \ AbstractVVVVVertex.h AbstractVVVVVertex.fh AbstractVVVVVertex.cc \ AbstractRFSVertex.h AbstractRFSVertex.fh AbstractRFSVertex.cc \ AbstractRFVVertex.h AbstractRFVVertex.fh AbstractRFVVertex.cc libThePEGVertex_la_LIBADD = Scalar/libThePEGSVertex.la \ Vector/libThePEGVVertex.la \ Tensor/libThePEGTVertex.la all: all-recursive .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/Vertex/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/Vertex/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGVertex.la: $(libThePEGVertex_la_OBJECTS) $(libThePEGVertex_la_DEPENDENCIES) $(EXTRA_libThePEGVertex_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGVertex_la_OBJECTS) $(libThePEGVertex_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractFFSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractFFTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractFFVTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractFFVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractRFSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractRFVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractSSSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractSSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractSSTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVSSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVSVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVVTVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVVVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AbstractVVVVertex.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VertexBase.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFVVertex.fh0000644000175000017500000000076311754467215021036 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractRFVVertex class. // #ifndef HELICITY_AbstractRFVVertex_FH #define HELICITY_AbstractRFVVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractRFVVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T RFV = 423; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractRFVVertex,AbstractRFVVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/VertexBase.cc0000644000175000017500000002375411747772425017570 0ustar sunsun// -*- C++ -*- // // VertexBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VertexBase class. // #include "VertexBase.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Utilities/Rebinder.h" #include #include #include using namespace ThePEG; using namespace ThePEG::Helicity; VertexBase::VertexBase(VertexType::T name, bool kine) : _npoint(1), _norm(0), _calckinematics(kine), _kine(5,vector(5)), _theName(name), _ordergEM(0), _ordergS(0), _coupopt(0), _gs(sqrt(4.*Constants::pi*0.3)), _ee(sqrt(4.*Constants::pi/137.04)), _sw(sqrt(0.232)) { assert ( name != VertexType::UNDEFINED ); // Count number of lines from length of 'name' while ( name /= 10 ) ++_npoint; } // setup the lists of particles // should only be called from child class constructors void VertexBase::addToList(long ida, long idb, long idc, long idd) { if ( idd == 0 ) { const long id[] = { ida, idb, idc }; addToList(vector(id,id+3)); } else { const long id[] = { ida, idb, idc, idd }; addToList(vector(id,id+4)); } } void VertexBase::addToList(const vector & ids) { assert( ids.size() == _npoint ); vector tmp; int chargeSum = 0; for (vector::const_iterator it = ids.begin(); it != ids.end(); ++it) { tPDPtr p = getParticleData(*it); if ( !p ) return; // needed e.g. to deal with chi_5 in MSSM tmp.push_back(p); chargeSum += p->iCharge(); } assert( tmp.size() == _npoint ); if ( chargeSum != 0 ) { cerr << "Problem with the addToList() calls in " << fullName() << ":\n" << "Vertex particles "; copy (ids.begin(), ids.end(), std::ostream_iterator(cerr," ")); cerr << "have non-zero electric charge " << chargeSum << "/3.\n"; assert( false ); } _particles.push_back(tmp); } void VertexBase::doinit() { Interfaced::doinit(); // set up the incoming and outgoing particles assert( _outpart.empty() && _inpart.empty() ); for ( unsigned int ix=0; ix<_particles.size(); ++ix ) { for ( vector::const_iterator it = _particles[ix].begin(); it != _particles[ix].end(); ++it ) { tPDPtr p = *it; assert( p ); assert ( p->id() == getParticleData(p->id())->id() ); tPDPtr cc = p->CC(); _inpart.insert( cc ? cc : p ); _outpart.insert(p); } } // check the couplings if(Debug::level>1&&_npoint!=2+_ordergEM+_ordergS) generator()->log() << fullName() << " has inconsistent number of " << "external particles and coupling order QED = " << _ordergEM << " QCD = " << _ordergS << " for" << " a perturbative intteraction, either its an" << " effective vertex or something is wrong.\n"; assert(_npoint<=2+_ordergEM+_ordergS); } void VertexBase::persistentOutput(PersistentOStream & os) const { os << _npoint << _inpart << _outpart << _particles << _calckinematics << _coupopt << _gs << _ee << _sw; } void VertexBase::persistentInput(PersistentIStream & is, int) { is >> _npoint >> _inpart >> _outpart >> _particles >> _calckinematics >> _coupopt >> _gs >> _ee >> _sw; } AbstractClassDescription VertexBase::initVertexBase; // Definition of the static class description member. void VertexBase::Init() { static Switch interfaceCalculateKinematics ("CalculateKinematics", "Calculate kinematic invariants at the vertices. This is" " mainly needed for loop vertices.", &VertexBase::_calckinematics, false, false, false); static SwitchOption interfaceCalculateKinematicsCalculate (interfaceCalculateKinematics, "Calculate", "Calculate the kinematics", true); static SwitchOption interfaceCalculateKinematicsNoKinematics (interfaceCalculateKinematics, "NoKinematics", "Do not calculate the kinematics", false); static ClassDocumentation documentation ("The VertexBase class is designed to be the base class" "of all vertices."); static Switch interfaceCoupling ("Coupling", "Treatment of the running couplings", &VertexBase::_coupopt, 0, false, false); static SwitchOption interfaceCouplingRunning (interfaceCoupling, "Running", "Use the running couplings from the StandardModel object", 0); static SwitchOption interfaceCouplingFixedSM (interfaceCoupling, "FixedSM", "Use the fixed values from the StandardModel object", 1); static SwitchOption interfaceCouplingFixedLocal (interfaceCoupling, "FixedLocal", "Use the local fixed values", 2); static Parameter interfaceStrongCoupling ("StrongCoupling", "The fixed value of the strong coupling to use", &VertexBase::_gs, sqrt(4.*Constants::pi*0.3), 0.0, 10.0, false, false, Interface::limited); static Parameter interfaceElectroMagneticCoupling ("ElectroMagneticCoupling", "The fixed value of the electromagnetic coupling to use", &VertexBase::_ee, sqrt(4.*Constants::pi/128.91), 0.0, 10.0, false, false, Interface::limited); static Parameter interfaceSinThetaW ("SinThetaW", "The fixed value of sin theta_W to use", &VertexBase::_sw, sqrt(0.232), 0.0, 10.0, false, false, Interface::limited); } // find particles with a given id vector VertexBase::search(unsigned int iloc,long idd) const { assert( iloc < _npoint ); vector out; for(unsigned int ix=0; ix<_particles.size(); ++ix) { bool found = _particles[ix][iloc]->id() == idd; if(found) { for(unsigned int iy=0;iy<_particles[ix].size();++iy) { out.push_back(_particles[ix][iy]->id()); } } } return out; } // find particles with a given id vector VertexBase::search(unsigned int iloc,tcPDPtr idd) const { assert( iloc < _npoint ); vector out; for(unsigned int ix=0; ix<_particles.size(); ++ix) { bool found = _particles[ix][iloc] == idd; if(found) { for(unsigned int iy=0;iy<_particles[ix].size();++iy) { out.push_back(_particles[ix][iy]); } } } return out; } // check a given combination is allowed for a three point vertex bool VertexBase::allowed(long ida, long idb, long idc, long idd) const { assert( ( _npoint==3 && idd == 0 ) || _npoint == 4 ); vector out = search(0,ida); for ( size_t ix = 0; ix < out.size(); ix += _npoint ) { if ( out[ix+1] == idb && out[ix+2] == idc && ( idd == 0 || out[ix+3] == idd ) ) { return true; } } return false; } // output the information ostream & ThePEG::Helicity::operator<<(ostream & os, const VertexBase & in) { os << "Information on Vertex" << endl; os << "This is an " << in._npoint << " vertex\n"; os << string( in._calckinematics ? "The kinematic invariants are calculated" : "The kinematics invariants are not calculated" ) << "\n"; os << " Particles allowed for this Vertex\n"; for(unsigned int ix=0;ixPDGName() << " "; } os << '\n'; } return os; } // calculate the propagator for a diagram Complex VertexBase::propagator(int iopt, Energy2 p2,tcPDPtr part, complex mass, complex width) { if(mass.real() < ZERO) mass = part->mass(); const complex mass2 = sqr(mass); if(width.real() < ZERO) { const tcWidthGeneratorPtr widthgen = part->widthGenerator(); width = widthgen && (iopt==2 || iopt==6 ) ? widthgen->width(*part,sqrt(p2)) : part->width(); } const Complex ii(0.,1.); complex masswidth; if(iopt==5) { return Complex(UnitRemoval::E2/p2); } else if(iopt==4) { return 1.0; } else if(p2 < ZERO) { if(iopt!=7) masswidth = ZERO; else masswidth = ii * mass * width; } else { switch (iopt) { case 1: case 2: case 7: masswidth = ii * mass * width; break; case 3: masswidth = ZERO; break; case 6: masswidth = ii * mass2 * width / sqrt(p2); return Complex(UnitRemoval::E2 * (mass2/p2) / (p2-mass2+masswidth)); default: assert( false ); return -999.999; } } return Complex(UnitRemoval::E2/(p2-mass2+masswidth)); } void VertexBase::rebind(const TranslationMap & trans) { vector >::iterator cit; vector::iterator cjt; for (cit = _particles.begin(); cit != _particles.end(); ++cit) { for (cjt = cit->begin(); cjt != cit->end(); ++cjt) { *cjt = trans.translate(*cjt); } } set::iterator it; set newinpart; for (it = _inpart.begin(); it != _inpart.end(); ++it) { newinpart.insert(trans.translate(*it)); } _inpart = newinpart; set newoutpart; for (it = _outpart.begin(); it != _outpart.end(); ++it) { newoutpart.insert(trans.translate(*it)); } _outpart = newoutpart; Interfaced::rebind(trans); } IVector VertexBase::getReferences() { IVector ret = Interfaced::getReferences(); vector >::iterator cit; vector::iterator cjt; for (cit = _particles.begin(); cit != _particles.end(); ++cit) { for (cjt = cit->begin(); cjt != cit->end(); ++cjt) { ret.push_back(*cjt); } } set::iterator it; for (it = _inpart.begin(); it != _inpart.end(); ++it) { ret.push_back(*it); } for (it = _outpart.begin(); it != _outpart.end(); ++it) { ret.push_back(*it); } return ret; } thepeg-1.8.0.orig/Helicity/Vertex/AbstractVSSVertex.fh0000644000175000017500000000076311754467215021054 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractVSSVertex class. // #ifndef HELICITY_AbstractVSSVertex_FH #define HELICITY_AbstractVSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractVSSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T VSS = 311; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractVSSVertex,AbstractVSSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractFFVTVertex.fh0000644000175000017500000000077311754467215021147 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractFFVTVertex class. // #ifndef HELICITY_AbstractFFVTVertex_FH #define HELICITY_AbstractFFVTVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractFFVTVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T FFVT = 2235; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractFFVTVertex,AbstractFFVTVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/AbstractSSSVertex.fh0000644000175000017500000000076311754467215021051 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the AbstractSSSVertex class. // #ifndef HELICITY_AbstractSSSVertex_FH #define HELICITY_AbstractSSSVertex_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { class AbstractSSSVertex; namespace VertexType { typedef unsigned T; /** * Enum for this Lorentz structure */ const T SSS = 111; } } } namespace ThePEG { ThePEG_DECLARE_POINTERS(Helicity::AbstractSSSVertex,AbstractSSSVertexPtr); } #endif thepeg-1.8.0.orig/Helicity/Vertex/Makefile.am0000644000175000017500000000253311747772425017235 0ustar sunsunSUBDIRS = Scalar Vector Tensor noinst_LTLIBRARIES = libThePEGVertex.la libThePEGVertex_la_SOURCES = \ VertexBase.cc VertexBase.h VertexBase.fh \ AbstractFFSVertex.h AbstractFFSVertex.fh AbstractFFSVertex.cc \ AbstractFFVVertex.h AbstractFFVVertex.fh AbstractFFVVertex.cc \ AbstractVVVVertex.h AbstractVVVVertex.fh AbstractVVVVertex.cc \ AbstractSSSVertex.h AbstractSSSVertex.fh AbstractSSSVertex.cc \ AbstractSSSSVertex.h AbstractSSSSVertex.fh AbstractSSSSVertex.cc \ AbstractVSSVertex.h AbstractVSSVertex.fh AbstractVSSVertex.cc \ AbstractFFTVertex.h AbstractFFTVertex.fh AbstractFFTVertex.cc \ AbstractVVTVertex.h AbstractVVTVertex.fh AbstractVVTVertex.cc \ AbstractVVSVertex.h AbstractVVSVertex.fh AbstractVVSVertex.cc \ AbstractSSTVertex.h AbstractSSTVertex.fh AbstractSSTVertex.cc \ AbstractVVSSVertex.h AbstractVVSSVertex.fh AbstractVVSSVertex.cc \ AbstractFFVTVertex.h AbstractFFVTVertex.fh AbstractFFVTVertex.cc \ AbstractVVVTVertex.h AbstractVVVTVertex.fh AbstractVVVTVertex.cc \ AbstractVVVVVertex.h AbstractVVVVVertex.fh AbstractVVVVVertex.cc \ AbstractRFSVertex.h AbstractRFSVertex.fh AbstractRFSVertex.cc \ AbstractRFVVertex.h AbstractRFVVertex.fh AbstractRFVVertex.cc libThePEGVertex_la_LIBADD = Scalar/libThePEGSVertex.la \ Vector/libThePEGVVertex.la \ Tensor/libThePEGTVertex.la thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVVVVertex.h0000644000175000017500000000556711754467375021060 0ustar sunsun// -*- C++ -*- #ifndef HELICITY_AbstractVVVVVertex_H #define HELICITY_AbstractVVVVVertex_H // // This is the declaration of the AbstractVVVVVertex class. // #include "VertexBase.h" #include "ThePEG/Helicity/WaveFunction/VectorWaveFunction.h" #include "AbstractVVVVVertex.fh" namespace ThePEG { namespace Helicity { /** * The AbstractVVVVVertex class is the base class for * vector-vector-vector-vector interactions in ThePEG */ class AbstractVVVVVertex: public VertexBase { public: /** * Default constructor */ AbstractVVVVVertex() : VertexBase(VertexType::VVVV) {} /** * Members to calculate the helicity amplitude expressions for vertices * and off-shell particles. */ //@{ /** * Evaluate the vertex. * @param q2 The scale \f$q^2\f$ for the coupling at the vertex. * @param iopt Evaluation option, 0 just evaluate the four point vertex, 1 * include all the three point diagrams as well. * @param vec1 The wavefunction for the first vector. * @param vec2 The wavefunction for the second vector. * @param vec3 The wavefunction for the third vector. * @param vec4 The wavefunction for the fourth vector. */ virtual Complex evaluate(Energy2 q2, int iopt, const VectorWaveFunction & vec1, const VectorWaveFunction & vec2, const VectorWaveFunction & vec3, const VectorWaveFunction & vec4) = 0; //@} public: /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAbstractVVVVVertex; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ AbstractVVVVVertex & operator=(const AbstractVVVVVertex &); }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of AbstractVVVVVertex. */ template <> struct BaseClassTrait { /** Typedef of the first base class of AbstractVVVVVertex. */ typedef Helicity::VertexBase NthBase; }; /** This template specialization informs ThePEG about the name of * the AbstractVVVVVertex class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "Helicity::AbstractVVVVVertex"; } }; /** @endcond */ } #endif /* HELICITY_AbstractVVVVVertex_H */ thepeg-1.8.0.orig/Helicity/Vertex/AbstractRFSVertex.cc0000644000175000017500000000117211754473631021015 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractRFSVertex class. // #include "AbstractRFSVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace Helicity; AbstractNoPIOClassDescription AbstractRFSVertex::initAbstractRFSVertex; // Definition of the static class description member. void AbstractRFSVertex::Init() { static ClassDocumentation documentation ("The AbstractRFSVertex class is an abstract base class for" " the implementation of all spin-3/2 fermion-fermion-scalar vertices"); } thepeg-1.8.0.orig/Helicity/Vertex/AbstractVVTVertex.cc0000644000175000017500000000116711754467375021056 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the AbstractVVTVertex class. // #include "AbstractVVTVertex.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace Helicity; AbstractNoPIOClassDescription AbstractVVTVertex::initAbstractVVTVertex; // Definition of the static class description member. void AbstractVVTVertex::Init() { static ClassDocumentation documentation ("The AbstractVVTVertex class is the base class for all " "vector-vector-tensor interactions in ThEPEG"); } thepeg-1.8.0.orig/Helicity/LorentzRSSpinor.cc0000644000175000017500000000060211747772425017323 0ustar sunsun// -*- C++ -*- // // LorentzRSSpinor.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzRSSpinor.tcc" #endif thepeg-1.8.0.orig/Helicity/LorentzTensor.tcc0000644000175000017500000000242611747772425017250 0ustar sunsun// -*- C++ -*- // // LorentzTensor.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ThePEG { namespace Helicity { // general boost template LorentzTensor & LorentzTensor::boost(double bx, double by, double bz) { // basic definitions double boostm[4][4]; double b2 = bx*bx+by*by+bz*bz; double gamma = 1.0/sqrt(1.0-b2); double gmmone = b2 >0 ? (gamma-1.)/b2 : 0.0; double vec[3]={bx,by,bz}; // compute the lorentz boost matrix for(unsigned int ix=0;ix<3;++ix) { for(unsigned int iy=0;iy<3;++iy){boostm[ix][iy]=vec[ix]*vec[iy]*gmmone;} boostm[ix][ix]+=1; boostm[ix][3]=gamma*vec[ix]; boostm[3][ix]=boostm[ix][3]; } boostm[3][3]=gamma; // apply the boost LorentzTensor output; complex temp; unsigned int ix,iy,ixa,iya; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { temp=0.; for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) {temp+=boostm[ix][ixa]*boostm[iy][iya]*(*this)(ixa,iya);} } output(ix,iy)=temp; } } *this=output; return *this; } } } thepeg-1.8.0.orig/Helicity/LorentzSpinor.fh0000644000175000017500000000036611747772425017075 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_LorentzSpinor_FH #define ThePEG_LorentzSpinor_FH namespace ThePEG { namespace Helicity { template class LorentzSpinor; } } #endif thepeg-1.8.0.orig/Helicity/LorentzSpinorBar.h0000644000175000017500000001021211747772425017343 0ustar sunsun// -*- C++ -*- // // LorentzSpinorBar.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzSpinorBar_H #define ThePEG_LorentzSpinorBar_H // This is the declaration of the LorentzSpinorBar class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Vectors/ThreeVector.h" #include "HelicityDefinitions.h" #include "LorentzSpinor.fh" #include "LorentzSpinorBar.fh" namespace ThePEG { namespace Helicity { /** * The LorentzSpinorBar class implements the storage of a barred * LorentzSpinor. The design is based on that of the LorentzSpinor * class where the details of the implemented are discussed in more * detail. * * @see LorentzSpinor * * @author Peter Richardson */ template class LorentzSpinorBar { public: /** @name Standard constructors. */ //@{ /** * Default zero constructor, optionally specifying \a t, the type */ LorentzSpinorBar(SpinorType t = unknown_spinortype) : _type(t) { for(unsigned int ix=0;ix<4;++ix) _spin[ix]=Value(); } /** * Constructor with complex numbers specifying the components, * optionally specifying \a t, the type */ LorentzSpinorBar(complex a, complex b, complex c, complex d, SpinorType t = unknown_spinortype) : _type(t) { _spin[0]=a; _spin[1]=b; _spin[2]=c; _spin[3]=d; } //@} /** @name Access the components. */ //@{ /** * Subscript operator to return spinor components */ complex operator[](int i) const { assert( i>= 0 && i <= 3 ); return _spin[i]; } /** * Subscript operator to return spinor components */ complex operator()(int i) const { assert( i>= 0 && i <= 3 ); return _spin[i]; } /** * Set components by index. */ complex & operator()(int i) { assert( i>= 0 && i <= 3 ); return _spin[i]; } /** * Set components by index. */ complex & operator[](int i) { assert( i>= 0 && i <= 3 ); return _spin[i]; } /** * Get first component. */ complex s1() const {return _spin[0];} /** * Get second component. */ complex s2() const {return _spin[1];} /** * Get third component. */ complex s3() const {return _spin[2];} /** * Get fourth component. */ complex s4() const {return _spin[3];} /** * Set first component. */ void setS1(complex in) {_spin[0]=in;} /** * Set second component. */ void setS2(complex in) {_spin[1]=in;} /** * Set third component. */ void setS3(complex in) {_spin[2]=in;} /** * Set fourth component. */ void setS4(complex in) {_spin[3]=in;} //@} /** @name Transformations. */ //@{ /** * Return the barred spinor */ LorentzSpinor bar() const; /** * Return the conjugated spinor \f$u_c=C\bar{u}^T\f$. This operation * transforms u-spinors to v-spinors and vice-versa and is required when * dealing with majorana particles. */ LorentzSpinorBar conjugate() const; /** * Standard Lorentz boost specifying the components of the beta vector. */ LorentzSpinorBar & boost(double,double,double); /** * Standard Lorentz boost specifying the beta vector. */ LorentzSpinorBar & boost(const Boost &); /** * General Lorentz transformation */ LorentzSpinorBar & transform(const SpinHalfLorentzRotation &) ; /** * General Lorentz transformation */ LorentzSpinorBar & transform(const LorentzRotation & r) { transform(r.half()); return *this; } //@} /** @name Functions related to type. */ //@{ /** * Return the type of the spinor. */ SpinorType Type() const {return _type;} //@} private: /** * Type of spinor */ SpinorType _type; /** * Storage of the components. */ complex _spin[4]; }; } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzSpinorBar.tcc" #endif #endif thepeg-1.8.0.orig/Helicity/LorentzRSSpinor.fh0000644000175000017500000000037411747772425017341 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_LorentzRSSpinor_FH #define ThePEG_LorentzRSSpinor_FH namespace ThePEG { namespace Helicity { template class LorentzRSSpinor; } } #endif thepeg-1.8.0.orig/Helicity/LorentzSpinor.cc0000644000175000017500000000057611747772425017070 0ustar sunsun// -*- C++ -*- // // LorentzSpinor.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzSpinor.tcc" #endif thepeg-1.8.0.orig/Helicity/LorentzTensor.fh0000644000175000017500000000036511747772425017074 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_LorentzTensor_FH #define ThePEG_LorentzTensor_FH namespace ThePEG { namespace Helicity { template class LorentzTensor; } } #endif thepeg-1.8.0.orig/Helicity/epsilon.h0000644000175000017500000000436011747772425015546 0ustar sunsun// -*- C++ -*- // // epsilon.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_epsilon_H #define ThePEG_epsilon_H // // This is the declaration of the epsilon class. #include "ThePEG/Vectors/LorentzVector.h" namespace ThePEG { namespace Helicity { /** \ingroup Helicity * \author Peter Richardson * * This class is designed to combine 5-momenta and polarization * vectors together with the result being the product with the * eps function. The class is purely static and contains no data. * * @see LorentzPolarizationVector * @see Lorentz5Vector */ /** * Return the product * \f$\epsilon^{\mu\alpha\beta\gamma}v_{1\alpha}v_{2\beta}v_{3\gamma}\f$. * @param a The first vector \f$v_{1\alpha}\f$. * @param b The second vector \f$v_{2\alpha}\f$. * @param c The third vector \f$v_{3\alpha}\f$. * @return The product * \f$\epsilon^{\mu\alpha\beta\gamma}v_{1\alpha}v_{2\beta}v_{3\gamma}\f$. */ template inline LorentzVector::MulT, C>::MulT> epsilon(const LorentzVector & a, const LorentzVector & b, const LorentzVector & c) { typedef typename BinaryOpTraits::MulT ABType; typedef typename BinaryOpTraits::MulT ABCType; typedef LorentzVector ResultType; ABType diffxy = a.x() * b.y() - a.y() * b.x(); ABType diffxz = a.x() * b.z() - a.z() * b.x(); ABType diffxt = a.x() * b.t() - a.t() * b.x(); ABType diffyz = a.y() * b.z() - a.z() * b.y(); ABType diffyt = a.y() * b.t() - a.t() * b.y(); ABType diffzt = a.z() * b.t() - a.t() * b.z(); ResultType result; result.setX( c.z() * diffyt - c.t() * diffyz - c.y() * diffzt); result.setY( c.t() * diffxz - c.z() * diffxt + c.x() * diffzt); result.setZ(-c.t() * diffxy + c.y() * diffxt - c.x() * diffyt); result.setT(-c.z() * diffxy + c.y() * diffxz - c.x() * diffyz); return result; } } } #endif /* ThePEG_epsilon_H */ thepeg-1.8.0.orig/Helicity/TensorSpinInfo.fh0000644000175000017500000000046011747772425017160 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the TensorSpinInfo class. // #ifndef ThePEG_TensorSpinInfo_FH #define ThePEG_TensorSpinInfo_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { ThePEG_DECLARE_CLASS_POINTERS(TensorSpinInfo,TensorSpinPtr); } } #endif thepeg-1.8.0.orig/Helicity/VectorSpinInfo.cc0000644000175000017500000000202211747772425017134 0ustar sunsun// -*- C++ -*- // // VectorSpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VectorSpinInfo class. // // Author: Peter Richardson // #include "VectorSpinInfo.h" using namespace ThePEG; using namespace ThePEG::Helicity; EIPtr VectorSpinInfo::clone() const { tcSpinPtr temp=this; return const_ptr_cast(temp); } NoPIOClassDescription VectorSpinInfo::initVectorSpinInfo; // Definition of the static class description member. void VectorSpinInfo::Init() {} void VectorSpinInfo::transform(const LorentzMomentum & m, const LorentzRotation & r) { if(isNear(m)) { for(unsigned int ix=0;ix<3;++ix) _currentstates[ix].transform(r.one()); SpinInfo::transform(m,r); } } thepeg-1.8.0.orig/Helicity/LorentzTensor.cc0000644000175000017500000000057611747772425017070 0ustar sunsun// -*- C++ -*- // // LorentzTensor.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzTensor.tcc" #endif thepeg-1.8.0.orig/Helicity/TensorSpinInfo.h0000644000175000017500000001207511747772425017017 0ustar sunsun// -*- C++ -*- // // TensorSpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_TensorSpinInfo_H #define THEPEG_TensorSpinInfo_H // This is the declaration of the TensorSpinInfo class. #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/Helicity/LorentzTensor.h" #include "TensorSpinInfo.fh" // #include "TensorSpinInfo.xh" namespace ThePEG { namespace Helicity { /** * The TensorSpinInfo class is the implementation of the spin * information for tensor particles. It inherits from the SpinInfo * class and implements the storage of the basis tensors. * * These basis states should be set by either matrix elements or * decayers which are capable of generating spin correlation * information. * * The basis states in the rest frame of the particles can then be * accessed by decayers to produce the correct correlation. * * N.B. in our convention 0 is the \f$-2\f$ helicity state, * 1 is the \f$-1\f$ helicity state, * 2 is the \f$0\f$ helicity state, * 3 is the \f$+1\f$ helicity state and * 4 is the \f$+2\f$ helicity state. * * @author Peter Richardson * */ class TensorSpinInfo: public SpinInfo { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ TensorSpinInfo() : SpinInfo(PDT::Spin2),_productionstates(5), _decaystates(5), _currentstates(5), _decaycalc(false) {} /** * Standard Constructor. * @param p the production momentum. * @param time true if the particle is time-like. */ TensorSpinInfo(const Lorentz5Momentum & p,bool time) : SpinInfo(PDT::Spin2, p, time), _productionstates(5), _decaystates(5), _currentstates(5), _decaycalc(false) {} //@} public: /** @name Access the basis states. */ //@{ /** * Set the basis state, this is production state. * @param hel the helicity (0,1,2,3,4 as described above.) * @param in the LorentzTensor for the given helicity. */ void setBasisState(unsigned int hel, LorentzTensor in) const { assert(hel<5); _productionstates[hel]=in; _currentstates [hel]=in; } /** * Set the basis state for the decay. * @param hel the helicity (0,1,2,3,4 as described above.) * @param in the LorentzTensor for the given helicity. */ void setDecayState(unsigned int hel, LorentzTensor in) const { assert(hel<5); _decaycalc = true; _decaystates[hel] = in; } /** * Get the basis state for the production for the given helicity, \a * hel (0,1,2,3,4 as described above.) */ const LorentzTensor & getProductionBasisState(unsigned int hel) const { assert(hel<5); return _productionstates[hel]; } /** * Get the basis state for the decay for the given helicity, \a hel * (0,1,2,3,4 as described above.) */ const LorentzTensor & getDecayBasisState(unsigned int hel) const { assert(hel<5); if(!_decaycalc) { for(unsigned int ix=0;ix<5;++ix) _decaystates[ix]=_currentstates[ix].conjugate(); _decaycalc=true; } return _decaystates[hel]; } //@} /** * Perform a lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum &,const LorentzRotation &); public: /** * Standard Init function. */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const; private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initTensorSpinInfo; /** * Private and non-existent assignment operator. */ TensorSpinInfo & operator=(const TensorSpinInfo &); private: /** * Basis states in the frame in which the particle was produced. */ mutable vector > _productionstates; /** * Basis states in the frame in which the particle decays. */ mutable vector > _decaystates; /** * Basis states in the current frame of the particle */ mutable vector > _currentstates; /** * True if the decay state has been set. */ mutable bool _decaycalc; }; } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * TensorSpinInfo. */ template <> struct BaseClassTrait : public ClassTraitsType { /** Typedef of the base class of ScalarSpinInfo. */ typedef ThePEG::SpinInfo NthBase; }; /** * This template specialization informs ThePEG about the name of the * TensorSpinInfo class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::Helicity::TensorSpinInfo"; } }; /** @endcond */ } #endif /* THEPEG_TensorSpinInfo_H */ thepeg-1.8.0.orig/Helicity/VectorSpinInfo.fh0000644000175000017500000000046011747772425017150 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VectorSpinInfo class. // #ifndef ThePEG_VectorSpinInfo_FH #define ThePEG_VectorSpinInfo_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { ThePEG_DECLARE_CLASS_POINTERS(VectorSpinInfo,VectorSpinPtr); } } #endif thepeg-1.8.0.orig/Helicity/HelicityDefinitions.h0000644000175000017500000000255511754473631020042 0ustar sunsun// -*- C++ -*- // // HelicityDefinitions.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_HelicityDefinitions_H #define THEPEG_HelicityDefinitions_H // This is the declaration of the HelicityDefinitions class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Exception.h" /** \file HelicityDefinitions.h * * This file contains enumerations used by LorentzSpinor and * LorentzSpinorBar classes. * * @see LorentzSpinor * * @author Peter Richardson */ namespace ThePEG { /** * The Helicity namespace contains classes for spin representation * classes in ThePEG. */ namespace Helicity { /** * Enumeration to specify spinor type. */ enum SpinorType { u_spinortype, /**< u spinor. */ v_spinortype, /**< v spinor. */ unknown_spinortype /**< Undefined spinor type. */ }; /** @cond EXCEPTIONCLASSES */ /** Exception class used by Helicity classes to signal a logical error. */ class HelicityLogicalError: public Exception {}; /** Exception class used by Helicity classes to signal a inconsistencies. */ class HelicityConsistencyError: public Exception {}; /** @endcond */ } } #endif /* THEPEG_HelicityDefinitions_H */ thepeg-1.8.0.orig/Helicity/LorentzSpinorBar.tcc0000644000175000017500000000635711754473631017677 0ustar sunsun// -*- C++ -*- // // LorentzSpinorBar.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined member // functions of the LorentzSpinorBar class. // // Author: Peter Richardson // #include "LorentzSpinorBar.h" #include "LorentzSpinor.h" using namespace ThePEG; using namespace ThePEG::Helicity; // return the unbarred spinor template LorentzSpinor LorentzSpinorBar::bar() const { complex output[4]; // HELAS output[0] = conj(_spin[2]); output[1] = conj(_spin[3]); output[2] = conj(_spin[0]); output[3] = conj(_spin[1]); return LorentzSpinor(output[0],output[1],output[2],output[3],_type); } template LorentzSpinorBar & LorentzSpinorBar::boost(double bx,double by,double bz) { // work out beta and chi double beta=sqrt(bx*bx+by*by+bz*bz); double chi = atanh(beta); double sinhchi = sinh(0.5*chi)/beta, coshchi = cosh(0.5*chi); // calculate the new spinor complex out[4]; Complex ii(0.,1.); Complex nxminy=bx-ii*by; Complex nxpiny=bx+ii*by; out[0] = coshchi*_spin[0]+sinhchi*(-bz*_spin[0]-nxpiny*_spin[1]); out[1] = coshchi*_spin[1]+sinhchi*(+bz*_spin[1]-nxminy*_spin[0]); out[2] = coshchi*_spin[2]+sinhchi*(+bz*_spin[2]+nxpiny*_spin[3]); out[3] = coshchi*_spin[3]+sinhchi*(-bz*_spin[3]+nxminy*_spin[2]); for(unsigned int ix=0;ix<4;++ix){_spin[ix]=out[ix];} return *this; } template LorentzSpinorBar & LorentzSpinorBar::boost(const Boost & boostv) { double beta = boostv.mag(); double bx=boostv.x(),by=boostv.y(),bz=boostv.z(); double chi = atanh(beta); double sinhchi = sinh(0.5*chi)/beta, coshchi = cosh(0.5*chi); complex out[4]; Complex ii(0.,1.); Complex nxminy=bx-ii*by; Complex nxpiny=bx+ii*by; out[0] = coshchi*_spin[0]+sinhchi*(-bz*_spin[0]-nxpiny*_spin[1]); out[1] = coshchi*_spin[1]+sinhchi*(+bz*_spin[1]-nxminy*_spin[0]); out[2] = coshchi*_spin[2]+sinhchi*(+bz*_spin[2]+nxpiny*_spin[3]); out[3] = coshchi*_spin[3]+sinhchi*(-bz*_spin[3]+nxminy*_spin[2]); for(unsigned int ix=0;ix<4;++ix){_spin[ix]=out[ix];} return *this; } // general transform template LorentzSpinorBar & LorentzSpinorBar::transform(const SpinHalfLorentzRotation & r) { unsigned int ix,iy; SpinHalfLorentzRotation t(r.inverse()); complex out[4]; for(ix=0;ix<4;++ix) { out[ix]=complex(); for(iy=0;iy<4;++iy){out[ix]+=_spin[iy]*t(iy,ix);} } for(ix=0;ix<4;++ix){_spin[ix]=out[ix];} return *this; } // conjugation template LorentzSpinorBar LorentzSpinorBar::conjugate() const { SpinorType new_type; switch(_type) { case u_spinortype: new_type=v_spinortype; break; case v_spinortype: new_type=u_spinortype; break; case unknown_spinortype: default: new_type=unknown_spinortype; break; } return LorentzSpinorBar(-conj(_spin[3]),+conj(_spin[2]), +conj(_spin[1]),-conj(_spin[0]),new_type); } thepeg-1.8.0.orig/Helicity/LorentzSpinorBar.fh0000644000175000017500000000037611747772425017523 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_LorentzSpinorBar_FH #define ThePEG_LorentzSpinorBar_FH namespace ThePEG { namespace Helicity { template class LorentzSpinorBar; } } #endif thepeg-1.8.0.orig/Helicity/ScalarSpinInfo.h0000644000175000017500000000506411747772425016752 0ustar sunsun// -*- C++ -*- // // ScalarSpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ScalarSpinInfo_H #define ThePEG_ScalarSpinInfo_H // This is the declaration of the ScalarSpinInfo class. #include "ThePEG/EventRecord/SpinInfo.h" #include "ScalarSpinInfo.fh" namespace ThePEG { namespace Helicity { /** * The ScalarSpinInfo class is designed to be the implementation of * the spin information for a scalar particle. Obviously it is pretty * trival in this case. * * @author Peter Richardson * */ class ScalarSpinInfo: public SpinInfo { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ScalarSpinInfo() : SpinInfo(PDT::Spin0) {} /** * Standard Constructor. * @param p the production momentum. * @param time true if the particle is time-like. */ ScalarSpinInfo(const Lorentz5Momentum & p, bool time) : SpinInfo(PDT::Spin0, p, time) {} //@} public: /** * Standard Init function. */ static void Init(); /** * Standard clone methods. */ virtual EIPtr clone() const { tcSpinPtr temp = this; return const_ptr_cast(temp); } /** * Perform a lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum &,const LorentzRotation &); private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initScalarSpinInfo; /** * Private and non-existent assignment operator. */ ScalarSpinInfo & operator=(const ScalarSpinInfo &); }; } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * ScalarSpinInfo. */ template <> struct BaseClassTrait : public ClassTraitsType { /** Typedef of the base class of ScalarSpinInfo. */ typedef ThePEG::SpinInfo NthBase; }; /** * This template specialization informs ThePEG about the name of the * ScalarSpinInfo class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::Helicity::ScalarSpinInfo"; } }; /** @endcond */ } #endif /* ThePEG_ScalarSpinInfo_H */ thepeg-1.8.0.orig/Helicity/LorentzRSSpinorBar.fh0000644000175000017500000000040411747772425017760 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_LorentzRSSpinorBar_FH #define ThePEG_LorentzRSSpinorBar_FH namespace ThePEG { namespace Helicity { template class LorentzRSSpinorBar; } } #endif thepeg-1.8.0.orig/Helicity/LorentzRSSpinorBar.tcc0000644000175000017500000001176411754473631020142 0ustar sunsun // -*- C++ -*- // // LorentzRSSpinorBar.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LorentzRSSpinorBar class. // // Author: Peter Richardson // #include "LorentzRSSpinorBar.h" #include "LorentzRSSpinor.h" using namespace ThePEG; using namespace ThePEG::Helicity; // return the unbarred spinor template LorentzRSSpinor LorentzRSSpinorBar::bar() const { complex out[4][4]; unsigned int ix; // HELAS for(ix=0;ix<4;++ix) { out[ix][0] = conj(_spin[ix][2]); out[ix][1] = conj(_spin[ix][3]); out[ix][2] = conj(_spin[ix][0]); out[ix][3] = conj(_spin[ix][1]); } return LorentzRSSpinor(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); } template LorentzRSSpinorBar & LorentzRSSpinorBar::boost(double bx,double by,double bz) { // work out beta and chi double b2(bx*bx+by*by+bz*bz),beta(sqrt(b2)),chi(atanh(beta)); double sinhchi(sinh(0.5*chi)/beta),coshchi(cosh(0.5*chi)); // calculate the new spinor Complex out[4][4],ii(0.,1.),boosts[4][4]; Complex nxminy(bx-ii*by),nxpiny(bx+ii*by); double gamma(1.0/sqrt(1.0-b2)),gmmone(b2 >0 ? (gamma-1.)/b2 : 0.0); double bvec[3]={bx,by,bz},boostv[4][4]; unsigned int ix,iy,ixa,iya; // spin matrix boosts[0][0] = coshchi+sinhchi*bz; boosts[0][1] = sinhchi*nxminy; boosts[0][2] = 0.; boosts[0][3] = 0.; boosts[1][0] = sinhchi*nxpiny; boosts[1][1] = coshchi-sinhchi*bz; boosts[1][2] = 0.; boosts[1][3] = 0.; boosts[2][0] = 0.; boosts[2][1] = 0.; boosts[2][2] = coshchi-sinhchi*bz; boosts[2][3] =-sinhchi*nxminy; boosts[3][0] = 0.; boosts[3][1] = 0.; boosts[3][2] =-sinhchi*nxpiny; boosts[3][3] = coshchi+sinhchi*bz; // vector matrix for(ix=0;ix<3;++ix) { for(iy=0;iy<3;++iy) boostv[ix][iy]=bvec[ix]*bvec[iy]*gmmone; boostv[ix][ix]+=1; boostv[ix][3]=gamma*bvec[ix]; boostv[3][ix]=boostv[ix][3]; } boostv[3][3]=gamma; // apply the boost for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out[ix][iy]=0.; for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) { out[ix][iy] += boostv[ix][ixa]*boosts[iya][iy]*_spin[ixa][iya]; } } } } *this= LorentzRSSpinorBar(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); return *this; } template LorentzRSSpinorBar & LorentzRSSpinorBar::boost(const Boost & boostvec) { double beta = boostvec.mag(),b2(beta*beta); double bx(boostvec.x()),by(boostvec.y()),bz(boostvec.z()); double boostvec1[3] = {bx, by, bz}; double chi(atanh(beta)),sinhchi(sinh(0.5*chi)/beta),coshchi(cosh(0.5*chi)); complex out[4][4]; Complex ii(0.,1.); Complex nxminy(bx-ii*by),nxpiny(bx+ii*by),boosts[4][4]; double gamma(1.0/sqrt(1.0-b2)),gmmone(b2 >0 ? (gamma-1.)/b2 : 0.0),boostv[4][4]; unsigned int ix,iy,ixa,iya; // spin matrix boosts[0][0] = coshchi+sinhchi*bz; boosts[0][1] = sinhchi*nxminy; boosts[0][2] = 0.; boosts[0][3] = 0.; boosts[1][0] = sinhchi*nxpiny; boosts[1][1] = coshchi-sinhchi*bz; boosts[1][2] = 0.; boosts[1][3] = 0.; boosts[2][0] = 0.; boosts[2][1] = 0.; boosts[2][2] = coshchi-sinhchi*bz; boosts[2][3] =-sinhchi*nxminy; boosts[3][0] = 0.; boosts[3][1] = 0.; boosts[3][2] =-sinhchi*nxpiny; boosts[3][3] = coshchi+sinhchi*bz; // vector matrix for(ix=0;ix<3;++ix) { for(iy=0;iy<3;++iy) boostv[ix][iy]=boostvec1[ix]*boostvec1[iy]*gmmone; boostv[ix][ix]+=1; boostv[ix][3]=gamma*boostvec1[ix]; boostv[3][ix]=boostv[ix][3]; } boostv[3][3]=gamma; // apply the boost for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out[ix][iy]=complex(); for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) { out[ix][iy]+=boostv[ix][ixa]*boosts[iya][iy]*_spin[ixa][iya]; } } } } *this= LorentzRSSpinorBar(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); return *this; } template LorentzRSSpinorBar & LorentzRSSpinorBar::transform(const LorentzRotation & r) { SpinHalfLorentzRotation t(r.half().inverse()); unsigned int ix,iy,ixa,iya; LorentzRSSpinorBar out; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out(ix,iy)=0.; for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) { out(ix,iy)+=r.one()(ix,ixa)*t(iya,iy)*_spin[ixa][iya]; } } } } *this=out; return *this; } thepeg-1.8.0.orig/Helicity/LorentzSpinorBar.cc0000644000175000017500000000060411747772425017505 0ustar sunsun// -*- C++ -*- // // LorentzSpinorBar.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzSpinorBar.tcc" #endif thepeg-1.8.0.orig/Helicity/RSFermionSpinInfo.cc0000644000175000017500000000244011747772425017542 0ustar sunsun// -*- C++ -*- // // RSFermionSpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RSFermionSpinInfo class. // // Author: Peter Richardson // #include "RSFermionSpinInfo.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; using namespace ThePEG::Helicity; NoPIOClassDescription RSFermionSpinInfo::initRSFermionSpinInfo; // Definition of the static class description member. void RSFermionSpinInfo::Init() { static ClassDocumentation documentation ("The RSFermionSpinInfo class implements the SpinInfo for spin-3/2" " particles"); } void RSFermionSpinInfo::transform(const LorentzMomentum & m, const LorentzRotation & r) { if(isNear(m)) { for(unsigned int ix=0;ix<4;++ix) _currentstates[ix].transform(r); SpinInfo::transform(m,r); } } EIPtr RSFermionSpinInfo::clone() const { tcSpinPtr temp=this; return const_ptr_cast(temp); } thepeg-1.8.0.orig/Helicity/LorentzRSSpinor.h0000644000175000017500000002542111747772425017173 0ustar sunsun// -*- C++ -*- // // LorentzRSSpinor.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzRSSpinor_H #define ThePEG_LorentzRSSpinor_H #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/ThreeVector.h" #include "HelicityDefinitions.h" #include "LorentzRSSpinor.fh" #include "LorentzRSSpinorBar.h" #include "LorentzSpinorBar.h" #include "LorentzSpinor.h" #include "LorentzPolarizationVector.h" namespace ThePEG{ namespace Helicity{ /** * The LorentzRSSpinor class is designed to store a Rarita-Schwinger * spinor for a spin-3/2 particle. In addition to storing the * components of the spinor information is stored on the type of * spinor, for example u or v type. * * At the moment only one choice of the Dirac matrix representation * is supported. For high-energy calculations the choice made by the * HELAS collaboration is more efficient for numerical * calculations. In this representation * * \f[ * \gamma_{i=1,2,3}=\left(\begin{array}{cc} * 0 & \sigma_i \\ * -\sigma_i & 0 * \end{array}\right) * \quad * \gamma_0=\left(\begin{array}{cc} * 0 & 1 \\ * 1 & 0 * \end{array}\right) * \quad * \gamma_5=\left(\begin{array}{cc} * -1 & 0 \\ * 0 & 1 * \end{array}\right) * \f] * * The type of the spinor is also stored using the SpinorType * enumeration. There are three types supported u_spinortype, * v_spinortype, unknown_spinortype. This information is intended * mainly for use in the case of Majorana particles where matrix * elements can be calculated with either u or v type spinors and * knowledge of which was used will be needed in order to give the * correct correlations. The unknown_spinortypee is intended for * cases where either the spinor for an off-shell line in a matrix * element calculation or the information is genuinely unknown. * * The LorentzRSSpinorBar class is also provided to store the barred * spinor. * * * @see HelicityDefinitions * @see LorentzRSSpinorBar * * \author Peter Richardson * */ template class LorentzRSSpinor { public: /** @name Standard constructors. */ //@{ /** * Default zero constructor, optionally specifying \a t, the type. */ LorentzRSSpinor(SpinorType t = unknown_spinortype) : _type(t) { for(unsigned int ix=0;ix<4;++ix) for(unsigned int iy=0;iy<4;++iy) _spin[ix][iy]=Value(); } /** * Constructor with complex numbers specifying the components, * optionally specifying \a t, the type. */ LorentzRSSpinor(complex a1, complex b1, complex c1, complex d1, complex a2, complex b2, complex c2, complex d2, complex a3, complex b3, complex c3, complex d3, complex a4, complex b4, complex c4, complex d4, SpinorType t=unknown_spinortype) : _type(t) { _spin[0][0]=a1;_spin[1][0]=a2;_spin[2][0]=a3;_spin[3][0]=a4; _spin[0][1]=b1;_spin[1][1]=b2;_spin[2][1]=b3;_spin[3][1]=b4; _spin[0][2]=c1;_spin[1][2]=c2;_spin[2][2]=c3;_spin[3][2]=c4; _spin[0][3]=d1;_spin[1][3]=d2;_spin[2][3]=d3;_spin[3][3]=d4; } //@} /** @name Access the components. */ //@{ /** * Subscript operator to return spinor components */ complex operator()(int i, int j) const { assert( i >= 0 && i <= 3 && j>=0 && j<=3); return _spin[i][j]; } /** * Set components by index */ complex & operator () (int i, int j) { assert( i >= 0 && i <= 3 && j>=0 && j<=3); return _spin[i][j]; } /** * Get first spinor component for the x vector */ complex xs1() const {return _spin[0][0];} /** * Get second spinor component for the x vector */ complex xs2() const {return _spin[0][0];} /** * Get third spinor component for the x vector */ complex xs3() const {return _spin[0][1];} /** * Get fourth spinor component for the x vector */ complex xs4() const {return _spin[0][3];} /** * Get first spinor component for the y vector */ complex ys1() const {return _spin[1][0];} /** * Get second spinor component for the y vector */ complex ys2() const {return _spin[1][1];} /** * Get third spinor component for the y vector */ complex ys3() const {return _spin[1][2];} /** * Get fourth spinor component for the y vector */ complex ys4() const {return _spin[1][3];} /** * Get first spinor component for the z vector */ complex zs1() const {return _spin[2][0];} /** * Get second spinor component for the z vector */ complex zs2() const {return _spin[2][1];} /** * Get third spinor component for the z vector */ complex zs3() const {return _spin[2][2];} /** * Get fourth spinor component for the z vector */ complex zs4() const {return _spin[2][3];} /** * Get first spinor component for the t vector */ complex ts1() const {return _spin[3][0];} /** * Get second spinor component for the t vector */ complex ts2() const {return _spin[3][1];} /** * Get third spinor component for the t vector */ complex ts3() const {return _spin[3][2];} /** * Get fourth spinor component for the t vector */ complex ts4() const {return _spin[3][3];} /** * Set first spinor component for the x vector */ void setXS1(complex in) {_spin[0][0]=in;} /** * Set second spinor component for the x vector */ void setXS2(complex in) {_spin[0][1]=in;} /** * Set third spinor component for the x vector */ void setXS3(complex in) {_spin[0][2]=in;} /** * Set fourth spinor component for the x vector */ void setXS4(complex in) {_spin[0][3]=in;} /** * Set first spinor component for the y vector */ void setYS1(complex in) {_spin[1][0]=in;} /** * Set second spinor component for the y vector */ void setYS2(complex in) {_spin[1][1]=in;} /** * Set third spinor component for the y vector */ void setYS3(complex in) {_spin[1][2]=in;} /** * Set fourth spinor component for the y vector */ void setYS4(complex in) {_spin[1][3]=in;} /** * Set first spinor component for the z vector */ void setZS1(complex in) {_spin[2][0]=in;} /** * Set second spinor component for the z vector */ void setZS2(complex in) {_spin[2][1]=in;} /** * Set third spinor component for the z vector */ void setZS3(complex in) {_spin[2][2]=in;} /** * Set fourth spinor component for the z vector */ void setZS4(complex in) {_spin[2][3]=in;} /** * Set first spinor component for the t vector */ void setTS1(complex in) {_spin[3][0]=in;} /** * Set second spinor component for the t vector */ void setTS2(complex in) {_spin[3][1]=in;} /** * Set third spinor component for the t vector */ void setTS3(complex in) {_spin[3][2]=in;} /** * Set fourth spinor component for the t vector */ void setTS4(complex in) {_spin[3][3]=in;} //@} /** @name Arithmetic operators. */ //@{ /** * dot product with a polarization vector */ LorentzSpinor dot(const LorentzPolarizationVector & vec) const { LorentzSpinor output(_type); complex temp; unsigned int ix; for(ix=0;ix<4;++ix) { temp = _spin[3][ix]*vec.t(); temp -= _spin[0][ix]*vec.x(); temp -= _spin[1][ix]*vec.y(); temp -= _spin[2][ix]*vec.z(); output[ix]=temp; } return output; } /** * dot product with a 4-vector */ LorentzSpinor dot(const LorentzMomentum & invec) const { LorentzSpinor output(_type); complex temp; LorentzVector vec = UnitRemoval::InvE * invec; unsigned int ix; for(ix=0;ix<4;++ix) { temp = - ( _spin[0][ix]*vec.x() + _spin[1][ix]*vec.y()+ _spin[2][ix]*vec.z() ) + _spin[3][ix]*vec.t(); output[ix]=temp; } return output; } //@} /** @name Transformations. */ //@{ /** * return the barred spinor */ LorentzRSSpinorBar bar() const; /** * Standard Lorentz boost specifying the components of the beta vector. */ LorentzRSSpinor & boost(double,double,double); /** * Standard Lorentz boost specifying the beta vector. */ LorentzRSSpinor & boost(const Boost &); /** * General transform */ LorentzRSSpinor & transform(const LorentzRotation &); //@} /** @name Functions related to type. */ //@{ /** * Return the type of the spinor. */ SpinorType Type() const {return _type;} //@} /** * Scalar product \f$\bar{f}^\alpha(c_LP_L+c_RP_R)f_\alpha\f$for general couplings * @param fbar The barred spinor * @param left The left-handed coupling, \f$c_L\f$. * @param right The right-handed coupling, \f$c_R\f$. */ template complex::MulT> generalScalar(LorentzRSSpinorBar& fbar, Complex left, Complex right) { complex::MulT> output; unsigned int iz; output = left*(fbar(3,0)*_spin[3][0]+fbar(3,1)*_spin[3][1]) +right*(fbar(3,2)*_spin[3][2]+fbar(3,3)*_spin[3][3]); for(iz=0;iz<3;++iz) { output -= left*(fbar(iz,0)*_spin[iz][0]+fbar(iz,1)*_spin[iz][1]) +right*(fbar(iz,2)*_spin[iz][2]+fbar(iz,3)*_spin[iz][3]); } return output; } /** * Current \f$\bar{f}(c_LP_L+c_RP_R)f^\alpha\f$ for general couplings. * @param fbar The barred spinor * @param left The left-handed coupling, \f$c_L\f$. * @param right The right-handed coupling, \f$c_R\f$. */ template LorentzVector::MulT> > generalCurrent(LorentzSpinorBar& fbar, Complex left, Complex right) { typedef complex::MulT> ResultT; ResultT output[4]; for(size_t iz=0;iz<4;++iz) output[iz]= left*(fbar.s1()*_spin[iz][0]+fbar.s2()*_spin[iz][1]) +right*(fbar.s3()*_spin[iz][2]+fbar.s4()*_spin[iz][3]); return LorentzVector(output[0],output[1],output[2],output[3]); } private: /** * Type of spinor */ SpinorType _type; /** * Storage of the components. */ complex _spin[4][4]; }; } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzRSSpinor.tcc" #endif #endif thepeg-1.8.0.orig/Helicity/TensorSpinInfo.cc0000644000175000017500000000202211747772425017144 0ustar sunsun// -*- C++ -*- // // TensorSpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the TensorSpinInfo class. // // Author: Peter Richardson // #include "TensorSpinInfo.h" using namespace ThePEG; using namespace ThePEG::Helicity; NoPIOClassDescription TensorSpinInfo::initTensorSpinInfo; // Definition of the static class description member. void TensorSpinInfo::Init() {} void TensorSpinInfo::transform(const LorentzMomentum & m, const LorentzRotation & r) { if(isNear(m)) { for(unsigned int ix=0;ix<5;++ix) _currentstates[ix].transform(r.one()); SpinInfo::transform(m,r); } } EIPtr TensorSpinInfo::clone() const { tcSpinPtr temp=this; return const_ptr_cast(temp); } thepeg-1.8.0.orig/Helicity/LorentzSpinor.h0000644000175000017500000002450611747772425016731 0ustar sunsun// -*- C++ -*- // // LorentzSpinor.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzSpinor_H #define ThePEG_LorentzSpinor_H // This is the declaration of the LorentzSpinor class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Vectors/ThreeVector.h" #include "HelicityDefinitions.h" #include "LorentzSpinor.fh" #include "LorentzSpinorBar.h" #include "LorentzPolarizationVector.h" namespace ThePEG{ namespace Helicity{ /** * The LorentzSpinor class is designed to store a spinor. In addition * to storing the components of the spinor, information is stored on * the representation of the type of spinor, for example u or v type. * * At the moment only one choice of the Dirac matrix representation * is supported. For high-energy calculations the choice made by the * HELAS collaboration is more efficient for numerical * calculations. In this representation * * \f[ * \gamma_{i=1,2,3}=\left(\begin{array}{cc} * 0 & \sigma_i \\ * -\sigma_i & 0 * \end{array}\right) * \quad * \gamma_0=\left(\begin{array}{cc} * 0 & 1 \\ * 1 & 0 * \end{array}\right) * \quad * \gamma_5=\left(\begin{array}{cc} * -1 & 0 \\ * 0 & 1 * \end{array}\right) * \f] * * The type of the spinor is also stored using the SpinorType * enumeration. There are three types supported u_spinortype, * v_spinortype, unknown_spinortype. This information is intended * mainly for use in the case of Majorana particles where matrix * elements can be calculated with either u or v type spinors and * knowledge of which was used will be needed in order to give the * correct correlations. The unknown_spinortypee is intended for * cases where either the spinor for an off-shell line in a matrix * element calculation or the information is genuinely unknown. * * The LorentzSpinorBar class is also provided to store the barred * spinor. * * @see LorentzSpinorBar * * @author Peter Richardson * */ template class LorentzSpinor { public: /** @name Standard constructors. */ //@{ /** * Default zero constructor, optionally specifying \a t, the type. */ LorentzSpinor(SpinorType t = unknown_spinortype) : _type(t) { for(unsigned int ix=0;ix<4;++ix) _spin[ix]=Value(); } /** * Constructor with complex numbers specifying the components, * optionally specifying \a s, the type. */ LorentzSpinor(complex a,complex b, complex c,complex d, SpinorType s = unknown_spinortype) : _type(s) { _spin[0]=a; _spin[1]=b; _spin[2]=c; _spin[3]=d; } //@} /** @name Access the components. */ //@{ /** * Subscript operator to return spinor components */ complex operator[](int i) const { assert( i >= 0 && i <= 3 ); return _spin[i]; } /** * Subscript operator to return spinor components */ complex operator()(int i) const { assert( i >= 0 && i <= 3 ); return _spin[i]; } /** * Set components by index. */ complex & operator()(int i) { assert( i >= 0 && i <= 3 ); return _spin[i]; } /** * Set components by index. */ complex & operator[](int i) { assert( i >= 0 && i <= 3 ); return _spin[i]; } /** * Get first component. */ complex s1() const {return _spin[0];} /** * Get second component. */ complex s2() const {return _spin[1];} /** * Get third component. */ complex s3() const {return _spin[2];} /** * Get fourth component. */ complex s4() const {return _spin[3];} /** * Set first component. */ void setS1(complex in) {_spin[0]=in;} /** * Set second component. */ void setS2(complex in) {_spin[1]=in;} /** * Set third component. */ void setS3(complex in) {_spin[2]=in;} /** * Set fourth component. */ void setS4(complex in) {_spin[3]=in;} //@} /** @name Transformations. */ //@{ /** * Return the barred spinor */ LorentzSpinorBar bar() const; /** * Return the conjugated spinor \f$u_c=C\bar{u}^T\f$. This operation * transforms u-spinors to v-spinors and vice-versa and is required when * dealing with majorana particles. */ LorentzSpinor conjugate() const; /** * Standard Lorentz boost specifying the components of the beta vector. */ LorentzSpinor & boost(double,double,double); /** * Standard Lorentz boost specifying the beta vector. */ LorentzSpinor & boost(const Boost &); /** * General Lorentz transformation */ LorentzSpinor & transform(const SpinHalfLorentzRotation & ); /** * General Lorentz transformation */ LorentzSpinor & transform(const LorentzRotation & r) { transform(r.half()); return *this; } //@} /** @name Functions related to type. */ //@{ /** * Return the type of the spinor. */ SpinorType Type() const {return _type;} //@} /** @name Functions to calculate certain currents. */ //@{ /** * Calculate the left-handed current \f$\bar{f}\gamma^\mu P_Lf\f$. * @param fb The barred spinor. */ template LorentzVector::MulT> > leftCurrent(const LorentzSpinorBar& fb) const { typedef complex::MulT> ResultT; LorentzVector vec; Complex ii(0.,1.); ResultT p1(fb.s3()*s2()),p2(fb.s4()*s1()); vec.setX( -(p1+p2) ); vec.setY( ii*(p1-p2) ); p1 = fb.s3()*s1();p2 = fb.s4()*s2(); vec.setZ( -(p1-p2) ); vec.setT( (p1+p2) ); return vec; } /** * Calculate the right-handed current \f$\bar{f}\gamma^\mu P_Rf\f$. * @param fb The barred spinor. */ template LorentzVector::MulT> > rightCurrent(const LorentzSpinorBar& fb) const { typedef complex::MulT> ResultT; LorentzVector vec; Complex ii(0.,1.); ResultT p1(fb.s1()*s4()),p2(fb.s2()*s3()); vec.setX( (p1+p2)); vec.setY( -ii*(p1-p2)); p1 = fb.s1()*s3();p2 = fb.s2()*s4(); vec.setZ( (p1-p2)); vec.setT( (p1+p2)); return vec; } /** * Calculate the vector current \f$\bar{f}\gamma^\mu f\f$ * @param fb The barred spinor. */ template LorentzVector::MulT> > vectorCurrent(const LorentzSpinorBar& fb) const { typedef complex::MulT> ResultT; LorentzVector vec; Complex ii(0.,1.); ResultT s1s4(fb.s1()*s4()),s2s3(fb.s2()*s3()), s3s2(fb.s3()*s2()),s4s1(fb.s4()*s1()), s1s3(fb.s1()*s3()),s2s4(fb.s2()*s4()), s3s1(fb.s3()*s1()),s4s2(fb.s4()*s2()); vec.setX( s1s4+s2s3-s3s2-s4s1 ); vec.setY( -ii*(s1s4-s2s3-s3s2+s4s1)); vec.setZ( s1s3-s2s4-s3s1+s4s2 ); vec.setT( s1s3+s2s4+s3s1+s4s2); return vec; } /** * Calculate a general current with arbitary left and right couplings, * i.e. \f$\bar{f}\gamma^\mu(c_lP_L+c_RP_R)f\f$ * @param fb The barred spinor. * @param left The left coupling, \f$c_L\f$. * @param right The right coupling, \f$c_R\f$. */ template LorentzVector::MulT> > generalCurrent(const LorentzSpinorBar& fb, Complex left, Complex right) const { typedef complex::MulT> ResultT; LorentzVector vec; Complex ii(0.,1.); ResultT p1(fb.s3()*s2()),p2(fb.s4()*s1()); vec.setX( -left*(p1+p2)); vec.setY( ii*left*(p1-p2)); p1 = fb.s3()*s1();p2 = fb.s4()*s2(); vec.setZ( -left*(p1-p2)); vec.setT( left*(p1+p2)); p1=fb.s1()*s4();p2=fb.s2()*s3(); vec.setX(vec.x()+right*(p1+p2)); vec.setY(vec.y()-ii*right*(p1-p2)); p1 = fb.s1()*s3();p2 = fb.s2()*s4(); vec.setZ(vec.z()+right*(p1-p2)); vec.setT(vec.t()+right*(p1+p2)); return vec; } //@} /** @name Functions to calculate certain scalars. */ //@{ /** * Calculate the left-handed scalar \f$\bar{f}P_Lf\f$. * @param fb The barred spinor. */ template complex::MulT> leftScalar(const LorentzSpinorBar& fb) const { return fb.s1()*s1()+fb.s2()*s2(); } /** * Calculate the right-handed scalar \f$\bar{f}P_Rf\f$. * @param fb The barred spinor. */ template complex::MulT> rightScalar(const LorentzSpinorBar& fb) const { return fb.s3()*s3()+fb.s4()*s4(); } /** * Calculate the scalar \f$\bar{f}f\f$. * @param fb The barred spinor. */ template complex::MulT> scalar(const LorentzSpinorBar& fb) const { return fb.s1()*s1()+fb.s2()*s2()+fb.s3()*s3()+fb.s4()*s4(); } /** * Calculate the pseudoscalar \f$\bar{f}\gamma_5f\f$. * @param fb The barred spinor. */ template complex::MulT> pseudoScalar(const LorentzSpinorBar& fb) const { return -fb.s1()*s1()-fb.s2()*s2()+fb.s3()*s3()+fb.s4()*s4(); } /** * Calculate a general scalar product with arbitary left and right couplings, * i.e. \f$\bar{f}c_lP_L+c_RP_Rf\f$ * @param fb The barred spinor. * @param left The left coupling, \f$c_L\f$. * @param right The right coupling, \f$c_R\f$. */ template complex::MulT> generalScalar(const LorentzSpinorBar& fb, Complex left, Complex right) const { return left*(fb.s1()*s1()+fb.s2()*s2()) + right*(fb.s3()*s3()+fb.s4()*s4()); } //@} private: /** * Type of spinor */ SpinorType _type; /** * Storage of the components. */ complex _spin[4]; }; } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzSpinor.tcc" #endif #endif thepeg-1.8.0.orig/Helicity/ScalarSpinInfo.cc0000644000175000017500000000153111747772425017103 0ustar sunsun// -*- C++ -*- // // ScalarSpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ScalarSpinInfo class. // // Author: Peter Richardson // #include "ScalarSpinInfo.h" using namespace ThePEG; using namespace ThePEG::Helicity; NoPIOClassDescription ScalarSpinInfo::initScalarSpinInfo; // Definition of the static class description member. void ScalarSpinInfo::Init() {} void ScalarSpinInfo::transform(const LorentzMomentum & m, const LorentzRotation & r) { if(isNear(m)) SpinInfo::transform(m,r); } thepeg-1.8.0.orig/Helicity/LorentzRSSpinorBar.h0000644000175000017500000002123011747772425017612 0ustar sunsun// -*- C++ -*- // // LorentzRSSpinorBar.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzRSSpinorBar_H #define ThePEG_LorentzRSSpinorBar_H // This is the declaration of the LorentzRSSpinorBar class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/ThreeVector.h" #include "HelicityDefinitions.h" #include "LorentzRSSpinor.fh" #include "LorentzRSSpinorBar.fh" #include "LorentzSpinorBar.h" #include "LorentzSpinor.h" #include "LorentzPolarizationVector.h" namespace ThePEG { namespace Helicity { /** * The LorentzRSSpinorBar class implements the storage of a * barred Lorentz Rarita-Schwinger Spinor for a spin-3/2 particle. * The design is based on that of the * LorentzRSSpinor class and the details of the implemented * are discussed in more detail in the header file for that class. * * @see LorentzRSSpinor * * \author Peter Richardson * */ template class LorentzRSSpinorBar { public: /** @name Standard constructors. */ //@{ /** * Default zero constructor, optionally specifying \a t, the type. */ LorentzRSSpinorBar(SpinorType t = unknown_spinortype) : _type(t) { for(unsigned int ix=0;ix<4;++ix) for(unsigned int iy=0;iy<4;++iy) _spin[ix][iy]=Value(); } /** * Constructor with complex numbers specifying the components, * optionally specifying \a t, the type. */ LorentzRSSpinorBar(complex a1,complex b1, complex c1,complex d1, complex a2,complex b2, complex c2,complex d2, complex a3,complex b3, complex c3,complex d3, complex a4,complex b4, complex c4,complex d4, SpinorType t=unknown_spinortype) : _type(t) { _spin[0][0]=a1;_spin[1][0]=a2;_spin[2][0]=a3;_spin[3][0]=a4; _spin[0][1]=b1;_spin[1][1]=b2;_spin[2][1]=b3;_spin[3][1]=b4; _spin[0][2]=c1;_spin[1][2]=c2;_spin[2][2]=c3;_spin[3][2]=c4; _spin[0][3]=d1;_spin[1][3]=d2;_spin[2][3]=d3;_spin[3][3]=d4; } //@} /** @name Access the components. */ //@{ /** * Subscript operator to return spinor components */ complex operator()(int i, int j) const { assert( i >= 0 && i <= 3 && j>=0 && j<=3 ); return _spin[i][j]; } /** * Set components by index */ complex & operator () (int i, int j) { assert( i >= 0 && i <= 3 && j>=0 && j<=3 ); return _spin[i][j]; } /** * Get first spinor component for the x vector */ complex xs1() const {return _spin[0][0];} /** * Get second spinor component for the x vector */ complex xs2() const {return _spin[0][1];} /** * Get third spinor component for the x vector */ complex xs3() const {return _spin[0][2];} /** * Get fourth spinor component for the x vector */ complex xs4() const {return _spin[0][3];} /** * Get first spinor component for the y vector */ complex ys1() const {return _spin[1][0];} /** * Get second spinor component for the y vector */ complex ys2() const {return _spin[1][1];} /** * Get third spinor component for the y vector */ complex ys3() const {return _spin[1][2];} /** * Get fourth spinor component for the y vector */ complex ys4() const {return _spin[1][3];} /** * Get first spinor component for the z vector */ complex zs1() const {return _spin[2][0];} /** * Get second spinor component for the z vector */ complex zs2() const {return _spin[2][1];} /** * Get third spinor component for the z vector */ complex zs3() const {return _spin[2][2];} /** * Get fourth spinor component for the z vector */ complex zs4() const {return _spin[2][3];} /** * Get first spinor component for the t vector */ complex ts1() const {return _spin[3][0];} /** * Get second spinor component for the t vector */ complex ts2() const {return _spin[3][1];} /** * Get third spinor component for the t vector */ complex ts3() const {return _spin[3][2];} /** * Get fourth spinor component for the t vector */ complex ts4() const {return _spin[3][3];} /** * Set first spinor component for the x vector */ void setXS1(complex in) {_spin[0][0]=in;} /** * Set second spinor component for the x vector */ void setXS2(complex in) {_spin[0][1]=in;} /** * Set third spinor component for the x vector */ void setXS3(complex in) {_spin[0][2]=in;} /** * Set fourth spinor component for the x vector */ void setXS4(complex in) {_spin[0][3]=in;} /** * Set first spinor component for the y vector */ void setYS1(complex in) {_spin[1][0]=in;} /** * Set second spinor component for the y vector */ void setYS2(complex in) {_spin[1][1]=in;} /** * Set third spinor component for the y vector */ void setYS3(complex in) {_spin[1][2]=in;} /** * Set fourth spinor component for the y vector */ void setYS4(complex in) {_spin[1][3]=in;} /** * Set first spinor component for the z vector */ void setZS1(complex in) {_spin[2][0]=in;} /** * Set second spinor component for the z vector */ void setZS2(complex in) {_spin[2][1]=in;} /** * Set third spinor component for the z vector */ void setZS3(complex in) {_spin[2][2]=in;} /** * Set fourth spinor component for the z vector */ void setZS4(complex in) {_spin[2][3]=in;} /** * Set first spinor component for the t vector */ void setTS1(complex in) {_spin[3][0]=in;} /** * Set second spinor component for the t vector */ void setTS2(complex in) {_spin[3][1]=in;} /** * Set third spinor component for the t vector */ void setTS3(complex in) {_spin[3][2]=in;} /** * Set fourth spinor component for the t vector */ void setTS4(complex in ) {_spin[3][3]=in;} //@} /** @name Arithmetic operators. */ //@{ /** * dot product with a polarization vector */ LorentzSpinorBar dot(const LorentzPolarizationVector & vec) const { LorentzSpinorBar output(_type); for(unsigned int ix=0;ix<4;++ix) { output[ix]=_spin[3][ix]*vec.t()-_spin[0][ix]*vec.x() -_spin[1][ix]*vec.y()-_spin[2][ix]*vec.z(); } return output; } /** * dot product with a 4-momentum */ LorentzSpinorBar dot(const LorentzMomentum & invec) const { LorentzSpinorBar output(_type); LorentzVector vec = UnitRemoval::InvE * invec; unsigned int ix; for(ix=0;ix<4;++ix) { output[ix]=_spin[3][ix]*vec.t()-_spin[0][ix]*vec.x() -_spin[1][ix]*vec.y()-_spin[2][ix]*vec.z(); } return output; } //@} /** @name Transformations. */ //@{ /** * return the barred spinor */ LorentzRSSpinor bar() const; /** * Standard Lorentz boost specifying the components of the beta vector. */ LorentzRSSpinorBar & boost(double,double,double); /** * Standard Lorentz boost specifying the beta vector. */ LorentzRSSpinorBar & boost(const Boost &); /** * General transform */ LorentzRSSpinorBar & transform(const LorentzRotation &); //@} /** @name Functions related to type. */ //@{ /** * Return the type of the spinor. */ SpinorType Type() const {return _type;} //@} /** * Current \f$\bar{f}^\alpha(c_LP_L+c_RP_R)f\f$ for general couplings. * @param f The unbarred spinor * @param left The left-handed coupling, \f$c_L\f$. * @param right The right-handed coupling, \f$c_R\f$. */ template LorentzVector::MulT> > generalCurrent(LorentzSpinor& f, Complex left, Complex right) { typedef complex::MulT> ResultT; ResultT output[4]; unsigned int iz; for(iz=0;iz<4;++iz){ output[iz]= left*(_spin[iz][0]*f.s1()+_spin[iz][1]*f.s2()) +right*(_spin[iz][2]*f.s3()+_spin[iz][3]*f.s4()); } return LorentzVector(output[0],output[1], output[2],output[3]); } private: /** * Type of spinor. */ SpinorType _type; /** * Storage of the components. */ complex _spin[4][4]; }; } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzRSSpinorBar.tcc" #endif #endif thepeg-1.8.0.orig/Helicity/FermionSpinInfo.h0000644000175000017500000001257211747772425017146 0ustar sunsun// -*- C++ -*- // // FermionSpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FermionSpinInfo_H #define ThePEG_FermionSpinInfo_H // This is the declaration of the FermionSpinInfo class. #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/Helicity/LorentzSpinor.h" #include "FermionSpinInfo.fh" namespace ThePEG { namespace Helicity { /** * The FermionSpinInfo class inherits from the SpinInfo class and * implements the storage of the basis vectors for a spin-1/2 * particle. The basis states are the u-spinors for a particle and * the v-spinors for an antiparticle. The barred spinors can be * obtained from these. * * These basis states should be set by either matrixelements or * decayers which are capable of generating spin correlation * information. * * The basis states in the rest frame of the particles can then be * accessed by decayers to produce the correct correlations. * * N.B. in our convention 0 is the \f$-\frac12\f$ helicity state and * 1 is the \f$+\frac12\f$ helicity state. * * @author Peter Richardson */ class FermionSpinInfo: public SpinInfo { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ FermionSpinInfo() : SpinInfo(PDT::Spin1Half), _productionstates(2), _currentstates(2), _decaystates(2), _decaycalc(false) {} /** * Standard Constructor. * @param p the production momentum. * @param time true if the particle is time-like. */ FermionSpinInfo(const Lorentz5Momentum & p, bool time) : SpinInfo(PDT::Spin1Half, p, time), _productionstates(2), _currentstates(2), _decaystates(2), _decaycalc(false) {} //@} public: /** @name Set and get methods for the basis state. */ //@{ /** * Set the basis state, this is production state. * @param hel the helicity (0 or 1 as described above.) * @param in the LorentzSpinor for the given helicity. */ void setBasisState(unsigned int hel, const LorentzSpinor & in) const { assert(hel<2); _productionstates[hel] = in; _currentstates [hel] = in; } /** * Set the basis state for the decay. * @param hel the helicity (0 or 1 as described above.) * @param in the LorentzSpinor for the given helicity. */ void setDecayState(unsigned int hel, const LorentzSpinor & in) const { assert(hel<2); _decaycalc = true; _decaystates[hel] = in; } /** * Get the basis state for the production for the given helicity, \a * hel (which is 0 or 1 as described above.) */ const LorentzSpinor & getProductionBasisState(unsigned int hel) const { assert(hel<2); return _productionstates[hel]; } /** * Get the current basis state for the given helicity, \a * hel (which is 0 or 1 as described above.) */ const LorentzSpinor & getCurrentBasisState(unsigned int hel) const { assert(hel<2); return _currentstates[hel]; } /** * Get the basis state for the decay for the given helicity, \a hel * (which is 0 or 1 as described above.) */ const LorentzSpinor & getDecayBasisState(unsigned int hel) const { assert(hel<2); if(!_decaycalc) { for(unsigned int ix=0;ix<2;++ix) _decaystates[ix]=_currentstates[ix]; _decaycalc=true; } return _decaystates[hel]; } //@} /** * Perform a lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum &,const LorentzRotation &); public: /** * Standard Init function. */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const; private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initFermionSpinInfo; /** * Private and non-existent assignment operator. */ FermionSpinInfo & operator=(const FermionSpinInfo &); private: /** * basis states in the frame in which the particle was produced */ mutable vector > _productionstates; /** * basis states in the current frame of the particle */ mutable vector > _currentstates; /** * basis states in the frame in which the particle decays */ mutable vector > _decaystates; /** * True if the decay state has been set. */ mutable bool _decaycalc; }; } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * FermionSpinInfo. */ template <> struct BaseClassTrait : public ClassTraitsType { /** Typedef of the base class of FermionSpinInfo. */ typedef ThePEG::SpinInfo NthBase; }; /** * This template specialization informs ThePEG about the name of the * FermionSpinInfo class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::Helicity::FermionSpinInfo"; } }; /** @endcond */ } #endif /* ThePEG_FermionSpinInfo_H */ thepeg-1.8.0.orig/Helicity/FermionSpinInfo.cc0000644000175000017500000000207711747772425017303 0ustar sunsun// -*- C++ -*- // // FermionSpinInfo.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FermionSpinInfo class. // // Author: Peter Richardson // #include "FermionSpinInfo.h" #include "ThePEG/Repository/CurrentGenerator.h" using namespace ThePEG; using namespace ThePEG::Helicity; NoPIOClassDescription FermionSpinInfo::initFermionSpinInfo; // Definition of the static class description member. void FermionSpinInfo::Init() {} void FermionSpinInfo::transform(const LorentzMomentum & m, const LorentzRotation & r) { if(isNear(m)) { for(unsigned int ix=0;ix<2;++ix) _currentstates[ix].transform(r); SpinInfo::transform(m,r); } } EIPtr FermionSpinInfo::clone() const { tcSpinPtr temp=this; return const_ptr_cast(temp); } thepeg-1.8.0.orig/Helicity/LorentzRSSpinorBar.cc0000644000175000017500000000061011747772425017747 0ustar sunsun// -*- C++ -*- // // LorentzRSSpinorBar.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "LorentzRSSpinorBar.tcc" #endif thepeg-1.8.0.orig/Helicity/LorentzPolarizationVector.h0000644000175000017500000000151711747772425021312 0ustar sunsun// -*- C++ -*- // // LorentzPolarizationVector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzPolarizationVector_H #define ThePEG_LorentzPolarizationVector_H // This is the declaration of the LorentzPolarizationVector class. #include "ThePEG/Config/Unitsystem.h" #include "ThePEG/Config/Complex.h" #include "ThePEG/Vectors/LorentzVector.h" namespace ThePEG { namespace Helicity { /// Convenience typedef. typedef LorentzVector > LorentzPolarizationVector; /// Convenience typedef. typedef LorentzVector > LorentzPolarizationVectorE; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/0000755000175000017500000000000011756460365016326 5ustar sunsunthepeg-1.8.0.orig/Helicity/WaveFunction/ScalarWaveFunction.h0000644000175000017500000000603111747772425022240 0ustar sunsun// -*- C++ -*- // // ScalarWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ScalarWaveFunction_H #define ThePEG_ScalarWaveFunction_H // // This is the declaration of the ScalarWaveFunction class. #include "WaveFunctionBase.h" #include #include #include namespace ThePEG { namespace Helicity { /** \ingroup Helicity * \author Peter Richardson * * This class is the base class for scalar wavefunctions for use in * helicity amplitude calculations. The general approach * is to use a similar philosophy to the FORTRAN HELAS code but with * additional structure. * * This class stores the scalar wavefunction as a complex number and inherits * from the WaveFunctionBase class for the storage of the particles * momentum and type. * * @see WaveFunctionBase */ class ScalarWaveFunction : public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum, direction and Wavefunction. * @param p The momentum. * @param part The ParticleData pointer * @param wave The wavefunction. * @param dir The direction of the particle. */ ScalarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, Complex wave,Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==1); } /** * Constructor,set the 5-momentum and zero the wavefunction. * @param p The 5-momentum. * @param part The ParticleData pointer. * @param dir The direction of the particle. */ ScalarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf(1.0) { assert(iSpin()==1); } static void calculateWaveFunctions(RhoDMatrix & rho, tPPtr, Direction) { rho=RhoDMatrix(PDT::Spin0); } static void constructSpinInfo(tPPtr part,Direction, bool time) { tScalarSpinPtr inspin; if(part->spinInfo()) inspin=dynamic_ptr_cast(part->spinInfo()); if(inspin) return; assert(!part->spinInfo()); ScalarSpinPtr temp = new_ptr(ScalarSpinInfo(part->momentum(),time)); part->spinInfo(temp); } /** * Default constructor. */ ScalarWaveFunction() : WaveFunctionBase(), _wf(1.0) {} /** * Special for spin correlations */ ScalarWaveFunction(tPPtr p,Direction dir,bool time) : WaveFunctionBase(p->momentum(), p->dataPtr(), dir), _wf(1.0) { assert(iSpin()==1); constructSpinInfo(p,dir,time); } /** * Return the wavefunction. */ const Complex & wave() const {return _wf;} public: void transform(const LorentzRotation & r) { transformMomentum(r); } private: /** * Complex number to store the wavefunction. */ Complex _wf; }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/RSSpinorBarWaveFunction.h0000644000175000017500000002406311747772425023204 0ustar sunsun// -*- C++ -*- // // RSSpinorBarWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RSSpinorBarWaveFunction_H #define ThePEG_RSSpinorBarWaveFunction_H // // This is the declaration of the RSSpinorBarWaveFunction class. // #include "WaveFunctionBase.h" #include #include #include #include namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The RSSpinorBarWaveFunction class is designed to * store the wavefunction of a spin-\f$\frac32\f$ particle in a form * suitable for use in helicity amplitude calculations of the matrix * element using a similar philosophy to the FORTRAN HELAS code. * * In addition to storing the barred spinor using the * LorentzRSSpinorBar class it inherits from the * WaveFunctionBase class to provide storage of the * momentum and ParticleData for the fermion. * * This class also contains the code which does the actually * calculation of the barred spinor for an external particle * * When calculating the wavefunction the direction of the particle is used, * * \e i.e. * - incoming calculates a \f$\bar{v}\f$ spinor. * - outgoing calculates a \f$\bar{u}\f$ spinor. * * The barred spinors are calculated using a Clebsch-Gordon decomposition * in the rest-frame for a massive particle and boosted to the lab-frame. * For massless particles the calculation is performed in the lab-frame * (N.B. there are only two helicities \f$\pm\frac32\f$ in this case.) * * N.B. In our convention 0 is the \f$-\frac32\f$ helicity state, * 1 is the \f$-\frac12\f$ helicity state, * 2 is the \f$+\frac12\f$ helicity state * 3 is the \f$+\frac32\f$ helicity state and * * @see WaveFunctionBase * @see LorentzRSSpinorBar * @see HelicityDefinitions * */ class RSSpinorBarWaveFunction: public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and the components of the spinor * @param p The momentum. * @param part The ParticleData pointer. * @param xs1 The first spinor component of the \f$x\f$ vector. * @param xs2 The second spinor component of the \f$x\f$ vector. * @param xs3 The third spinor component of the \f$x\f$ vector. * @param xs4 The fourth spinor component of the \f$x\f$ vector. * @param ys1 The first spinor component of the \f$y\f$ vector. * @param ys2 The second spinor component of the \f$y\f$ vector. * @param ys3 The third spinor component of the \f$y\f$ vector. * @param ys4 The fourth spinor component of the \f$y\f$ vector. * @param zs1 The first spinor component of the \f$z\f$ vector. * @param zs2 The second spinor component of the \f$z\f$ vector. * @param zs3 The third spinor component of the \f$z\f$ vector. * @param zs4 The fourth spinor component of the \f$z\f$ vector. * @param ts1 The first spinor component of the \f$t\f$ vector. * @param ts2 The second spinor component of the \f$t\f$ vector. * @param ts3 The third spinor component of the \f$t\f$ vector. * @param ts4 The fourth spinor component of the \f$t\f$ vector. */ RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, complex xs1, complex xs2, complex xs3, complex xs4, complex ys1, complex ys2, complex ys3, complex ys4, complex zs1, complex zs2, complex zs3, complex zs4, complex ts1, complex ts2, complex ts3, complex ts4) : WaveFunctionBase(p,part), _wf(xs1,xs2,xs3,xs4, ys1,ys2,ys3,ys4, zs1,zs2,zs3,zs4, ts1,ts2,ts3,ts4) { assert(iSpin()==4); } /** * Constructor, set the momentum and the wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param wave The wavefunction. */ RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, LorentzRSSpinorBar & wave) : WaveFunctionBase(p,part), _wf(wave) { assert(iSpin()==4); } /** * Constructor, set the particle and the wavefunction. * @param p Particle * @param wave The wavefunction. * @param dir The direction of the particle */ RSSpinorBarWaveFunction(const tPPtr & p, const LorentzRSSpinorBar & wave, Direction dir=intermediate) : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type()) { assert(iSpin()==4); for (unsigned int i=0; i<4; ++i) for(unsigned int j=0; j<4; ++j) _wf(i,j)=wave(i,j)*UnitRemoval::InvSqrtE; } /** * Constructor, set the momentum, helicity, direction. * @param p The momentum. * @param part The ParticleData pointer. * @param ihel The helicity (0,1,2,3 as described above.) * @param dir The direction. */ RSSpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel,Direction dir) : WaveFunctionBase(p,part,dir) { assert(iSpin()==4); calculateWaveFunction(ihel); } /** * Constructor, set the momentum, direction, zero the * wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param dir The direction. */ RSSpinorBarWaveFunction(Lorentz5Momentum p,tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==4); } /** * Default constructor */ RSSpinorBarWaveFunction() : WaveFunctionBase(), _wf() {} //@} /** * Access to the wavefunction and its components. */ //@{ /** * subscript operator for the wavefunction * Set components by index. */ complex operator ()(int i, int j) const { assert( i>=0 && i<=3 && j>=0 && j<=3 ); return _wf(i,j); } /** * return wavefunction as LorentzRSSpinorBar */ const LorentzRSSpinorBar & wave() const {return _wf;} /** * Get first spinor component for the x vector */ complex xs1() const {return _wf.xs1();} /** * Get second spinor component for the x vector */ complex xs2() const {return _wf.xs2();} /** * Get third spinor component for the x vector */ complex xs3() const {return _wf.xs3();} /** * Get fourth spinor component for the x vector */ complex xs4() const {return _wf.xs4();} /** * Get first spinor component for the y vector */ complex ys1() const {return _wf.ys1();} /** * Get second spinor component for the y vector */ complex ys2() const {return _wf.ys2();} /** * Get third spinor component for the y vector */ complex ys3() const {return _wf.ys3();} /** * Get fourth spinor component for the y vector */ complex ys4() const {return _wf.ys4();} /** * Get first spinor component for the z vector */ complex zs1() const {return _wf.zs1();} /** * Get second spinor component for the z vector */ complex zs2() const {return _wf.zs2();} /** * Get third spinor component for the z vector */ complex zs3() const {return _wf.zs3();} /** * Get fourth spinor component for the z vector */ complex zs4() const {return _wf.zs4();} /** * Get first spinor component for the t vector */ complex ts1() const {return _wf.ts1();} /** * Get second spinor component for the t vector */ complex ts2() const {return _wf.ts2();} /** * Get third spinor component for the t vector */ complex ts3() const {return _wf.ts3();} /** * Get fourth spinor component for the t vector */ complex ts4() const {return _wf.ts4();} //@} /** * reset functions */ //@{ /** * Reset the helicity (calculates the new spinor). * @param ihel The helicity (0,1,2,3 as described above.) */ void reset(unsigned int ihel) { calculateWaveFunction(ihel); } //@} public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time); private: /** * Calcuate the wavefunction. * @param ihel The helicity (0,1,2,3 as described above.) */ void calculateWaveFunction(unsigned int ihel); private: /** * storage of the Lorentz RSSpinorBar */ LorentzRSSpinorBar _wf; /// Return wavefunction as LorentzRSSpinorBar LorentzRSSpinorBar dimensionedWf() const { LorentzRSSpinorBar temp(_wf.Type()); for (unsigned int i=0; i<4; ++i) for (unsigned int j=0; j<4; ++j) temp(i,j) = _wf(i,j)*UnitRemoval::SqrtE; return temp; } }; } } #endif /* ThePEG_RSSpinorBarWaveFunction_H */ thepeg-1.8.0.orig/Helicity/WaveFunction/SpinorBarWaveFunction.h0000644000175000017500000001673211747772425022743 0ustar sunsun// -*- C++ -*- // // SpinorBarWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SpinorBarWaveFunction_H #define ThePEG_SpinorBarWaveFunction_H // // This is the declaration of the SpinorBarWaveFunction class. #include "WaveFunctionBase.h" #include #include #include #include namespace ThePEG { namespace Helicity { /** * Forward declaration of the SpinorWaveFunction class */ class SpinorWaveFunction; /** \ingroup Helicity * \author Peter Richardson * * The SpinorBarWaveFunction class is designed to store the wavefunction * of a barred spinor in a form suitable for use in helicity amplitude * calculations of the matrix element using a similar philosophy to the * FORTRAN HELAS code. * * In addition to storing the spinor using the LorentzSpinorBar class * it inherits from the WaveFunctionBase class to provide storage of * the momentum and ParticleData for the fermion. * * This class also contains the code which does the actually calculation * of the barred spinor for an external particle. * * When calculating the wavefunction the direction of the particle is used, * * \e i.e. * - incoming calculates a \f$\bar{v}\f$ spinor. * - outgoing calculates a \f$\bar{u}\f$ spinor. * * N.B. In our convention 0 is the \f$-\frac12\f$ helicity state and * 1 is the \f$+\frac12\f$ helicity state * * @see WaveFunctionBase * @see LorentzSpinorBar * @see HelicityDefinitions */ class SpinorBarWaveFunction : public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and the components of the spinor. * @param p The momentum. * @param part The ParticleData pointer. * @param s1 The first component * @param s2 The second component * @param s3 The third component * @param s4 The fourth component */ SpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, complex s1,complex s2, complex s3,complex s4) : WaveFunctionBase(p,part), _wf(s1,s2,s3,s4) { assert(iSpin()==2); } /** * Constructor, set the momentum and the wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param wave The wavefunction. * @param dir The direction of the particle */ SpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, const LorentzSpinorBar & wave, Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==2); } SpinorBarWaveFunction(const tPPtr & p, const LorentzSpinorBar & wave, Direction dir=intermediate) : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type()) { assert(iSpin()==2); for (unsigned int i=0; i<4; ++i) _wf[i]=wave[i]*UnitRemoval::InvSqrtE; } /** * Constructor, set the momentum, helicity, direction. * @param p The momentum. * @param part The ParticleData pointer. * @param ihel The helicity (0,1 as described above.) * @param dir The direction. */ SpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel,Direction dir) : WaveFunctionBase(p,part,dir) { assert(iSpin()==2); calculateWaveFunction(ihel); } /** * Constructor, set the momentum, direction, zero the * wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param dir The direction. */ SpinorBarWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==2); } /** * Default constructor. */ SpinorBarWaveFunction() : WaveFunctionBase(), _wf() {} /** * Special for spin correlations */ SpinorBarWaveFunction(vector & wave, tPPtr part,Direction dir,bool time,bool=true) { calculateWaveFunctions(wave,part,dir); constructSpinInfo(wave,part,dir,time); } //@} /** * Access to the wavefunction and its components. */ //@{ /** * Subscript operator for the wavefunction. */ complex operator ()(int i) const { assert(i>=0 &&i<=3); return _wf(i); } /** * Return wavefunction as LorentzSpinorBar. */ const LorentzSpinorBar & wave() const {return _wf;} /// Return wavefunction as LorentzSpinorBar LorentzSpinorBar dimensionedWave() const { return dimensionedWf(); } /** * Get the first spin component component. */ complex s1() const {return _wf.s1();} /** * Get the second spin component component. */ complex s2() const {return _wf.s2();} /** * Get the third spin component component. */ complex s3() const {return _wf.s3();} /** * Get the fourth spin component component. */ complex s4() const {return _wf.s4();} /** * Take the conjugate of the spinor \f$u_c=C\bar{u}^T\f$. This operation * transforms u-spinors to v-spinors and vice-versa and is required when * dealing with majorana particles. */ void conjugate(); /** * Return the barred spinor */ SpinorWaveFunction bar(); /** * Reset functions. */ //@{ /** * Reset the helicity (calculates the new spinor). * @param ihel The helicity (0,1 as described above.) */ void reset(unsigned int ihel) { calculateWaveFunction(ihel); } //@} private: /** * Calcuate the wavefunction. * @param ihel The helicity (0,1 as described above.) */ void calculateWaveFunction(unsigned int ihel); public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time); private: /** * Storage of the Lorentz SpinorBar wavefunction. */ LorentzSpinorBar _wf; /// Return wavefunction as LorentzSpinorBar LorentzSpinorBar dimensionedWf() const { LorentzSpinorBar temp(_wf.Type()); for (unsigned int i=0; i<4; ++i) temp(i) = _wf(i)*UnitRemoval::SqrtE; return temp; } }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/SpinorWaveFunction.h0000644000175000017500000001710311747772425022307 0ustar sunsun// -*- C++ -*- // // SpinorWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SpinorWaveFunction_H #define ThePEG_SpinorWaveFunction_H // // This is the declaration of the SpinorWaveFunction class. // #include "WaveFunctionBase.h" #include #include #include #include namespace ThePEG { namespace Helicity { /** * Forward declaration of the SpinorBarWaveFunction class */ class SpinorBarWaveFunction; /** \ingroup Helicity * \author Peter Richardson * * The SpinorWaveFunction class is designed to store the wavefunction * of a spinor in a form suitable for use in helicity amplitude calculations * of the matrix element using a similar philosophy to the FORTRAN HELAS code. * * In addition to storing the spinor using the LorentzSpinor class * it inherits from the WaveFunctionBase class to provide storage of * the momentum and getParticleData for the fermion. * * This class also contains the code which does the actually calculation * of the spinor for an external particle. * * When calculating the wavefunction the direction of the particle is used, * * \e i.e. * - incoming calculates a \f$u\f$ spinor. * - outgoing calculates a \f$v\f$ spinor. * * N.B. In our convention 0 is the \f$-\frac12\f$ helicity state and * 1 is the \f$+\frac12\f$ helicity state * * @see WaveFunctionBase * @see LorentzSpinor * @see HelicityDefinitions */ class SpinorWaveFunction : public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and the components of the spinor. * @param p The momentum. * @param part The ParticleData pointer. * @param s1 The first component * @param s2 The second component * @param s3 The third component * @param s4 The fourth component */ SpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,complex s1, complex s2,complex s3,complex s4) : WaveFunctionBase(p,part), _wf(s1,s2,s3,s4) { assert(iSpin()==2); } /** * Constructor, set the momentum and the wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param wave The wavefunction. * @param dir The direction of the particle */ SpinorWaveFunction(const Lorentz5Momentum & p, tcPDPtr part, const LorentzSpinor & wave, Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==2); } /** * Constructor, set the momentum and the wavefunction. * @param p The particle * @param wave The wavefunction. * @param dir The direction of the particle */ SpinorWaveFunction(const tPPtr & p, const LorentzSpinor & wave, Direction dir=intermediate) : WaveFunctionBase(p->momentum(), p->dataPtr(), dir), _wf(wave.Type()) { assert(iSpin()==2); for (unsigned int i=0; i<4; ++i) _wf[i]=wave[i]*UnitRemoval::InvSqrtE; } /** * Constructor, set the momentum, helicity, direction. * @param p The momentum. * @param part The ParticleData pointer. * @param ihel The helicity (0,1 as described above.) * @param dir The direction. */ SpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel, Direction dir) : WaveFunctionBase(p,part,dir) { assert(iSpin()==2); calculateWaveFunction(ihel); } /** * Constructor, set the momentum, direction, zero the * wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param dir The direction. */ SpinorWaveFunction(const Lorentz5Momentum & p, tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==2); } /** * Default constructor. */ SpinorWaveFunction() : WaveFunctionBase(), _wf() {} /** * Special for spin correlations */ SpinorWaveFunction(vector & wave, tPPtr part,Direction dir,bool time,bool=true) { calculateWaveFunctions(wave,part,dir); constructSpinInfo(wave,part,dir,time); } //@} /** * Access to the wavefunction and its components. */ //@{ /** * Subscript operator for the wavefunction. */ complex operator ()(int i) const { assert(i>=0 &&i<=3); return _wf(i); } /** * Return wavefunction as LorentzSpinor. */ const LorentzSpinor & wave() const {return _wf;} /** * Return wavefunction as LorentzSpinor. */ LorentzSpinor dimensionedWave() const {return dimensionedWf();} /** * Get the first spin component component. */ complex s1() const {return _wf.s1();} /** * Get the second spin component component. */ complex s2() const {return _wf.s2();} /** * Get the third spin component component. */ complex s3() const {return _wf.s3();} /** * Get the fourth spin component component. */ complex s4() const {return _wf.s4();} //@} /** * Take the conjugate of the spinor \f$u_c=C\bar{u}^T\f$. This operation * transforms u-spinors to v-spinors and vice-versa and is required when * dealing with majorana particles. */ void conjugate() { _wf=_wf.conjugate(); } /** * Return the barred spinor */ SpinorBarWaveFunction bar(); /** * Reset functions. */ //@{ /** * Reset the helicity (calculates the new spinor). * @param ihel The helicity (0,1 as described above.) */ void reset(unsigned int ihel) { calculateWaveFunction(ihel); } //@} public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time); private: /** * Calcuate the wavefunction. * @param ihel The helicity (0,1 as described above.) */ void calculateWaveFunction(unsigned int ihel); private: /** * Storage of the Lorentz Spinor. */ LorentzSpinor _wf; /// Return wavefunction as LorentzSpinor LorentzSpinor dimensionedWf() const { LorentzSpinor temp(_wf.Type()); for (unsigned int i=0; i<4; ++i) temp(i) = _wf(i)*UnitRemoval::SqrtE; return temp; } }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/SpinorWaveFunction.cc0000644000175000017500000002440311747772425022446 0ustar sunsun// -*- C++ -*- // // SpinorWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SpinorWaveFunction class. // // Author: Peter Richardson // #include "SpinorWaveFunction.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "SpinorBarWaveFunction.h" using namespace ThePEG; using namespace Helicity; // calculate the Wavefunction void SpinorWaveFunction::calculateWaveFunction(unsigned int ihel) { // check helicity is O.K. Direction dir = direction(); if(dir==intermediate) throw ThePEG::Helicity::HelicityConsistencyError() << "In SpinorWaveFunction::calcluateWaveFunction " << "particle must be incoming or outgoing not intermediate" << Exception::abortnow; if(ihel>1) throw ThePEG::Helicity::HelicityConsistencyError() << "Invalid Helicity = " << ihel << " requested for Spinor" << Exception::abortnow; // extract the momentum components double fact=-1.; if(dir==incoming){fact=1.;} Energy ppx=fact*px(),ppy=fact*py(),ppz=fact*pz(),pee=fact*e(),pmm=mass(); // define and calculate some kinematic quantities Energy2 ptran2 = ppx*ppx+ppy*ppy; Energy pabs = sqrt(ptran2+ppz*ppz); Energy ptran = sqrt(ptran2); // first need to evalulate the 2-component helicity spinors // this is the same regardless of which definition of the spinors // we are using complex hel_wf[2]; // compute the + spinor for + helicty particles and - helicity antiparticles if((dir==incoming && ihel== 1) || (dir==outgoing && ihel==0)) { // no transverse momentum if(ptran==ZERO) { if(ppz>=ZERO) { hel_wf[0] = 1; hel_wf[1] = 0; } else { hel_wf[0] = 0; hel_wf[1] = 1; } } else { InvSqrtEnergy denominator = 1./sqrt(2.*pabs); SqrtEnergy rtppluspz = (ppz>=ZERO) ? sqrt(pabs+ppz) : ptran/sqrt(pabs-ppz); hel_wf[0] = denominator*rtppluspz; hel_wf[1] = denominator/rtppluspz*complex(ppx,ppy); } } // compute the - spinor for - helicty particles and + helicity antiparticles else { // no transverse momentum if(ptran==ZERO) { if(ppz>=ZERO) { hel_wf[0] = 0; hel_wf[1] = 1; } // transverse momentum else { hel_wf[0] = -1; hel_wf[1] = 0; } } else { InvSqrtEnergy denominator = 1./sqrt(2.*pabs); SqrtEnergy rtppluspz = (ppz>=ZERO) ? sqrt(pabs+ppz) : ptran/sqrt(pabs-ppz); hel_wf[0] = denominator/rtppluspz*complex(-ppx,ppy); hel_wf[1] = denominator*rtppluspz; } } SqrtEnergy upper,lower; SqrtEnergy eplusp = sqrt(max(pee+pabs,ZERO)); SqrtEnergy eminusp = ( pmm != ZERO ) ? pmm/eplusp : ZERO; // set up the coefficients for the different cases if(dir==incoming) { if(ihel==1) { upper = eminusp; lower = eplusp; } else { upper = eplusp; lower = eminusp; } } else { if(ihel==1) { upper = -eplusp; lower = eminusp; } else { upper = eminusp; lower =-eplusp; } } // now finally we can construct the spinors _wf = LorentzSpinor( (dir==incoming) ? u_spinortype : v_spinortype); _wf[0]=upper*hel_wf[0]*UnitRemoval::InvSqrtE; _wf[1]=upper*hel_wf[1]*UnitRemoval::InvSqrtE; _wf[2]=lower*hel_wf[0]*UnitRemoval::InvSqrtE; _wf[3]=lower*hel_wf[1]*UnitRemoval::InvSqrtE; } SpinorBarWaveFunction SpinorWaveFunction::bar() { Lorentz5Momentum p = momentum(); if(direction()==outgoing) p *= -1.; tcPDPtr ptemp = particle(); if(direction()==incoming&&particle()->CC()) ptemp = particle()->CC(); return SpinorBarWaveFunction(p,ptemp,_wf.bar(),direction()); } void SpinorWaveFunction:: calculateWaveFunctions(vector > & waves, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { waves[0] = inspin->getProductionBasisState(0); waves[1] = inspin->getProductionBasisState(1); } else { inspin->decay(); if( (particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { waves[0] = inspin->getDecayBasisState(0).conjugate(); waves[1] = inspin->getDecayBasisState(1).conjugate(); } else { waves[0] = inspin->getDecayBasisState(0); waves[1] = inspin->getDecayBasisState(1); } } } // do the calculation else { assert(!particle->spinInfo()); SpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWave(); } } } void SpinorWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getProductionBasisState(ix),dir); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getDecayBasisState(ix).conjugate(),dir); } else { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getDecayBasisState(ix),dir); } } } // do the calculation else { assert(!particle->spinInfo()); SpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave; } } } void SpinorWaveFunction:: calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { waves[0] = inspin->getProductionBasisState(0); waves[1] = inspin->getProductionBasisState(1); rho = RhoDMatrix(PDT::Spin1Half); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { waves[0] = inspin->getDecayBasisState(0).conjugate(); waves[1] = inspin->getDecayBasisState(1).conjugate(); } else { waves[0] = inspin->getDecayBasisState(0); waves[1] = inspin->getDecayBasisState(1); } rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); SpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWave(); } rho = RhoDMatrix(PDT::Spin1Half); } } void SpinorWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getProductionBasisState(ix),dir); rho = RhoDMatrix(PDT::Spin1Half); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getDecayBasisState(ix).conjugate(),dir); } else { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorWaveFunction(particle, inspin->getDecayBasisState(ix),dir); } rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); SpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave; } rho = RhoDMatrix(PDT::Spin1Half); } } void SpinorWaveFunction:: constructSpinInfo(const vector > & waves, tPPtr particle,Direction dir,bool time) { assert(waves.size()==2); tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix]); else inspin->setDecayState(ix,waves[ix]); } else { FermionSpinPtr temp = new_ptr(FermionSpinInfo(particle->momentum(),time)); particle->spinInfo(temp); for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix]); else temp->setDecayState(ix,waves[ix]); } } void SpinorWaveFunction:: constructSpinInfo(const vector & waves, tPPtr particle,Direction dir,bool time) { assert(waves.size()==2); tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix].dimensionedWf()); else inspin->setDecayState(ix,waves[ix].dimensionedWf()); } else { FermionSpinPtr temp = new_ptr(FermionSpinInfo(particle->momentum(),time)); particle->spinInfo(temp); for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].dimensionedWf()); else temp->setDecayState(ix,waves[ix].dimensionedWf()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/RSSpinorWaveFunction.cc0000644000175000017500000002307011747772425022712 0ustar sunsun// -*- C++ -*- // // RSSpinorWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RSSpinorWaveFunction class. // #include "RSSpinorWaveFunction.h" using namespace ThePEG; using namespace ThePEG::Helicity; // calculate the Wavefunction void RSSpinorWaveFunction::calculateWaveFunction(unsigned int ihel) { LorentzRSSpinor news; if(direction()==incoming) news=LorentzRSSpinor(u_spinortype); else news=LorentzRSSpinor(v_spinortype); unsigned int ix,iy; // check helicity and type assert(direction()!=intermediate); assert(ihel<=3); // massive // only two valid helicities in massless case assert( mass()>ZERO || ( ihel == 0 || ihel==3 ) ); // extract the momentum components // compute the normal spinors to construct the RS spinor Complex hel_wf[2][2]; if(direction()==incoming) { // the + spinor hel_wf[0][0] = 1.; hel_wf[0][1] = 0.; // the - spinor hel_wf[1][0] = 0.; hel_wf[1][1] = 1.; } else { // the + spinor hel_wf[0][0] = 0.; hel_wf[0][1] = 1.; // the - spinor hel_wf[1][0] = 1.; hel_wf[1][1] = 0.; } // prefactors double fact = direction()==incoming ? 1. : -1.; Energy pmm=mass(),pee=fact*e(); Energy pabs = sqrt(sqr(px())+sqr(py())+sqr(pz())); SqrtEnergy eplusp = sqrt(pee+pabs); SqrtEnergy eminusp = ( pmm == ZERO ) ? ZERO : pmm/eplusp; SqrtEnergy upper[2],lower[2]; if(direction()==incoming) { upper[0] = eminusp; lower[0] = eplusp ; upper[1] = eplusp ; lower[1] = eminusp; } else { upper[0] =-eplusp ; lower[0] = eminusp; upper[1] = eminusp; lower[1] =-eplusp ; } // now construct the spinors complex spinor[2][4]; for(ix=0;ix<2;++ix) { spinor[ix][0] = upper[ix]*hel_wf[ix][0]; spinor[ix][1] = upper[ix]*hel_wf[ix][1]; spinor[ix][2] = lower[ix]*hel_wf[ix][0]; spinor[ix][3] = lower[ix]*hel_wf[ix][1]; } // compute the polarization vectors to construct the RS spinor Complex vec[3][4],ii(0.,1.); double ort = sqrt(0.5); double r1 = ( pmm == ZERO ) ? 0. : double(pee /pmm); double r2 = ( pmm == ZERO ) ? 0. : double(pabs/pmm); if(direction()==incoming) { vec[0][0] =-ort; vec[0][1] =-ort*ii; vec[0][2] = 0.; vec[0][3] = 0.; vec[1][0] = 0.; vec[1][1] = 0.; vec[1][2] = r1; vec[1][3] = r2; vec[2][0] = ort; vec[2][1] =-ort*ii; vec[2][2] = 0.; vec[2][3] = 0.; } else { vec[0][0] = ort; vec[0][1] =-ort*ii; vec[0][2] = 0.; vec[0][3] = 0.; vec[1][0] = 0.; vec[1][1] = 0.; vec[1][2] =-r1; vec[1][3] =-r2; vec[2][0] =-ort; vec[2][1] =-ort*ii; vec[2][2] = 0.; vec[2][3] = 0.; } // now we can put the bits together to compute the RS spinor double or3(sqrt(1./3.)),tor3(sqrt(2./3.)); if(ihel==3) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE*vec[0][ix]*spinor[0][iy]; } else if(ihel==2) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE* (or3*vec[0][ix]*spinor[1][iy]+tor3*vec[1][ix]*spinor[0][iy]); } else if(ihel==1) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE* (or3*vec[2][ix]*spinor[0][iy]+tor3*vec[1][ix]*spinor[1][iy]); } else if(ihel==0) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE*vec[2][ix]*spinor[1][iy]; } // spinor is currently along the z axis, rotate so in right direction if(pabs/pmm>1e-8) { Axis axis; axis.setX(fact*momentum().x()/pabs); axis.setY(fact*momentum().y()/pabs); axis.setZ(fact*momentum().z()/pabs); double sinth(sqrt(sqr(axis.x())+sqr(axis.y()))); if(sinth>1e-8) { LorentzRotation rot; rot.setRotate(acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.)); _wf= news.transform(rot); } else if (axis.z()<0.) { LorentzRotation rot; rot.setRotateX(Constants::pi); _wf= news.transform(rot); } else { _wf = news; } } else { _wf=news; } } void RSSpinorWaveFunction:: calculateWaveFunctions(vector > & waves, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getProductionBasisState(ix); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getDecayBasisState(ix); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWf(); } } } void RSSpinorWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorWaveFunction(particle, inspin->getProductionBasisState(ix),dir); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorWaveFunction(particle, inspin->getDecayBasisState(ix),dir); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave; } } } void RSSpinorWaveFunction:: calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getProductionBasisState(ix); rho = RhoDMatrix(PDT::Spin3Half); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getDecayBasisState(ix); rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWf(); } rho = RhoDMatrix(PDT::Spin3Half); } } void RSSpinorWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorWaveFunction(particle, inspin->getProductionBasisState(ix),dir); rho = RhoDMatrix(PDT::Spin3Half); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorWaveFunction(particle, inspin->getDecayBasisState(ix),dir); rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave; } rho = RhoDMatrix(PDT::Spin3Half); } } void RSSpinorWaveFunction:: constructSpinInfo(const vector > & waves, tPPtr particle,Direction dir,bool time) { assert(waves.size()==4); tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix]); else inspin->setDecayState(ix,waves[ix]); } else { RSFermionSpinPtr temp = new_ptr(RSFermionSpinInfo(particle->momentum(),time)); particle->spinInfo(temp); for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix]); else temp->setDecayState(ix,waves[ix]); } } void RSSpinorWaveFunction:: constructSpinInfo(const vector & waves, tPPtr particle,Direction dir,bool time) { assert(waves.size()==4); tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix].dimensionedWf()); else inspin->setDecayState(ix,waves[ix].dimensionedWf()); } else { RSFermionSpinPtr temp = new_ptr(RSFermionSpinInfo(particle->momentum(),time)); particle->spinInfo(temp); for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].dimensionedWf()); else temp->setDecayState(ix,waves[ix].dimensionedWf()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/RSSpinorWaveFunction.h0000644000175000017500000002403411747772425022555 0ustar sunsun// -*- C++ -*- // // RSSpinorWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RSSpinorWaveFunction_H #define ThePEG_RSSpinorWaveFunction_H // This is the declaration of the RSSpinorWaveFunction class. #include "WaveFunctionBase.h" #include #include #include #include namespace ThePEG { namespace Helicity { /** \ingroup Helicity * * The RSSpinorWaveFunction class is designed to store the wavefunction * of a spin-3/2 particle in a form suitable for use in helicity amplitude * calculations of the matrix element using a similar philosophy to the * FORTRAN HELAS code. * * In addition to storing the spinor using the LorentzRSSpinor class * it inherits from the WaveFunctionBase class to provide storage of * the momentum and ParticleData for the fermion. * * This class also contains the code which does the actually calculation of the * spinor for an external particle. * * When calculating the wavefunction the direction of the particle is used, * * \e i.e. * - incoming calculates a \f$u\f$ spinor. * - outgoing calculates a \f$v\f$ spinor. * * The spinors are calculated using a Clebsch-Gordon decomposition in the rest-frame * for a massive particle and boosted to the lab-frame. For massless particles the * calculation is performed in the lab-frame (N.B. there are only two helicities * \f$\pm\frac32\f$ in this case.) * * N.B. In our convention 0 is the \f$-\frac32\f$ helicity state, * 1 is the \f$-\frac12\f$ helicity state, * 2 is the \f$+\frac12\f$ helicity state * 3 is the \f$+\frac32\f$ helicity state and * * @see WaveFunctionBase * @see LorentzRSSpinor * @see HelicityDefinitions * */ class RSSpinorWaveFunction: public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and the components of the spinor. * @param p The momentum. * @param part The ParticleData pointer. * @param xs1 The first spinor component of the \f$x\f$ vector. * @param xs2 The second spinor component of the \f$x\f$ vector. * @param xs3 The third spinor component of the \f$x\f$ vector. * @param xs4 The fourth spinor component of the \f$x\f$ vector. * @param ys1 The first spinor component of the \f$y\f$ vector. * @param ys2 The second spinor component of the \f$y\f$ vector. * @param ys3 The third spinor component of the \f$y\f$ vector. * @param ys4 The fourth spinor component of the \f$y\f$ vector. * @param zs1 The first spinor component of the \f$z\f$ vector. * @param zs2 The second spinor component of the \f$z\f$ vector. * @param zs3 The third spinor component of the \f$z\f$ vector. * @param zs4 The fourth spinor component of the \f$z\f$ vector. * @param ts1 The first spinor component of the \f$t\f$ vector. * @param ts2 The second spinor component of the \f$t\f$ vector. * @param ts3 The third spinor component of the \f$t\f$ vector. * @param ts4 The fourth spinor component of the \f$t\f$ vector. */ RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, complex xs1, complex xs2, complex xs3, complex xs4, complex ys1, complex ys2, complex ys3, complex ys4, complex zs1, complex zs2, complex zs3, complex zs4, complex ts1, complex ts2, complex ts3, complex ts4) : WaveFunctionBase(p,part), _wf(xs1,xs2,xs3,xs4, ys1,ys2,ys3,ys4, zs1,zs2,zs3,zs4, ts1,ts2,ts3,ts4) { assert(iSpin()==4); } /** * Constructor, set the momentum and the wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param wave The wavefunction. * @param dir The direction of the particle */ RSSpinorWaveFunction(const Lorentz5Momentum & p, tcPDPtr part, const LorentzRSSpinor & wave, Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==4); } /** * Constructor, set the momentum and the wavefunction. * @param p The Particle pointer. * @param wave The wavefunction. * @param dir The direction of the particle */ RSSpinorWaveFunction(const tPPtr & p, const LorentzRSSpinor & wave, Direction dir=intermediate) : WaveFunctionBase(p->momentum(),p->dataPtr(),dir), _wf(wave.Type()) { assert(iSpin()==4); for (unsigned int i=0; i<4; ++i) for(unsigned int j=0; j<4; ++j) _wf(i,j)=wave(i,j)*UnitRemoval::InvSqrtE; } /** * Constructor, set the momentum, helicity, direction. * @param p The momentum. * @param part The ParticleData pointer. * @param ihel The helicity (0,1,2,3 as described above.) * @param dir The direction. */ RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel, Direction dir) : WaveFunctionBase(p,part,dir) { assert(iSpin()==4); calculateWaveFunction(ihel); } /** * Constructor, set the momentum, direction, zero the * wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param dir The direction. */ RSSpinorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==4); } /** * Default constructor */ RSSpinorWaveFunction() : WaveFunctionBase(), _wf() {} //@} /** * Access to the wavefunction and its components. */ //@{ /** * subscript operator for the wavefunction * Set components by index. */ complex operator ()(int i, int j) const { assert( i>=0 && i<=3 && j>=0 && j<=3); return _wf(i,j); } /** * return wavefunction as LorentzRSSpinor */ const LorentzRSSpinor & wave() const {return _wf;} /** * Get first spinor component for the x vector */ complex xs1() const {return _wf.xs1();} /** * Get second spinor component for the x vector */ complex xs2() const {return _wf.xs2();} /** * Get third spinor component for the x vector */ complex xs3() const {return _wf.xs3();} /** * Get fourth spinor component for the x vector */ complex xs4() const {return _wf.xs4();} /** * Get first spinor component for the y vector */ complex ys1() const {return _wf.ys1();} /** * Get second spinor component for the y vector */ complex ys2() const {return _wf.ys2();} /** * Get third spinor component for the y vector */ complex ys3() const {return _wf.ys3();} /** * Get fourth spinor component for the y vector */ complex ys4() const {return _wf.ys4();} /** * Get first spinor component for the z vector */ complex zs1() const {return _wf.zs1();} /** * Get second spinor component for the z vector */ complex zs2() const {return _wf.zs2();} /** * Get third spinor component for the z vector */ complex zs3() const {return _wf.zs3();} /** * Get fourth spinor component for the z vector */ complex zs4() const {return _wf.zs4();} /** * Get first spinor component for the t vector */ complex ts1() const {return _wf.ts1();} /** * Get second spinor component for the t vector */ complex ts2() const {return _wf.ts2();} /** * Get third spinor component for the t vector */ complex ts3() const {return _wf.ts3();} /** * Get fourth spinor component for the t vector */ complex ts4() const {return _wf.ts4();} //@} /** * reset functions */ //@{ /** * Reset the helicity (calculates the new spinor). * @param ihel The helicity (0,1,2,3 as described above.) */ void reset(unsigned int ihel) { calculateWaveFunction(ihel); } //@} public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time); private: /** * Calcuate the wavefunction. * @param ihel The helicity (0,1,2,3 as described above.) */ void calculateWaveFunction(unsigned int ihel); private: /** * storage of the Lorentz RSSpinor */ LorentzRSSpinor _wf; /// Return wavefunction as LorentzRSSpinor LorentzRSSpinor dimensionedWf() const { LorentzRSSpinor temp(_wf.Type()); for (unsigned int i=0; i<4; ++i) for (unsigned int j=0; j<4; ++j) temp(i,j) = _wf(i,j)*UnitRemoval::SqrtE; return temp; } }; } } #endif /* ThePEG_RSSpinorWaveFunction_H */ thepeg-1.8.0.orig/Helicity/WaveFunction/TensorWaveFunction.h0000644000175000017500000002246411747772425022315 0ustar sunsun// -*- C++ -*- // // TensorWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_TensorWaveFunction_H #define ThePEG_TensorWaveFunction_H // // This is the declaration of the TensorWaveFunction class. // #include "WaveFunctionBase.h" #include "VectorWaveFunction.h" #include #include #include #include namespace ThePEG { namespace Helicity { /**\ingroup Helicity * Definition of the enumerated values of the phase to include in the * calculation of the polarization tensor. */ enum TensorPhase { tensor_phase, /**< Include the phase factor.*/ tensor_nophase, /**< No phase-factor. */ default_tensor_phase=tensor_nophase /**< Default option.*/ }; /** \ingroup Helicity * \author Peter Richardson * * The TensorWaveFunction class is designed to store the wavefunction * of a tensor in a form suitable for use in helicity amplitude * calculations of the matrix element using a similar philosophy to the * FORTRAN HELAS code. * * In addition to storing the tensor using the LorentzTensor class * it inherits from the WaveFunctionBase class to provide storage of * the momentum and ParticleData for the tensor particle. * * This class also contains the code which does the actually * calculation of the tensor wavefunction. * * There are two choices available for the calculation of the * wavefunction. These are set using the TensorPhase enumeration * which specifies a default choice. * The first choice, tensor_phase, includes a phase factor * \f$\exp(\pm i \phi)\f$ for the \f$\pm\f$ helicity states while the second, * tensor_nophase, does not. * * N.B. In our convention * 0 is the \f$-2\f$ helicity state, * 1 is the \f$-1\f$ helicity state, * 2 is the \f$ 0\f$ helicity state, * 3 is the \f$+1\f$ helicity state and * 4 is the \f$+2\f$ helicity state. * * @see WaveFunctionBase * @see LorentzTensor * @see VectorWaveFunction */ class TensorWaveFunction : public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and Wavefunction, the direction can also * be specified. * @param p The momentum. * @param part The ParticleData pointer * @param wave The wavefunction, \e i.e. the polarization vector. * @param dir The direction of the particle. */ TensorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, const LorentzTensor & wave, Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==PDT::Spin2); } /** * Constructor, set the momentum and the components of the tensor. * @param p The momentum. * @param part The ParticleData pointer * @param xx The \f$xx\f$ component. * @param xy The \f$xy\f$ component. * @param xz The \f$xz\f$ component. * @param xt The \f$xt\f$ component. * @param yx The \f$yx\f$ component. * @param yy The \f$yy\f$ component. * @param yz The \f$yz\f$ component. * @param yt The \f$yt\f$ component. * @param zx The \f$zx\f$ component. * @param zy The \f$zy\f$ component. * @param zz The \f$zz\f$ component. * @param zt The \f$zt\f$ component. * @param tx The \f$tx\f$ component. * @param ty The \f$ty\f$ component. * @param tz The \f$tz\f$ component. * @param tt The \f$tt\f$ component. */ TensorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, Complex xx,Complex xy,Complex xz,Complex xt,Complex yx, Complex yy,Complex yz,Complex yt,Complex zx,Complex zy, Complex zz,Complex zt,Complex tx,Complex ty,Complex tz, Complex tt) : WaveFunctionBase(p,part), _wf(xx,xy,xz,xt, yx,yy,yz,yt, zx,zy,zz,zt, tx,ty,tz,tt) { assert(iSpin()==PDT::Spin2); } /** * Constructor, set the momentum, helicity, direction and optionally the phase * @param p The momentum. * @param part The ParticleData pointer * @param ihel The helicity (0,1,2,3,4 as described above.) * @param dir The direction. * @param phase The phase choice. */ TensorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel,Direction dir, TensorPhase phase=default_tensor_phase) : WaveFunctionBase(p,part,dir) { assert(iSpin()==PDT::Spin2); calculateWaveFunction(ihel,phase); } /** * Constructor, set the 5-momentum and direction, zero the wavefunction. * @param p The momentum. * @param part The ParticleData pointer. * @param dir The direction. */ TensorWaveFunction(const Lorentz5Momentum & p, tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==PDT::Spin2); } /** * Default constructor. */ TensorWaveFunction() {} /** * Special for spin correlations \todo make static? */ TensorWaveFunction(vector & wave, tPPtr part,Direction dir,bool time,bool massless, bool=true, TensorPhase phase=default_tensor_phase) { calculateWaveFunctions(wave,part,dir,massless,phase); constructSpinInfo(wave,part,dir,time,massless); } //@} /** * Access to the wavefunction and its components. */ //@{ /** * Subscript operator for the wavefunction. */ Complex operator ()(int i, int j) const { return _wf(i,j); } /** * Set components by index. */ Complex & operator () (int i, int j) { return _wf(i,j); } /** * Return wavefunction as polarization vector. */ const LorentzTensor & wave() const {return _wf;} /** * Get the \f$xx\f$ component. */ Complex xx() const {return _wf.xx();} /** * Get the \f$yx\f$ component. */ Complex yx() const {return _wf.yx();} /** * Get the \f$zx\f$ component. */ Complex zx() const {return _wf.zx();} /** * Get the \f$tx\f$ component. */ Complex tx() const {return _wf.tx();} /** * Get the \f$xy\f$ component. */ Complex xy() const {return _wf.xy();} /** * Get the \f$yy\f$ component. */ Complex yy() const {return _wf.yy();} /** * Get the \f$zy\f$ component. */ Complex zy() const {return _wf.zy();} /** * Get the \f$ty\f$ component. */ Complex ty() const {return _wf.ty();} /** * Get the \f$xz\f$ component. */ Complex xz() const {return _wf.xz();} /** * Get the \f$yz\f$ component. */ Complex yz() const {return _wf.yz();} /** * Get the \f$zz\f$ component. */ Complex zz() const {return _wf.zz();} /** * Get the \f$tz\f$ component. */ Complex tz() const {return _wf.tz();} /** * Get the \f$xt\f$ component. */ Complex xt() const {return _wf.xt();} /** * Get the \f$yt\f$ component. */ Complex yt() const {return _wf.yt();} /** * Get the \f$zt\f$ component. */ Complex zt() const {return _wf.zt();} /** * Get the \f$tt\f$ component. */ Complex tt() const {return _wf.tt();} //@} /** * Reset functions. */ //@{ /** * Reset helicity (recalculate the tensor ). * @param ihel The new helicity (0,1,2,3,4 as described above.) * @param phase The phase choice. */ void reset(unsigned int ihel,TensorPhase phase=default_tensor_phase) { calculateWaveFunction(ihel,phase); } //@} public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, tPPtr particle,Direction,bool massless, TensorPhase phase=default_tensor_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction,bool massless, TensorPhase phase=default_tensor_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction,bool massless, TensorPhase phase=default_tensor_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction,bool massless, TensorPhase phase=default_tensor_phase); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time,bool massless); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool massless); private: /** * Calculate the wavefunction. * @param ihel The helicity (0,1,2,3,4 as described above.) * @param phase The phase choice. */ void calculateWaveFunction(unsigned int ihel, TensorPhase phase=default_tensor_phase); private: /** * Storage of the wavefunction as a Lorentz Tensor. */ LorentzTensor _wf; }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/WaveFunctionBase.h0000644000175000017500000000756211747772425021717 0ustar sunsun// -*- C++ -*- // // WaveFunctionBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_WaveFunctionBase_H #define ThePEG_WaveFunctionBase_H // // This is the declaration of the WaveFunctionBase class. #include #include #include #include namespace ThePEG { namespace Helicity { /** \ingroup Helicity * Definition of the enumerated values used for the direction of the * particles in the calculation of the wavefunction. */ enum Direction { incoming, /**< An incoming particle. */ outgoing, /**< An outgoing particle. */ intermediate /**< An intermediate particle. */ }; /** \ingroup Helicity * \author Peter Richardson * * This class is the base class for all wavefunctions for use in helicity amplitude * calculations. The general approach is to use a similar philosophy * to the FORTRAN HELAS code but with additional structure. * * This class contains the storage of the particle type and 5-momentum * and methods to set/access this information. * * The methods for the wavefunction itself will be implemented in the classes * derived from this one for the specific spin type, for example scalar, spinor, * vector and tensor. * * @see ScalarWaveFunction * @see SpinorWaveFunction * @see SpinorBarWaveFunction * @see VectorWaveFunction * @see RSSpinorWaveFunction * @see RSSpinorBarWaveFunction * @see TensorWaveFunction */ class WaveFunctionBase{ public: /// Constructors //@{ /** * Default constructor */ WaveFunctionBase() : _particle(), _momentum(), _dir(intermediate) {} /** * */ WaveFunctionBase(const Lorentz5Momentum & p, tcPDPtr pd, Direction dir = intermediate) : _particle(pd), _momentum(p), _dir(dir) { if(_dir==outgoing) _momentum *= -1.0; if ( dir != outgoing ) { tcPDPtr anti = pd->CC(); if ( anti ) _particle = anti; } } //@} /** * Access to the momentum components and mass */ //@{ /** * Get the x component of the momentum. */ Energy px() const {return _momentum.x();} /** * Get the y component of the momentum. */ Energy py() const {return _momentum.y();} /** * Get the z component of the momentum. */ Energy pz() const {return _momentum.z();} /** * Get the energy. */ Energy e() const {return _momentum.e();} /** * Get the mass. */ Energy mass() const {return _momentum.mass();} /** * Get off-shell mass squared. */ Energy2 m2() const {return _momentum.m2();} /** * Access to the 5-momentum */ const Lorentz5Momentum & momentum() const {return _momentum;} //@} /** * Access to the particle properties */ //@{ /** * Get the particle id. */ long id() const {return _particle->id();} /** * Get 2s+1 for the particle. */ PDT::Spin iSpin() const {return _particle->iSpin();} /** * Get the particle pointer. */ tcPDPtr particle() const {return _particle;} /** * Get the direction of particle. */ ThePEG::Helicity::Direction direction() const {return _dir;} /** * Set the direction of the particle */ void direction(ThePEG::Helicity::Direction in) {_dir=in;} //@} protected: /** * Perform the Lorentz transformation of the wave function */ void transformMomentum(const LorentzRotation & r) { _momentum.transform(r); } private: /** * Constant pointer to the particle info. */ tcPDPtr _particle; /** * Lorentz 5 momentum. */ Lorentz5Momentum _momentum; /** * Incoming or outgoing. */ Direction _dir; }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/VectorWaveFunction.h0000644000175000017500000001651511747772425022305 0ustar sunsun// -*- C++ -*- // // VectorWaveFunction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VectorWaveFunction_H #define ThePEG_VectorWaveFunction_H // // This is the declaration of the VectorWaveFunction class. // #include "WaveFunctionBase.h" #include #include #include #include namespace ThePEG { namespace Helicity { /** \ingroup Helicity * Definition of the enumerated values of the phase to include in the * calculation of the polarization vector. */ enum VectorPhase { vector_phase, /**< Include the phase factor.*/ vector_nophase, /**< No phase-factor. */ default_vector_phase=vector_nophase /**< Default option.*/ }; /** \ingroup Helicity * * \author Peter Richardson * * The VectorWaveFunction class is designed to store the wavefunction * of a vector in a form suitable for use in helicity amplitude calculations * of the matrix element using a similar philosophy to the FORTRAN HELAS code. * * In addition to storing the vector using the LorentzPolarizationVector class * it inherits from the WaveFunctionBase class to provide storage of the * momentum and ParticleData for the vector boson. * * This class also contains the code which does the actually calculation of the * vector wavefunction. * * There are two choices available for the calculation of the wavefunction. * These are set using the VectorPhase enumeration which specifies a default choice. * The first choice, vector_phase, includes a phase factor \f$\exp(\pm i \phi)\f$ * for the \f$\pm\f$ helicity states while the second, vector_nophase, does not. * * N.B. In our convention 0 is the \f$-1\f$ helicity state and * 1 is the \f$0\f$ helicity state * 2 is the \f$+1\f$ helicity state * * @see WaveFunctionBase * @see LorentzPolarizationVector */ class VectorWaveFunction : public WaveFunctionBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Constructor, set the momentum and Wavefunction, the direction can also * be specified. * @param p The momentum. * @param part The ParticleData pointer * @param wave The wavefunction, \e i.e. the polarization vector. * @param dir The direction of the particle. */ VectorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, const LorentzPolarizationVector & wave, Direction dir=intermediate) : WaveFunctionBase(p,part,dir), _wf(wave) { assert(iSpin()==3); } /** * Constructor, set the momentum and components of the wavefunction. * @param p The momentum. * @param part The ParticleData pointer * @param x The x component of the polarization vector * @param y The y component of the polarization vector * @param z The z component of the polarization vector * @param t The t component of the polarization vector */ VectorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part,const Complex & x, const Complex & y,const Complex & z, const Complex & t) : WaveFunctionBase(p,part), _wf(x,y,z,t) { assert(iSpin()==3); } /** * Constructor, set the momentum, helicity and direction, optionally the choice * of the phase. * @param p The momentum. * @param part The ParticleData pointer. * @param ihel The helicity (0,1,2 as described above.) * @param dir The direction. * @param phase The phase choice. */ VectorWaveFunction(const Lorentz5Momentum & p,tcPDPtr part, unsigned int ihel,Direction dir, VectorPhase phase=default_vector_phase) : WaveFunctionBase(p,part,dir) { assert(iSpin()==3); calculateWaveFunction(ihel,phase); } /** * Constructor, set the 5-momentum and direction, zero the wavefunction. * @param p The 5-momentum. * @param part The ParticleData pointer. * @param dir The direction. */ VectorWaveFunction(const Lorentz5Momentum &p, tcPDPtr part,Direction dir) : WaveFunctionBase(p,part,dir), _wf() { assert(iSpin()==3); } /** * Default constructor. */ VectorWaveFunction() {} /** * Special for spin correlations \todo make static? */ VectorWaveFunction(vector & wave, tPPtr part,Direction dir,bool time,bool massless, bool=true, VectorPhase phase=default_vector_phase) { calculateWaveFunctions(wave,part,dir,massless,phase); constructSpinInfo(wave,part,dir,time,massless); } //@} /** * Access to the wavefunction and its components. */ //@{ /** * Return wavefunction as polarization vector. */ const LorentzPolarizationVector & wave() const { return _wf;} /** * Get x component. */ Complex x() const {return _wf.x();} /** * Get y component. */ Complex y() const {return _wf.y();} /** * Get z component. */ Complex z() const {return _wf.z();} /** * Get t component. */ Complex t() const {return _wf.t();} /** * Reset functions. */ //@{ /** * Reset the helicity (recalculation the polarization vector). * @param ihel The new helicity (0,1,2 as described above.) * @param phase The phase choice. */ void reset(unsigned int ihel,VectorPhase phase=default_vector_phase) { calculateWaveFunction(ihel,phase); } //@} public: /** * Perform the Lorentz transformation of the wave function */ void transform(const LorentzRotation & r) { _wf.transform(r); transformMomentum(r); } public: /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction,bool massless, VectorPhase phase=default_vector_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, tPPtr particle,Direction,bool massless, VectorPhase phase=default_vector_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction,bool massless, VectorPhase phase=default_vector_phase); /** * Calculate the wavefunctions */ static void calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction,bool massless, VectorPhase phase=default_vector_phase); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool massless); /** * Construct the SpinInfo object */ static void constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool massless); private: /** * Calculate the wavefunction * @param ihel The helicity (0,1,2 as described above.) * @param phase The phase choice. */ void calculateWaveFunction(unsigned int ihel, VectorPhase phase=default_vector_phase); private: /** * Storage of the wavefunction as a Lorentz Vector. */ LorentzPolarizationVector _wf; }; } } #endif thepeg-1.8.0.orig/Helicity/WaveFunction/Makefile.in0000644000175000017500000004514311756366734020407 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = Helicity/WaveFunction DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGWaveFunction_la_LIBADD = am_libThePEGWaveFunction_la_OBJECTS = RSSpinorBarWaveFunction.lo \ RSSpinorWaveFunction.lo SpinorBarWaveFunction.lo \ SpinorWaveFunction.lo TensorWaveFunction.lo \ VectorWaveFunction.lo libThePEGWaveFunction_la_OBJECTS = \ $(am_libThePEGWaveFunction_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGWaveFunction_la_SOURCES) DIST_SOURCES = $(libThePEGWaveFunction_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libThePEGWaveFunction.la libThePEGWaveFunction_la_SOURCES = \ RSSpinorBarWaveFunction.cc RSSpinorBarWaveFunction.h \ RSSpinorWaveFunction.cc RSSpinorWaveFunction.h \ ScalarWaveFunction.h \ SpinorBarWaveFunction.cc SpinorBarWaveFunction.h\ SpinorWaveFunction.cc SpinorWaveFunction.h \ TensorWaveFunction.cc TensorWaveFunction.h \ VectorWaveFunction.cc VectorWaveFunction.h \ WaveFunctionBase.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/WaveFunction/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/WaveFunction/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGWaveFunction.la: $(libThePEGWaveFunction_la_OBJECTS) $(libThePEGWaveFunction_la_DEPENDENCIES) $(EXTRA_libThePEGWaveFunction_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGWaveFunction_la_OBJECTS) $(libThePEGWaveFunction_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RSSpinorBarWaveFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RSSpinorWaveFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpinorBarWaveFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpinorWaveFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TensorWaveFunction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VectorWaveFunction.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/WaveFunction/SpinorBarWaveFunction.cc0000644000175000017500000002473311747772425023101 0ustar sunsun// -*- C++ -*- // // SpinorBarWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SpinorBarWaveFunction class. // // Author: Peter Richardson // #include "SpinorBarWaveFunction.h" #include "SpinorWaveFunction.h" using namespace ThePEG; using namespace Helicity; // calculate the Wavefunction void SpinorBarWaveFunction::calculateWaveFunction(unsigned int ihel) { Direction dir=direction(); if(dir==intermediate) ThePEG::Helicity::HelicityConsistencyError() << "In SpinorBarWaveFunction::calcluateWaveFunction " << "particle must be incoming or outgoing not intermediate" << Exception::abortnow; // check ihelicity is O.K. if(ihel>1) ThePEG::Helicity::HelicityConsistencyError() << "Invalid Helicity = " << ihel << " requested for SpinorBar" << Exception::abortnow; // extract the momentum components double fact = dir==incoming ? 1. : -1.; Energy ppx=fact*px(),ppy=fact*py(),ppz=fact*pz(),pee=fact*e(),pmm=mass(); // define and calculate some kinematic quantities Energy2 ptran2 = ppx*ppx+ppy*ppy; Energy pabs = sqrt(ptran2+ppz*ppz); Energy ptran = sqrt(ptran2); // first need to evalulate the 2-component helicity spinors // this is the same regardless of which definition of the spinors // we are using Complex hel_wf[2]; // compute the + spinor for + helicty particles and - helicity antiparticles if((dir==outgoing && ihel== 1) || (dir==incoming && ihel==0)) { // no transverse momentum if(ptran==ZERO) { if(ppz>=ZERO) { hel_wf[0] = 1; hel_wf[1] = 0; } else { hel_wf[0] = 0; hel_wf[1] = 1; } } else { InvSqrtEnergy denominator = 1./sqrt(2.*pabs); SqrtEnergy rtppluspz = (ppz>=ZERO) ? sqrt(pabs+ppz) : ptran/sqrt(pabs-ppz); hel_wf[0] = denominator*rtppluspz; hel_wf[1] = denominator/rtppluspz*complex(ppx,-ppy); } } // compute the - spinor for - helicty particles and + helicity antiparticles else { // no transverse momentum if(ptran==ZERO) { if(ppz>=ZERO) { hel_wf[0] = 0; hel_wf[1] = 1; } // transverse momentum else { hel_wf[0] = -1; hel_wf[1] = 0; } } else { InvSqrtEnergy denominator = 1./sqrt(2.*pabs); SqrtEnergy rtppluspz = (ppz>=ZERO) ? sqrt(pabs+ppz) : ptran/sqrt(pabs-ppz); hel_wf[0] = denominator/rtppluspz*complex(-ppx,-ppy); hel_wf[1] = denominator*rtppluspz; } } SqrtEnergy upper, lower; SqrtEnergy eplusp = sqrt(max(pee+pabs,ZERO)); SqrtEnergy eminusp = ( pmm!=ZERO ) ? pmm/eplusp : ZERO; // set up the coefficients for the different cases if(dir==outgoing) { if(ihel==1) { upper = eplusp; lower = eminusp; } else { upper = eminusp; lower = eplusp; } } else { if(ihel==1) { upper = eminusp; lower = -eplusp; } else { upper =-eplusp; lower = eminusp; } } // now finally we can construct the spinors _wf = LorentzSpinorBar((dir==incoming) ? v_spinortype : u_spinortype); _wf[0] = upper*hel_wf[0]*UnitRemoval::InvSqrtE; _wf[1] = upper*hel_wf[1]*UnitRemoval::InvSqrtE; _wf[2] = lower*hel_wf[0]*UnitRemoval::InvSqrtE; _wf[3] = lower*hel_wf[1]*UnitRemoval::InvSqrtE; } void SpinorBarWaveFunction::conjugate() { _wf=_wf.conjugate(); } SpinorWaveFunction SpinorBarWaveFunction::bar() { Lorentz5Momentum p = momentum(); if(direction()==outgoing) p *= -1.; tcPDPtr ptemp = particle(); if(direction()==incoming&&particle()->CC()) ptemp = particle()->CC(); return SpinorWaveFunction(p,ptemp,_wf.bar(),direction()); } void SpinorBarWaveFunction:: calculateWaveFunctions(vector > & waves, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { waves[0] = inspin->getProductionBasisState(0).bar(); waves[1] = inspin->getProductionBasisState(1).bar(); } else { inspin->decay(); if( (particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { waves[0] = inspin->getDecayBasisState(0).conjugate().bar(); waves[1] = inspin->getDecayBasisState(1).conjugate().bar(); } else { waves[0] = inspin->getDecayBasisState(0).bar(); waves[1] = inspin->getDecayBasisState(1).bar(); } } } // do the calculation else { assert(!particle->spinInfo()); SpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWave(); } } } void SpinorBarWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getProductionBasisState(ix).bar(), dir); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).conjugate().bar(),dir); } else { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).bar(),dir); } } } // do the calculation else { assert(!particle->spinInfo()); SpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave; } } } void SpinorBarWaveFunction:: calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { waves[0] = inspin->getProductionBasisState(0).bar(); waves[1] = inspin->getProductionBasisState(1).bar(); rho = RhoDMatrix(PDT::Spin1Half); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { waves[0] = inspin->getDecayBasisState(0).conjugate().bar(); waves[1] = inspin->getDecayBasisState(1).conjugate().bar(); } else { waves[0] = inspin->getDecayBasisState(0).bar(); waves[1] = inspin->getDecayBasisState(1).bar(); } rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); SpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWave(); } rho = RhoDMatrix(PDT::Spin1Half); } } void SpinorBarWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tFermionSpinPtr inspin = !particle->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(2); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getProductionBasisState(ix).bar(), dir); rho = RhoDMatrix(PDT::Spin1Half); } else { inspin->decay(); if((particle->id()>0&&inspin->getDecayBasisState(0).Type()!=u_spinortype) || (particle->id()<0&&inspin->getDecayBasisState(0).Type()!=v_spinortype)) { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).conjugate().bar(),dir); } else { for(unsigned int ix=0;ix<2;++ix) waves[ix] = SpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).bar(),dir); } rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); SpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<2;++ix) { wave.reset(ix); waves[ix] = wave; } rho = RhoDMatrix(PDT::Spin1Half); } } void SpinorBarWaveFunction:: constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time) { assert(waves.size()==2); tFermionSpinPtr inspin = !part->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<2;++ix) if (dir==outgoing) inspin->setBasisState(ix,waves[ix].bar()); else inspin->setDecayState(ix,waves[ix].bar()); } else { FermionSpinPtr temp = new_ptr(FermionSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].bar()); else temp->setDecayState(ix,waves[ix].bar()); } } void SpinorBarWaveFunction:: constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time) { assert(waves.size()==2); tFermionSpinPtr inspin = !part->spinInfo() ? tFermionSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<2;++ix) if (dir==outgoing) inspin->setBasisState(ix,waves[ix].dimensionedWf().bar()); else inspin->setDecayState(ix,waves[ix].dimensionedWf().bar()); } else { FermionSpinPtr temp = new_ptr(FermionSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<2;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].dimensionedWf().bar()); else temp->setDecayState(ix,waves[ix].dimensionedWf().bar()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/TensorWaveFunction.cc0000644000175000017500000002342511747772425022451 0ustar sunsun// -*- C++ -*- // // TensorWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the TensorWaveFunction class. // // Author: Peter Richardson // #include "TensorWaveFunction.h" using namespace ThePEG; using namespace ThePEG::Helicity; // calculate the actual wavefunction void TensorWaveFunction::calculateWaveFunction(unsigned int ihel, TensorPhase tphase) { int jhel=ihel-2; assert(direction()!=intermediate); // check for a valid helicty combination assert((jhel<=2 && jhel>=-2 && mass() >ZERO) || ((jhel==2 || jhel==-2) && mass()==ZERO)); // extract the momentum components double fact = direction()==outgoing ? -1. : 1; Energy ppx=fact*px(),ppy=fact*py(),ppz=fact*pz(),pee=fact*e(),pmm=mass(); // calculate some kinematic quantites; Energy2 pt2 = sqr(ppx)+sqr(ppy); Energy pabs = sqrt(pt2+sqr(ppz)); Energy pt = sqrt(pt2); // polarization vectors complex epsp[4],epsm[4],eps0[4]; // + helicity vector if needed if(jhel>=0) { // calculate the overall phase complexphase; if(tphase==tensor_phase) { phase = pt==ZERO ? 1. : complex(ppx/pt,-fact*ppy/pt); } else phase = 1.; phase = phase*sqrt(0.5); // first the no pt case if(pt==ZERO) { double sgnz = ppz(0,-fact); epsp[2]=0.; epsp[3]=0.; } else { InvEnergy opabs=1./pabs; InvEnergy opt =1./pt; epsp[0]=phase*complex(-ppz*ppx*opabs*opt, fact*ppy*opt); epsp[1]=phase*complex(-ppz*ppy*opabs*opt, -fact*ppx*opt); epsp[2]=pt*opabs*phase; epsp[3]=0.; } } // - helicity vector if needed if(jhel<=0) { // calculate the overall phase complex phase; if(tphase==tensor_phase) { phase = pt==ZERO ? 1. : complex(ppx/pt,fact*ppy/pt); } else phase = 1.; phase = phase*sqrt(0.5); // first the no pt case if(pt==ZERO) { double sgnz; if(ppz(0,-fact); epsm[2]=0.; epsm[3]=0.; } else { InvEnergy opabs=1./pabs; InvEnergy opt =1./pt; epsm[0]=phase*complex(ppz*ppx*opabs*opt, fact*ppy*opt); epsm[1]=phase*complex(ppz*ppy*opabs*opt, -fact*ppx*opt); epsm[2]=-pt*opabs*phase; epsm[3]=0.; } } // 0 helicity vector if needed if(jhel<=1 && jhel>=-1) { if(pabs==ZERO) { eps0[0] = 0.; eps0[1] = 0.; eps0[2] = 1.; eps0[3] = 0.; } else { InvEnergy empabs=pee/pmm/pabs; eps0[0] = empabs*ppx; eps0[1] = empabs*ppy; eps0[2] = empabs*ppz; eps0[3] = pabs/pmm; } } // put the polarization vectors together to get the wavefunction double ort; switch (jhel) { case 2: for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _wf(ix,iy)=epsp[ix]*epsp[iy]; break; case 1: ort = sqrt(0.5); for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _wf(ix,iy)=ort*( epsp[ix]*eps0[iy]+ eps0[ix]*epsp[iy]); break; case 0: ort = 1./sqrt(6.); for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _wf(ix,iy)=ort*( epsp[ix]*epsm[iy] + epsm[ix]*epsp[iy] +2.*eps0[ix]*eps0[iy]); break; case -1: ort = 1./sqrt(2.); for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _wf(ix,iy)=ort*( epsm[ix]*eps0[iy]+ eps0[ix]*epsm[iy]); break; case -2: for(int ix=0;ix<4;++ix) for(int iy=0;iy<4;++iy) _wf(ix,iy)=epsm[ix]*epsm[iy]; break; default: ThePEG::Helicity::HelicityConsistencyError() << "Invalid Helicity = " << jhel << " requested for Tensor" << Exception::abortnow; break; } } void TensorWaveFunction:: calculateWaveFunctions(vector > & waves, tPPtr particle,Direction dir, bool massless, TensorPhase phase) { tTensorSpinPtr inspin = !particle->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(5); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<5;++ix) waves[ix]=inspin->getProductionBasisState(ix); } else { inspin->decay(); for(unsigned int ix=0;ix<5;++ix) waves[ix]=inspin->getDecayBasisState(ix); } } else { assert(!particle->spinInfo()); TensorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<5;++ix) { if(massless&&ix>0&&ix<5) { waves[ix] = LorentzTensor(); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave.wave(); } } } } void TensorWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle, Direction dir, bool massless, TensorPhase phase) { tTensorSpinPtr inspin = !particle->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(5); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<5;++ix) waves[ix]=TensorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getProductionBasisState(ix),dir); } else { inspin->decay(); for(unsigned int ix=0;ix<5;++ix) waves[ix]=TensorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getDecayBasisState(ix),dir); } } else { assert(!particle->spinInfo()); TensorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<5;++ix) { if(massless&&ix>0&&ix<5) { waves[ix] = TensorWaveFunction(particle->momentum(),particle->dataPtr(),dir); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave; } } } } void TensorWaveFunction:: calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction dir,bool massless, TensorPhase phase) { tTensorSpinPtr inspin = !particle->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(5); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<5;++ix) waves[ix]=inspin->getProductionBasisState(ix); rho = RhoDMatrix(PDT::Spin2); } else { inspin->decay(); for(unsigned int ix=0;ix<5;++ix) waves[ix]=inspin->getDecayBasisState(ix); rho = inspin->rhoMatrix(); } } else { assert(!particle->spinInfo()); TensorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<5;++ix) { if(massless&&ix>0&&ix<5) { waves[ix] = LorentzTensor(); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave.wave(); } } rho = RhoDMatrix(PDT::Spin2); } } void TensorWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle, Direction dir, bool massless, TensorPhase phase) { tTensorSpinPtr inspin = !particle->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(5); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<5;++ix) waves[ix]=TensorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getProductionBasisState(ix),dir); rho = RhoDMatrix(PDT::Spin2); } else { inspin->decay(); for(unsigned int ix=0;ix<5;++ix) waves[ix]=TensorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getDecayBasisState(ix),dir); rho = inspin->rhoMatrix(); } } else { assert(!particle->spinInfo()); TensorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<5;++ix) { if(massless&&ix>0&&ix<5) { waves[ix] = TensorWaveFunction(particle->momentum(),particle->dataPtr(),dir); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave; } } rho = RhoDMatrix(PDT::Spin2); } } void TensorWaveFunction:: constructSpinInfo(const vector > & waves, tPPtr part,Direction dir, bool time,bool ) { assert(waves.size()==5); tTensorSpinPtr inspin = !part->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<5;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix]); else inspin->setDecayState(ix,waves[ix]); } else { TensorSpinPtr temp = new_ptr(TensorSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<5;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix]); else temp->setDecayState(ix,waves[ix]); } } void TensorWaveFunction:: constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool ) { assert(waves.size()==5); tTensorSpinPtr inspin = !part->spinInfo() ? tTensorSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<5;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix].wave()); else inspin->setDecayState(ix,waves[ix].wave()); } else { TensorSpinPtr temp = new_ptr(TensorSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<5;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].wave()); else temp->setDecayState(ix,waves[ix].wave()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/RSSpinorBarWaveFunction.cc0000644000175000017500000002337311747772425023345 0ustar sunsun// -*- C++ -*- // // RSSpinorBarWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RSSpinorBarWaveFunction class. // #include "RSSpinorBarWaveFunction.h" using namespace ThePEG; using namespace ThePEG::Helicity; // calculate the Wavefunction void RSSpinorBarWaveFunction::calculateWaveFunction(unsigned int ihel) { Complex ii(0.,1.); LorentzRSSpinorBar news; if(direction()==incoming) news=LorentzRSSpinorBar(u_spinortype); else news=LorentzRSSpinorBar(v_spinortype); unsigned int ix,iy; assert(direction()!=intermediate); assert(ihel<=3); // only two valid helicities in massless case assert( mass()>ZERO || (ihel == 0 || ihel == 3 ) ); // extract the momentum components // compute the normal spinors to construct the RS spinor Complex hel_wf[2][2]; if(direction()==incoming) { // the + spinor hel_wf[0][0] = 0.; hel_wf[0][1] = 1.; // the - spinor hel_wf[1][0] = 1.; hel_wf[1][1] = 0.; } else { // the + spinor hel_wf[0][0] = 1.; hel_wf[0][1] = 0.; // the - spinor hel_wf[1][0] = 0.; hel_wf[1][1] = 1.; } double fact = direction()==incoming ? 1. : -1.; Energy pmm=mass(),pee=fact*e(); Energy pabs = sqrt(sqr(px())+sqr(py())+sqr(pz())); SqrtEnergy eplusp = sqrt(pee+pabs); SqrtEnergy eminusp = ( pmm == ZERO ) ? ZERO : pmm/eplusp; SqrtEnergy upper[2],lower[2]; if(direction()==incoming) { upper[0] = eminusp; lower[0] =-eplusp ; upper[1] =-eplusp ; lower[1] = eminusp; } else { upper[0] = eplusp ; lower[0] = eminusp; upper[1] = eminusp; lower[1] = eplusp ; } // now construct the spinors complex spinor[2][4]; for(ix=0;ix<2;++ix) { spinor[ix][0] = upper[ix]*hel_wf[ix][0]; spinor[ix][1] = upper[ix]*hel_wf[ix][1]; spinor[ix][2] = lower[ix]*hel_wf[ix][0]; spinor[ix][3] = lower[ix]*hel_wf[ix][1]; } // compute the polarization vectors to construct the RS spinor Complex vec[3][4]; double ort = sqrt(0.5); double r1 = ( pmm == ZERO ) ? 0. : double(pee /pmm); double r2 = ( pmm == ZERO ) ? 0. : double(pabs/pmm); if(direction()==incoming) { vec[0][0] = ort; vec[0][1] = ort*ii; vec[0][2] = 0.; vec[0][3] = 0.; vec[1][0] = 0.; vec[1][1] = 0.; vec[1][2] =-r1; vec[1][3] =-r2; vec[2][0] =-ort; vec[2][1] = ort*ii; vec[2][2] = 0.; vec[2][3] = 0.; } else { vec[0][0] =-ort; vec[0][1] = ort*ii; vec[0][2] = 0.; vec[0][3] = 0.; vec[1][0] = 0.; vec[1][1] = 0.; vec[1][2] = r1; vec[1][3] = r2; vec[2][0] = ort; vec[2][1] = ort*ii; vec[2][2] = 0.; vec[2][3] = 0.; } // now we can put the bits together to compute the RS spinor double or3(sqrt(1./3.)),tor3(sqrt(2./3.)); if(ihel==3) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE*vec[0][ix]*spinor[0][iy]; } else if(ihel==2) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE* (or3*vec[0][ix]*spinor[1][iy]+tor3*vec[1][ix]*spinor[0][iy]); } else if(ihel==1) { for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) news(ix,iy)=UnitRemoval::InvSqrtE* (or3*vec[2][ix]*spinor[0][iy]+tor3*vec[1][ix]*spinor[1][iy]); } else if(ihel==0) { for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { news(ix,iy)=UnitRemoval::InvSqrtE*(vec[2][ix]*spinor[1][iy]); } } } // spinor is currently along the z axis, rotate so in right direction if(pabs/pmm>1e-8) { Axis axis; axis.setX(fact*momentum().x()/pabs); axis.setY(fact*momentum().y()/pabs); axis.setZ(fact*momentum().z()/pabs); double sinth(sqrt(sqr(axis.x())+sqr(axis.y()))); if(sinth>1e-8) { LorentzRotation rot; rot.setRotate(acos(axis.z()),Axis(-axis.y()/sinth,axis.x()/sinth,0.)); _wf = news.transform(rot); } else if (axis.z()<0.) { LorentzRotation rot; rot.setRotateX(Constants::pi); _wf = news.transform(rot); } else { _wf = news; } } else { _wf=news; } } void RSSpinorBarWaveFunction:: calculateWaveFunctions(vector > & waves, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getProductionBasisState(ix).bar(); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getDecayBasisState(ix).bar(); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWf(); } } } void RSSpinorBarWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorBarWaveFunction(particle, inspin->getProductionBasisState(ix).bar(), dir); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).bar(), dir); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave; } } } void RSSpinorBarWaveFunction:: calculateWaveFunctions(vector > & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getProductionBasisState(ix).bar(); rho = RhoDMatrix(PDT::Spin3Half); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = inspin->getDecayBasisState(ix).bar(); rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave.dimensionedWf(); } rho = RhoDMatrix(PDT::Spin3Half); } } void RSSpinorBarWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle,Direction dir) { tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(4); // spin info object exists if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorBarWaveFunction(particle, inspin->getProductionBasisState(ix).bar(), dir); rho = RhoDMatrix(PDT::Spin3Half); } else { inspin->decay(); for(unsigned int ix=0;ix<4;++ix) waves[ix] = RSSpinorBarWaveFunction(particle, inspin->getDecayBasisState(ix).bar(), dir); rho = inspin->rhoMatrix(); } } // do the calculation else { assert(!particle->spinInfo()); RSSpinorBarWaveFunction wave(particle->momentum(),particle->dataPtr(),dir); for(unsigned int ix=0;ix<4;++ix) { wave.reset(ix); waves[ix] = wave; } rho = RhoDMatrix(PDT::Spin3Half); } } void RSSpinorBarWaveFunction:: constructSpinInfo(const vector > & waves, tPPtr particle,Direction dir, bool time) { assert(waves.size()==4); tRSFermionSpinPtr inspin = !particle->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix].bar()); else inspin->setDecayState(ix,waves[ix].bar()); } else { RSFermionSpinPtr temp = new_ptr(RSFermionSpinInfo(particle->momentum(),time)); particle->spinInfo(temp); for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].bar()); else temp->setDecayState(ix,waves[ix].bar()); } } void RSSpinorBarWaveFunction:: constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time) { assert(waves.size()==4); tRSFermionSpinPtr inspin = !part->spinInfo() ? tRSFermionSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<4;++ix) if (dir==outgoing) inspin->setBasisState(ix,waves[ix].dimensionedWf().bar()); else inspin->setDecayState(ix,waves[ix].dimensionedWf().bar()); } else { RSFermionSpinPtr temp = new_ptr(RSFermionSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<4;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].dimensionedWf().bar()); else temp->setDecayState(ix,waves[ix].dimensionedWf().bar()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/VectorWaveFunction.cc0000644000175000017500000002137211747772425022440 0ustar sunsun// -*- C++ -*- // // VectorWaveFunction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the VectorWaveFunction class. // // Author: Peter Richardson // #include "VectorWaveFunction.h" using namespace ThePEG; using namespace ThePEG::Helicity; // calculate the Wavefunction void VectorWaveFunction::calculateWaveFunction(unsigned int ihel,VectorPhase vphase) { Direction dir=direction(); if(dir==intermediate) throw ThePEG::Helicity::HelicityConsistencyError() << "In VectorWaveFunction::calcluateWaveFunction " << "particle must be incoming or outgoing not intermediate" << Exception::abortnow; // check a valid helicity combination if(ihel==0 || ihel==2||(ihel==1&&mass()>ZERO)) { int jhel=ihel-1; // extract the momentum components double fact=-1.; if(dir==incoming){fact=1.;} Energy ppx=fact*px(),ppy=fact*py(),ppz=fact*pz(),pee=fact*e(),pmm=mass(); // calculate some kinematic quantites; Energy2 pt2 = ppx*ppx+ppy*ppy; Energy pabs = sqrt(pt2+ppz*ppz); Energy pt = sqrt(pt2); // overall phase of the vector Complex phase; if(vphase==vector_phase) { if(pt==ZERO || ihel==1) phase = 1.; else if(ihel==0) phase = Complex(ppx/pt,-fact*ppy/pt); else phase = Complex(ppx/pt, fact*ppy/pt); } else phase = 1.; if(ihel!=1) phase = phase/sqrt(2.); // first the +/-1 helicity states if(ihel!=1) { // first the no pt case if(pt==ZERO) { double sgnz; sgnz = ppz(jhel)*phase); _wf.setY(sgnz*phase*complex(0,-fact)); _wf.setZ(0.); _wf.setT(0.); } else { InvEnergy opabs=1./pabs; InvEnergy opt =1./pt; _wf.setX(phase*complex(-jhel*ppz*ppx*opabs*opt, fact*ppy*opt)); _wf.setY(phase*complex(-jhel*ppz*ppy*opabs*opt,-fact*ppx*opt)); _wf.setZ(double(jhel*pt*opabs)*phase); _wf.setT(0.); } } // 0 component for massive vectors else { if(pabs==ZERO) { _wf.setX(0.); _wf.setY(0.); _wf.setZ(1.); _wf.setT(0.); } else { InvEnergy empabs=pee/pmm/pabs; _wf.setX(double(empabs*ppx)); _wf.setY(double(empabs*ppy)); _wf.setZ(double(empabs*ppz)); _wf.setT(double(pabs/pmm)); } } } // special return the momentum as a check of gauge invariance else if(ihel==10) { _wf.setX(double(px()/MeV)); _wf.setY(double(py()/MeV)); _wf.setZ(double(pz()/MeV)); _wf.setT(double(e()/MeV)); } // issue warning and return zero else { ThePEG::Helicity::HelicityConsistencyError() << "Invalid Helicity = " << ihel << " requested for Vector " << particle()->PDGName() << Exception::abortnow; _wf.setX(0.);_wf.setY(0.);_wf.setZ(0.);_wf.setT(0.); } } void VectorWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle,Direction dir,bool massless, VectorPhase phase) { tVectorSpinPtr inspin = !particle->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(3); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<3;++ix) waves[ix]=inspin->getProductionBasisState(ix); } else { inspin->decay(); for(unsigned int ix=0;ix<3;++ix) waves[ix]=inspin->getDecayBasisState(ix); } } else { assert(!particle->spinInfo()); VectorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<3;++ix) { if(massless&&ix==1) { waves[ix] = LorentzPolarizationVector(); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave.wave(); } } } } void VectorWaveFunction:: calculateWaveFunctions(vector & waves, tPPtr particle, Direction dir, bool massless, VectorPhase phase) { tVectorSpinPtr inspin = !particle->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(3); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<3;++ix) waves[ix]=VectorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getProductionBasisState(ix),dir); } else { inspin->decay(); for(unsigned int ix=0;ix<3;++ix) waves[ix]=VectorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getDecayBasisState(ix),dir); } } else { assert(!particle->spinInfo()); VectorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<3;++ix) { if(massless&&ix==1) { waves[ix] = VectorWaveFunction(particle->momentum(), particle->dataPtr(),dir); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave; } } } } void VectorWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho,tPPtr particle, Direction dir,bool massless, VectorPhase phase) { tVectorSpinPtr inspin = !particle->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(3); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<3;++ix) waves[ix]=inspin->getProductionBasisState(ix); rho = RhoDMatrix(PDT::Spin1); } else { inspin->decay(); for(unsigned int ix=0;ix<3;++ix) waves[ix]=inspin->getDecayBasisState(ix); rho = inspin->rhoMatrix(); } } else { assert(!particle->spinInfo()); VectorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<3;++ix) { if(massless&&ix==1) { waves[ix] = LorentzPolarizationVector(); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave.wave(); } } rho = RhoDMatrix(PDT::Spin1); } } void VectorWaveFunction:: calculateWaveFunctions(vector & waves, RhoDMatrix & rho, tPPtr particle, Direction dir,bool massless, VectorPhase phase) { tVectorSpinPtr inspin = !particle->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(particle->spinInfo()); waves.resize(3); if(inspin) { if(dir==outgoing) { for(unsigned int ix=0;ix<3;++ix) waves[ix]=VectorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getProductionBasisState(ix),dir); rho = RhoDMatrix(PDT::Spin1); } else { inspin->decay(); for(unsigned int ix=0;ix<3;++ix) waves[ix]=VectorWaveFunction(particle->momentum(), particle->dataPtr(), inspin->getDecayBasisState(ix),dir); rho = inspin->rhoMatrix(); } } else { assert(!particle->spinInfo()); VectorWaveFunction wave(particle->momentum(),particle->dataPtr(),0, dir,phase); for(unsigned int ix=0;ix<3;++ix) { if(massless&&ix==1) { waves[ix] = VectorWaveFunction(particle->momentum(), particle->dataPtr(),dir); } else { if(ix!=0) wave.reset(ix); waves[ix] = wave; } } rho = RhoDMatrix(PDT::Spin1); } } void VectorWaveFunction:: constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool ) { assert(waves.size()==3); tVectorSpinPtr inspin = !part->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<3;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix]); else inspin->setDecayState(ix,waves[ix]); } else { VectorSpinPtr temp = new_ptr(VectorSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<3;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix]); else temp->setDecayState(ix,waves[ix]); } } void VectorWaveFunction:: constructSpinInfo(const vector & waves, tPPtr part,Direction dir, bool time,bool ) { assert(waves.size()==3); tVectorSpinPtr inspin = !part->spinInfo() ? tVectorSpinPtr() : dynamic_ptr_cast(part->spinInfo()); if(inspin) { for(unsigned int ix=0;ix<3;++ix) if(dir==outgoing) inspin->setBasisState(ix,waves[ix].wave()); else inspin->setDecayState(ix,waves[ix].wave()); } else { VectorSpinPtr temp = new_ptr(VectorSpinInfo(part->momentum(),time)); part->spinInfo(temp); for(unsigned int ix=0;ix<3;++ix) if(dir==outgoing) temp->setBasisState(ix,waves[ix].wave()); else temp->setDecayState(ix,waves[ix].wave()); } } thepeg-1.8.0.orig/Helicity/WaveFunction/Makefile.am0000644000175000017500000000063611747772425020372 0ustar sunsunnoinst_LTLIBRARIES = libThePEGWaveFunction.la libThePEGWaveFunction_la_SOURCES = \ RSSpinorBarWaveFunction.cc RSSpinorBarWaveFunction.h \ RSSpinorWaveFunction.cc RSSpinorWaveFunction.h \ ScalarWaveFunction.h \ SpinorBarWaveFunction.cc SpinorBarWaveFunction.h\ SpinorWaveFunction.cc SpinorWaveFunction.h \ TensorWaveFunction.cc TensorWaveFunction.h \ VectorWaveFunction.cc VectorWaveFunction.h \ WaveFunctionBase.h thepeg-1.8.0.orig/Helicity/LorentzRSSpinor.tcc0000644000175000017500000001223011754473631017502 0ustar sunsun// -*- C++ -*- // // LorentzRSSpinor.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LorentzRSSpinor class. // // Author: Peter Richardson // #include "LorentzRSSpinor.h" #include "LorentzRSSpinorBar.h" using namespace ThePEG; using namespace ThePEG::Helicity; // return the barred spinor template LorentzRSSpinorBar LorentzRSSpinor::bar() const { complex out[4][4]; unsigned int ix; // HELAS for(ix=0;ix<4;++ix) { out[ix][0] = conj(_spin[ix][2]); out[ix][1] = conj(_spin[ix][3]); out[ix][2] = conj(_spin[ix][0]); out[ix][3] = conj(_spin[ix][1]); } return LorentzRSSpinorBar(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); } // boost the spinor template LorentzRSSpinor & LorentzRSSpinor::boost(double bx,double by,double bz) { // work out beta and chi double b2(bx*bx+by*by+bz*bz),beta(sqrt(b2)),chi(atanh(beta)); double sinhchi(sinh(0.5*chi)/beta),coshchi(cosh(0.5*chi)); double gamma = 1.0/sqrt(1.0-b2); double gmmone = b2 >0 ? (gamma-1.)/b2 : 0.0; double bvec[3]={bx,by,bz}; unsigned int ix,iy,ixa,iya; // vector boost matrix double boostv[4][4]; for(ix=0;ix<3;++ix) { for(iy=0;iy<3;++iy){boostv[ix][iy]=bvec[ix]*bvec[iy]*gmmone;} boostv[ix][ix]+=1; boostv[ix][3]=gamma*bvec[ix]; boostv[3][ix]=boostv[ix][3]; } boostv[3][3]=gamma; // spinor boost matrix Complex boosts[4][4],ii(0.,1.),nxminy(bx-ii*by),nxpiny(bx+ii*by); boosts[0][0] = coshchi-sinhchi*bz; boosts[0][1] = -sinhchi*nxminy; boosts[0][2] = 0.; boosts[0][3] = 0.; boosts[1][0] = -sinhchi*nxpiny; boosts[1][1] = coshchi+sinhchi*bz; boosts[1][2] = 0.; boosts[1][3] = 0.; boosts[2][0] = 0.; boosts[2][1] = 0.; boosts[2][2] = coshchi+sinhchi*bz; boosts[2][3] = +sinhchi*nxminy; boosts[3][0] = 0.; boosts[3][1] = 0.; boosts[3][2] = +sinhchi*nxpiny; boosts[3][3] = coshchi-sinhchi*bz; Complex out[4][4]; // apply the boost for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out[ix][iy]=0.; for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) {out[ix][iy]+=boostv[ix][ixa]*boosts[iy][iya]*_spin[ixa][iya];} } } } *this=LorentzRSSpinor(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); return *this; } // boost the spinor template LorentzRSSpinor & LorentzRSSpinor::boost(const Boost & boostvec) { const double beta = boostvec.mag(),b2=beta*beta; const double bx=boostvec.x(),by=boostvec.y(),bz=boostvec.z(); const double boostvec1[3] = {bx, by, bz}; const double gamma = 1.0/sqrt(1.0-b2); const double gmmone = b2 >0 ? (gamma-1.)/b2 : 0.0; const double chi = atanh(beta); const double sinhchi = sinh(0.5*chi)/beta, coshchi = cosh(0.5*chi); complex out[4][4]; Complex ii(0.,1.); const Complex nxminy=bx-ii*by; const Complex nxpiny=bx+ii*by; unsigned int ix,iy,ixa,iya; // vector boost matrix double boostv[4][4]; for(ix=0;ix<3;++ix) { for(iy=0;iy<3;++iy){boostv[ix][iy]=boostvec1[ix]*boostvec1[iy]*gmmone;} boostv[ix][ix]+=1; boostv[ix][3]=gamma*boostvec1[ix]; boostv[3][ix]=boostv[ix][3]; } boostv[3][3]=gamma; // spinor boost matrix Complex boosts[4][4]; boosts[0][0] = coshchi-sinhchi*bz; boosts[0][1] = -sinhchi*nxminy; boosts[0][2] = 0.; boosts[0][3] = 0.; boosts[1][0] = -sinhchi*nxpiny; boosts[1][1] = coshchi+sinhchi*bz; boosts[1][2] = 0.; boosts[1][3] = 0.; boosts[2][0] = 0.; boosts[2][1] = 0.; boosts[2][2] = coshchi+sinhchi*bz; boosts[2][3] = +sinhchi*nxminy; boosts[3][0] = 0.; boosts[3][1] = 0.; boosts[3][2] = +sinhchi*nxpiny; boosts[3][3] = coshchi-sinhchi*bz; // apply the boost for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out[ix][iy]=complex(); for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) {out[ix][iy]+=boostv[ix][ixa]*boosts[iy][iya]*_spin[ixa][iya];} } } } *this= LorentzRSSpinor(out[0][0],out[0][1],out[0][2],out[0][3], out[1][0],out[1][1],out[1][2],out[1][3], out[2][0],out[2][1],out[2][2],out[2][3], out[3][0],out[3][1],out[3][2],out[3][3],_type); return *this; } //general lorentz tranformation template LorentzRSSpinor & LorentzRSSpinor::transform(const LorentzRotation & r) { unsigned int ix,iy,ixa,iya; LorentzRSSpinor out; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { out(ix,iy)=complex(); for(ixa=0;ixa<4;++ixa) { for(iya=0;iya<4;++iya) {out(ix,iy)+=r.one()(ix,ixa)*r.half()(iy,iya)*_spin[ixa][iya];} } } } *this=out; return *this; } thepeg-1.8.0.orig/Helicity/RSFermionSpinInfo.fh0000644000175000017500000000047711747772425017562 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RSFermionSpinInfo class. // #ifndef ThePEG_RSFermionSpinInfo_FH #define ThePEG_RSFermionSpinInfo_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { ThePEG_DECLARE_CLASS_POINTERS(RSFermionSpinInfo,RSFermionSpinPtr); } } #endif thepeg-1.8.0.orig/Helicity/ScalarSpinInfo.fh0000644000175000017500000000046011747772425017113 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the VectorSpinInfo class. // #ifndef ThePEG_ScalarSpinInfo_FH #define ThePEG_ScalarSpinInfo_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { ThePEG_DECLARE_CLASS_POINTERS(ScalarSpinInfo,ScalarSpinPtr); } } #endif thepeg-1.8.0.orig/Helicity/LorentzSpinor.tcc0000644000175000017500000000631711754473631017246 0ustar sunsun// -*- C++ -*- // // LorentzSpinor.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined member // functions of the LorentzSpinor class. // // Author: Peter Richardson // #include "LorentzSpinor.h" #include "LorentzSpinorBar.h" using namespace ThePEG; using namespace ThePEG::Helicity; // return the barred spinor template LorentzSpinorBar LorentzSpinor::bar() const { complex output[4]; // HELAS output[0] = conj(_spin[2]); output[1] = conj(_spin[3]); output[2] = conj(_spin[0]); output[3] = conj(_spin[1]); return LorentzSpinorBar(output[0],output[1],output[2],output[3],_type); } // boost the spinor template LorentzSpinor & LorentzSpinor::boost(double bx,double by,double bz) { // work out beta and chi double beta=sqrt(bx*bx+by*by+bz*bz); double chi = atanh(beta); double sinhchi = sinh(0.5*chi)/beta, coshchi = cosh(0.5*chi); // calculate the new spinor complex out[4]; Complex ii(0.,1.); Complex nxminy=bx-ii*by; Complex nxpiny=bx+ii*by; out[0] = coshchi*_spin[0]+sinhchi*(-bz*_spin[0]-nxminy*_spin[1]); out[1] = coshchi*_spin[1]+sinhchi*(+bz*_spin[1]-nxpiny*_spin[0]); out[2] = coshchi*_spin[2]+sinhchi*(+bz*_spin[2]+nxminy*_spin[3]); out[3] = coshchi*_spin[3]+sinhchi*(-bz*_spin[3]+nxpiny*_spin[2]); for(unsigned int ix=0;ix<4;++ix) _spin[ix]=out[ix]; return *this; } // boost the spinor template LorentzSpinor & LorentzSpinor::boost(const Boost & boostv) { double beta = boostv.mag(); double bx=boostv.x(),by=boostv.y(),bz=boostv.z(); double chi = atanh(beta); double sinhchi = sinh(0.5*chi)/beta, coshchi = cosh(0.5*chi); complex out[4]; Complex ii(0.,1.); Complex nxminy=bx-ii*by; Complex nxpiny=bx+ii*by; out[0] = coshchi*_spin[0]+sinhchi*(-bz*_spin[0]-nxminy*_spin[1]); out[1] = coshchi*_spin[1]+sinhchi*(+bz*_spin[1]-nxpiny*_spin[0]); out[2] = coshchi*_spin[2]+sinhchi*(+bz*_spin[2]+nxminy*_spin[3]); out[3] = coshchi*_spin[3]+sinhchi*(-bz*_spin[3]+nxpiny*_spin[2]); for(unsigned int ix=0;ix<4;++ix) _spin[ix]=out[ix]; return *this; } // general transform template LorentzSpinor & LorentzSpinor:: transform(const SpinHalfLorentzRotation & r) { unsigned int ix,iy; complex out[4]; for(ix=0;ix<4;++ix) { out[ix]=complex(); for(iy=0;iy<4;++iy) out[ix]+=r(ix,iy)*_spin[iy]; } for(ix=0;ix<4;++ix) _spin[ix]=out[ix]; return *this; } // conjugation template LorentzSpinor LorentzSpinor::conjugate() const { SpinorType new_type; switch(_type) { case u_spinortype: new_type=v_spinortype; break; case v_spinortype: new_type=u_spinortype; break; case unknown_spinortype: default: new_type=unknown_spinortype; break; } return LorentzSpinor( conj(_spin[3]), -conj(_spin[2]), -conj(_spin[1]), +conj(_spin[0]), new_type); } thepeg-1.8.0.orig/Helicity/FermionSpinInfo.fh0000644000175000017500000000046511747772425017312 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the FermionSpinInfo class. // #ifndef ThePEG_FermionSpinInfo_FH #define ThePEG_FermionSpinInfo_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { namespace Helicity { ThePEG_DECLARE_CLASS_POINTERS(FermionSpinInfo,FermionSpinPtr); } } #endif thepeg-1.8.0.orig/Helicity/Makefile.in0000644000175000017500000006305211756366734015776 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Helicity ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGHelicity_la_DEPENDENCIES = Vertex/libThePEGVertex.la \ WaveFunction/libThePEGWaveFunction.la am__objects_1 = LorentzSpinor.lo LorentzSpinorBar.lo LorentzTensor.lo \ FermionSpinInfo.lo VectorSpinInfo.lo ScalarSpinInfo.lo \ TensorSpinInfo.lo LorentzRSSpinor.lo LorentzRSSpinorBar.lo \ RSFermionSpinInfo.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGHelicity_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGHelicity_la_OBJECTS = $(am_libThePEGHelicity_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGHelicity_la_SOURCES) DIST_SOURCES = $(libThePEGHelicity_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = WaveFunction Vertex mySOURCES = LorentzSpinor.cc \ LorentzSpinorBar.cc LorentzTensor.cc \ FermionSpinInfo.cc VectorSpinInfo.cc ScalarSpinInfo.cc TensorSpinInfo.cc \ LorentzRSSpinor.cc LorentzRSSpinorBar.cc RSFermionSpinInfo.cc DOCFILES = LorentzPolarizationVector.h LorentzSpinor.h \ LorentzSpinorBar.h LorentzTensor.h \ FermionSpinInfo.h VectorSpinInfo.h ScalarSpinInfo.h TensorSpinInfo.h \ LorentzRSSpinor.h LorentzRSSpinorBar.h RSFermionSpinInfo.h \ epsilon.h INCLUDEFILES = $(DOCFILES) \ LorentzSpinor.fh LorentzSpinor.tcc LorentzSpinorBar.tcc \ LorentzSpinorBar.fh \ FermionSpinInfo.fh \ LorentzTensor.fh \ VectorSpinInfo.fh \ ScalarSpinInfo.fh \ TensorSpinInfo.fh LorentzTensor.tcc \ HelicityDefinitions.h \ LorentzRSSpinor.fh LorentzRSSpinorBar.fh RSFermionSpinInfo.fh \ LorentzRSSpinor.tcc LorentzRSSpinorBar.tcc noinst_LTLIBRARIES = libThePEGHelicity.la libThePEGHelicity_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGHelicity_la_LIBADD = Vertex/libThePEGVertex.la \ WaveFunction/libThePEGWaveFunction.la all: all-recursive .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Helicity/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Helicity/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGHelicity.la: $(libThePEGHelicity_la_OBJECTS) $(libThePEGHelicity_la_DEPENDENCIES) $(EXTRA_libThePEGHelicity_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGHelicity_la_OBJECTS) $(libThePEGHelicity_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FermionSpinInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzRSSpinor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzRSSpinorBar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzSpinor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzSpinorBar.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzTensor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RSFermionSpinInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ScalarSpinInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/TensorSpinInfo.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/VectorSpinInfo.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist cscopelist-recursive ctags \ ctags-recursive distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Helicity/VectorSpinInfo.h0000644000175000017500000001217211747772425017005 0ustar sunsun// -*- C++ -*- // // VectorSpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_VectorSpinInfo_H #define THEPEG_VectorSpinInfo_H // This is the declaration of the VectorSpinInfo class. #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/Helicity/LorentzPolarizationVector.h" #include "VectorSpinInfo.fh" namespace ThePEG { namespace Helicity { /** * The VectorSpinInfo class is the implementation of the spin * information for vector particles. It inherits from the SpinInfo * class and implements the storage of the basis vectors. * * These basis states should be set by either matrixelements or * decayers which are capable of generating spin correlation * information. * * The basis states in the rest frame of the particles can then be * accessed by decayers to produce the correct correlation. * * N.B. in our convention 0 is the \f$-1\f$ helicity state, * 1 is the \f$0\f$ helicity state and * 2 is the \f$+1\f$ helicity state. * * @author Peter Richardson * */ class VectorSpinInfo: public SpinInfo { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ VectorSpinInfo() : SpinInfo(PDT::Spin1), _productionstates(3), _decaystates(3), _currentstates(3), _decaycalc(false) {} /** * Standard Constructor. * @param p the production momentum. * @param time true if the particle is time-like. */ VectorSpinInfo(const Lorentz5Momentum & p, bool time) : SpinInfo(PDT::Spin1, p, time), _productionstates(3), _decaystates(3), _currentstates(3), _decaycalc(false) {} //@} public: /** @name Set and get methods for the basis state. */ //@{ /** * Set the basis state, this is production state. * @param hel the helicity (0,1,2 as described above.) * @param in the LorentzPolarizationVector for the given helicity. */ void setBasisState(unsigned int hel, const LorentzPolarizationVector & in) const { assert(hel<3); _productionstates[hel] = in; _currentstates [hel] = in; } /** * Set the basis state for the decay. * @param hel the helicity (0,1,2 as described above.) * @param in the LorentzPolarizationVector for the given helicity. */ void setDecayState(unsigned int hel, const LorentzPolarizationVector & in) const { assert(hel<3); _decaycalc = true; _decaystates[hel] = in;; } /** * Get the basis state for the production for the given helicity, \a * hel (0,1,2 as described above.) */ const LorentzPolarizationVector & getProductionBasisState(unsigned int hel) const { assert(hel<3); return _productionstates[hel]; } /** * Get the basis state for the decay for the given helicity, \a hel * (0,1,2 as described above.) */ const LorentzPolarizationVector & getDecayBasisState(unsigned int hel) const { assert(hel<3); if(!_decaycalc) { for(unsigned int ix=0;ix<3;++ix) _decaystates[ix]=_currentstates[ix].conjugate(); _decaycalc=true; } // return the basis function return _decaystates[hel]; } //@} /** * Perform a Lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum &,const LorentzRotation & ); public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const; private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initVectorSpinInfo; /** * Private and non-existent assignment operator. */ VectorSpinInfo & operator=(const VectorSpinInfo &); private: /** * Basis states in the frame in which the particle was produced. */ mutable vector _productionstates; /** * Basis states in the frame in which the particle decays. */ mutable vector _decaystates; /** * Basis states in the current frame of the particle */ mutable vector _currentstates; /** * True if the decay state has been set. */ mutable bool _decaycalc; }; } } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the base class of * VectorSpinInfo. */ template <> struct BaseClassTrait : public ClassTraitsType { /** Typedef of the base class of VectorSpinInfo. */ typedef ThePEG::SpinInfo NthBase; }; /** * This template specialization informs ThePEG about the name of the * VectorSpinInfo class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::Helicity::VectorSpinInfo"; } }; /** @endcond */ } #endif /* THEPEG_VectorSpinInfo_H */ thepeg-1.8.0.orig/Helicity/Makefile.am0000644000175000017500000000243611754473631015755 0ustar sunsunSUBDIRS = WaveFunction Vertex mySOURCES = LorentzSpinor.cc \ LorentzSpinorBar.cc LorentzTensor.cc \ FermionSpinInfo.cc VectorSpinInfo.cc ScalarSpinInfo.cc TensorSpinInfo.cc \ LorentzRSSpinor.cc LorentzRSSpinorBar.cc RSFermionSpinInfo.cc DOCFILES = LorentzPolarizationVector.h LorentzSpinor.h \ LorentzSpinorBar.h LorentzTensor.h \ FermionSpinInfo.h VectorSpinInfo.h ScalarSpinInfo.h TensorSpinInfo.h \ LorentzRSSpinor.h LorentzRSSpinorBar.h RSFermionSpinInfo.h \ epsilon.h INCLUDEFILES = $(DOCFILES) \ LorentzSpinor.fh LorentzSpinor.tcc LorentzSpinorBar.tcc \ LorentzSpinorBar.fh \ FermionSpinInfo.fh \ LorentzTensor.fh \ VectorSpinInfo.fh \ ScalarSpinInfo.fh \ TensorSpinInfo.fh LorentzTensor.tcc \ HelicityDefinitions.h \ LorentzRSSpinor.fh LorentzRSSpinorBar.fh RSFermionSpinInfo.fh \ LorentzRSSpinor.tcc LorentzRSSpinorBar.tcc noinst_LTLIBRARIES = libThePEGHelicity.la libThePEGHelicity_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGHelicity_la_LIBADD = Vertex/libThePEGVertex.la \ WaveFunction/libThePEGWaveFunction.la include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Helicity/RSFermionSpinInfo.h0000644000175000017500000001251611747772425017411 0ustar sunsun// -*- C++ -*- // // RSFermionSpinInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2003-2011 Peter Richardson, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_RSFermionSpinInfo_H #define THEPEG_RSFermionSpinInfo_H // This is the declaration of the RSFermionSpinInfo class. #include "ThePEG/EventRecord/SpinInfo.h" #include "ThePEG/Helicity/LorentzRSSpinor.h" #include "RSFermionSpinInfo.fh" namespace ThePEG { namespace Helicity { /** * The RSFermionSpinInfo class inherits from the SpinInfo class and * implements the storage of the basis vector for a spin-3/2 particle. * The basis states are the vector u spinors for a particle and the vector * v-spinors for an antiparticle. The barred spinors can be obtained from these. * * These basis states should be set by either the matrixelements or decayers * which are capable of generating spin correlation information. * * The basis states in the rest frame of the particles can then be accessed by * the decayers to produce the correct correlations. * * N.B. in our convention 0 is the \f$-\frac32\f$ helicity state, * 1 is the \f$-\frac12\f$ helicity state, * 2 is the \f$+\frac12\f$ helicity state, * 3 is the \f$+\frac32\f$ helicity state. * * @see SpinInfo * * \author Peter Richardson * */ class RSFermionSpinInfo: public SpinInfo { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ RSFermionSpinInfo() : SpinInfo(PDT::Spin3Half), _productionstates(4), _decaystates(4), _currentstates(4), _decaycalc(false) {} /** * Standard Constructor. * @param p the production momentum. * @param time true if the particle is time-like. */ RSFermionSpinInfo(const Lorentz5Momentum & p,bool time) : SpinInfo(PDT::Spin3Half, p, time), _productionstates(4), _decaystates(4), _currentstates(4), _decaycalc(false) {} //@} public: /** @name Set and get methods for the basis state. */ //@{ /** * Set the basis state, this is production state. * @param hel the helicity (0,1,2,3 as described above.) * @param in the LorentzRSSpinor for the given helicity. */ void setBasisState(unsigned int hel, const LorentzRSSpinor & in) const { assert(hel<4); _productionstates[hel] = in; _currentstates [hel] = in; } /** * Set the basis state for the decay. * @param hel the helicity (0,1,2,3 as described above.) * @param in the LorentzRSSpinor for the given helicity. */ void setDecayState(unsigned int hel, const LorentzRSSpinor & in) const { assert(hel<4); _decaycalc = true; _decaystates[hel] = in; } /** * Get the basis state for the production for the given helicity, \a * hel (0,1,2,3 as described above.) */ const LorentzRSSpinor & getProductionBasisState(unsigned int hel) const { assert(hel<4); return _productionstates[hel]; } /** * Get the basis state for the decay for the given helicity, \a hel * (0,1,2,3 as described above.) */ const LorentzRSSpinor & getDecayBasisState(unsigned int hel) const { assert(hel<4); if(!_decaycalc) { for(unsigned int ix=0;ix<4;++ix) _decaystates[ix]=_currentstates[ix]; _decaycalc=true; } return _decaystates[hel]; } /** * Perform a lorentz rotation of the spin information */ virtual void transform(const LorentzMomentum &,const LorentzRotation &); //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); /** * Standard clone method. */ virtual EIPtr clone() const; private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initRSFermionSpinInfo; /** * Private and non-existent assignment operator. */ RSFermionSpinInfo & operator=(const RSFermionSpinInfo &); private: /** * Basis states in the frame in which the particle was produced. */ mutable vector > _productionstates; /** * Basis states in the frame in which the particle decays. */ mutable vector > _decaystates; /** * Basis states in the current frame of the particle */ mutable vector > _currentstates; /** * True if the decay state has been set. */ mutable bool _decaycalc; }; } } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * The following template specialization informs ThePEG about the * base class of RSFermionSpinInfo. */ template <> struct BaseClassTrait { /** Typedef of the base class of RSFermionSpinInfo. */ typedef ThePEG::SpinInfo NthBase; }; /** * The following template specialization informs ThePEG about the * name of this class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::Helicity::RSFermionSpinInfo"; } }; /** @endcond */ } #endif /* THEPEG_RSFermionSpinInfo_H */ thepeg-1.8.0.orig/Utilities/0000755000175000017500000000000011756460365014117 5ustar sunsunthepeg-1.8.0.orig/Utilities/CFileLineReader.cc0000644000175000017500000000653511747772425017357 0ustar sunsun// -*- C++ -*- // // CFileLineReader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CFileLineReader class. // #include "CFileLineReader.h" #include "config.h" #include using namespace ThePEG; CFileLineReader::CFileLineReader() : bufflen(defsize), buff(new char[defsize]), pos(buff), bad(false) {} CFileLineReader::CFileLineReader(string filename, int len) : bufflen(len), buff(new char[len]), pos(buff), bad(false) { open(filename); } CFileLineReader::~CFileLineReader() { close(); } void CFileLineReader::open(string filename) { close(); file = CFile(filename, "r"); pos = buff; bad = !file; } void CFileLineReader::close() { file.close(); bad = true; } bool CFileLineReader::readline() { bad = ( file.gets(buff, bufflen) == 0 ); pos = buff; return !bad; } CFileLineReader::operator void *() { // the returned address is not meant to be dereferenced, // it only indicates success. return bad ? 0 : &bad; } bool CFileLineReader::operator!() { return bad; } char CFileLineReader::getc() { char c = *pos++; bad = ( *pos == 0 ); return c; } bool CFileLineReader::skip(char c) { while ( *pos != 0 && *pos++ != c ) {} bad = ( *pos == 0 ); return !bad; } bool CFileLineReader::find(string str) const { return ( string(pos).find(str) != string::npos ); } std::string CFileLineReader::getline() const { return std::string(pos); } CFileLineReader & CFileLineReader::operator>>(long & l) { char * next; l = std::strtol(pos, &next, 0); bad = ( next == pos ); pos = next; return *this; } CFileLineReader & CFileLineReader::operator>>(int & i) { char * next; i = int(std::strtol(pos, &next, 0)); bad = ( next == pos ); pos = next; return *this; } CFileLineReader & CFileLineReader::operator>>(unsigned long & l) { char * next; l = std::strtoul(pos, &next, 0); bad = ( next == pos ); pos = next; return *this; } CFileLineReader & CFileLineReader::operator>>(unsigned int & i) { char * next; i = static_cast(std::strtoul(pos, &next, 0)); bad = ( next == pos ); pos = next; return *this; } CFileLineReader & CFileLineReader::operator>>(double & d) { char * next; d = std::strtod(pos, &next); bad = ( next == pos ); pos = next; // fortran formatted doubles if(!bad && ( *pos == 'd' || *pos == 'D')) { ++pos; int exp; *this >> exp; d *= pow(10.,exp); } return *this; } CFileLineReader & CFileLineReader::operator>>(float & f) { char * next; f = float(std::strtod(pos, &next)); bad = ( next == pos ); pos = next; // fortran formatted doubles if(!bad && ( *pos == 'd' || *pos == 'D')) { ++pos; int exp; *this >> exp; f *= pow(10.,exp); } return *this; } CFileLineReader & CFileLineReader::operator>>(std::string & s) { while ( *pos != 0 && std::isspace(*pos) ) ++pos; bad = ( *pos == 0 ); char * first = pos; while ( *pos != 0 && !std::isspace(*pos) ) ++pos; s.assign(first, pos); return *this; } CFile CFileLineReader::cFile() const { return file; } void CFileLineReader::resetline() { bad = false; pos = buff; } thepeg-1.8.0.orig/Utilities/SimplePhaseSpace.tcc0000644000175000017500000001050611754473671020004 0ustar sunsun// -*- C++ -*- // // SimplePhaseSpace.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the SimplePhaseSpace class. // namespace ThePEG { template void SimplePhaseSpace::CMS(PType & p1, PType & p2, Energy2 s) { typedef ParticleTraits Traits; Energy z = getMagnitude(s, Traits::mass(p1), Traits::mass(p2)); Traits::set3Momentum(p1, Momentum3(ZERO, ZERO, z)); Traits::set3Momentum(p2, Momentum3(ZERO, ZERO, -z)); } template void SimplePhaseSpace::CMS(Energy2 s, PType & p1, PType & p2) { CMS(p1, p2, s, 2.0*UseRandom::rnd() - 1.0, Constants::twopi*UseRandom::rnd()); } template void SimplePhaseSpace::CMS(PType & p1, PType & p2, Energy2 s, double cthe, double phi) { typedef ParticleTraits Traits; Energy r = getMagnitude(s, Traits::mass(p1), Traits::mass(p2)); double sthe = sqrt(1.0-sqr(cthe)); Momentum3 p(r*sthe*cos(phi), r*sthe*sin(phi), r*cthe); Traits::set3Momentum(p1, p); Traits::set3Momentum(p2, -p); } template void SimplePhaseSpace:: CMS(PType & p1, PType & p2, PType & p3, Energy2 s, double x1, double x3) { CMS(p1, p2, p3, s, x1, x3, Constants::twopi*UseRandom::rnd(), acos(2.0*UseRandom::rnd() - 1.0), Constants::twopi*UseRandom::rnd()); } template void SimplePhaseSpace:: CMS(PType & p1, PType & p2, PType & p3, Energy2 s, double x1, double x3, double phii, double the, double phi) { typedef ParticleTraits Traits; Energy Etot = sqrt(s); Energy m1 = Traits::mass(p1); Energy m2 = Traits::mass(p2); Energy m3 = Traits::mass(p3); Energy e1 = 0.5*x1*Etot; Energy e3 = 0.5*x3*Etot; Energy e2 = Etot - e1 - e3; if ( e1 < m1 || e2 < m2 || e3 < m3 ) throw ImpossibleKinematics(); Energy r1 = sqrt(sqr(e1)-sqr(m1)); Energy r2 = sqrt(sqr(e2)-sqr(m2)); Energy r3 = sqrt(sqr(e3)-sqr(m3)); Traits::set3Momentum(p1, Momentum3(ZERO, ZERO, r1)); double cthe2 = (sqr(r3)-sqr(r2)-sqr(r1))/(2.0*r2*r1); double cthe3 = (sqr(r2)-sqr(r3)-sqr(r1))/(2.0*r3*r1); if ( abs(cthe2) > 1.0 || abs(cthe3) > 1.0 ) throw ImpossibleKinematics(); double sthe2 = sqrt(1.0-sqr(cthe2)); Energy px = r2*sthe2*cos(phii); Energy py = r2*sthe2*sin(phii); Traits::set3Momentum(p2, Momentum3(px, py, r2*cthe2)); Traits::set3Momentum(p3, Momentum3(-px, -py, r3*cthe3)); if ( the == 0.0 && phi == 0.0 ) return; LorentzRotation r; r.rotateZ(phi); r.rotateX(the); Traits::transform(p1, r); Traits::transform(p2, r); Traits::transform(p3, r); } template void SimplePhaseSpace:: CMS(PType & p1, PType & p2, Energy2 s, Energy2 t, double phi, const PType & p0) { typedef ParticleTraits Traits; Energy r = getMagnitude(s, Traits::mass(p1), Traits::mass(p2)); Energy e = sqrt(sqr(r) + sqr(Traits::mass(p1))); Energy r0 = Traits::momentum(p0).rho(); Energy e0 = Traits::momentum(p0).e(); double cthe = (t + sqr(e - e0) + sqr(r) + sqr(r0))/(2.0*r*r0); if ( abs(cthe) > 1.0 ) throw ImpossibleKinematics(); double sthe = sqrt(1.0-sqr(cthe)); Momentum3 p(r*sthe*cos(phi), r*sthe*sin(phi), r*cthe); Traits::set3Momentum(p1, p); Traits::set3Momentum(p2, -p); if ( Traits::momentum(p0).perp2() > ZERO ) { LorentzRotation r; r.rotateX(Traits::momentum(p0).theta()); r.rotateZ(Traits::momentum(p0).phi()); Traits::transform(p1, r); Traits::transform(p2, r); } } template void SimplePhaseSpace::CMSn(Container & particles, Energy m0) { typedef typename Container::value_type PType; typedef typename Container::iterator Iterator; if ( particles.size() == 2 ) { Iterator it = particles.begin(); PType & p1 = *it++; PType & p2 = *it; CMS(sqr(m0), p1, p2); return; } typedef ParticleTraits Traits; vector masses(particles.size()); int j = 0; for ( Iterator i = particles.begin();i != particles.end(); ++i, ++j ) masses[j] = Traits::mass(*i); vector p = CMSn(m0, masses); j = 0; for ( Iterator i = particles.begin();i != particles.end(); ++i, ++j ) Traits::set5Momentum(*i, p[j]); } } thepeg-1.8.0.orig/Utilities/Interval.fh0000644000175000017500000000034211747772425016224 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Interval_FH #define ThePEG_Interval_FH #include namespace ThePEG { template > class Interval; } #endif /* ThePEG_Interval_FH */ thepeg-1.8.0.orig/Utilities/SimplePhaseSpace.h0000644000175000017500000002210111747772425017455 0ustar sunsun// -*- C++ -*- // // SimplePhaseSpace.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SimplePhaseSpace_H #define ThePEG_SimplePhaseSpace_H #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Repository/UseRandom.h" #include "SimplePhaseSpace.xh" #include namespace ThePEG { /** * SimplePhaseSpace defines a set of static functions to be used for * distributing momenta evenly in phase space. In most cases pointers * and references to both particle and momentum objects can be used as * arguments as long as the ParticleTraits class is specialized * properly. When needed, random numbers are generated with the * generator given by the static UseRandom class. */ struct SimplePhaseSpace { /** * Set two momenta in their center of mass system. Their total * invariant mass squared is given by s, and their direction is * distributed isotropically. * @param s the total invariant mass squared. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(Energy2 s, PType & p1, PType & p2); /** * Set two momenta in their center of mass system. Their total * invariant mass squared is given by s, and their direction is * given in terms of the polar and azimuth angle of the first * momenta. * @param s the total invariant mass squared. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param cosTheta cosine of the azimuth angle of the first momentum. * @param phi azimuth angle of the first momentum. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(PType & p1, PType & p2, Energy2 s, double cosTheta, double phi); /** * Set two momenta in their center of mass system. Their total * invariant mass squared is given by s. The helper momentum p0 is * used so that afterwards \f$t=(p0-p1)^2\f$ and p1 has the azimuth * angle phi around p0. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param s the total invariant mass squared. * @param t \f$=(p0-p1)^2\f$. * @param phi azimuth angle of the first momentum around p0. * @param p0 pointer or reference to an auxiliary momentum. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(PType & p1, PType & p2, Energy2 s, Energy2 t, double phi, const PType & p0); /** * Set two momenta in their center of mass system. Their total * invariant mass squared is given by s. p1 will be along the z-axis. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param s the total invariant mass squared. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(PType & p1, PType & p2, Energy2 s); /** * Set two momenta in their center of mass system. Their total * invariant mass squared is given by s. The first will be along the * z-axis. * @param p a pair of pointers or references to the two momenta. Their * invariant masses will be preserved. * @param s the total invariant mass squared. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(const PPairType & p, Energy2 s) { CMS(*p.first, *p.second, s); } /** * Set three momenta in their center of mass system. Their total * invariant mass squared is given by s. The energy fraction of * particle p1(3) is x1(3) of the total energy and the angles of the * system is distributed isotropically. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param p3 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param s the total invariant mass squared. * @param x1 the energy fraction \f$2e_1/\sqrt{s}\f$. * @param x3 the energy fraction \f$2e_3/\sqrt{s}\f$. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(PType & p1, PType & p2, PType & p3, Energy2 s, double x1, double x3); /** * Set three momenta in their center of mass system. Their total * invariant mass squared is given by s. The energy fraction of * particle p1(3) is x1(3) of the total energy. Particle p1 is * initially placed along the z-axis and particle p2 is given * azimuth angle phii. Then the system is then rotated with * theta and phi respectively. * @param p1 pointer or reference to the first momentum. Its * invariant mass will be preserved. * @param p2 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param p3 pointer or reference to the second momentum. Its * invariant mass will be preserved. * @param s the total invariant mass squared. * @param x1 the energy fraction \f$2e_1/\sqrt{s}\f$. * @param x3 the energy fraction \f$2e_3/\sqrt{s}\f$. * @param phii the azimuth angle of p2 around p1. * @param theta the polar angle of p1. * @param phi the azimuth angle of p1. * @throw ImpossibleKinematics if the sum of the invariant masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMS(PType & p1, PType & p2, PType & p3, Energy2 s, double x1, double x3, double phii = 0.0, double theta = 0.0, double phi = 0.0); /** * Calculate the absolute magnitude of the momenta of two particles * with masses m1 and m2 when put in their CMS of total invariant * mass squared s. * @param s the total invariant mass squared. * @param m1 the mass of particle 1. * @param m2 the mass of particle 2. * @throw ImpossibleKinematics if the sum of the masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ static Energy getMagnitude(Energy2 s, Energy m1, Energy m2); /** * Return a three-vector given the absolute momentum, cos(theta) and * phi. * @param p the magnitude of the momentum. * @param costheta the cosine of the polar angle. * @param phi the azimuth angle. */ static Momentum3 polar3Vector(Energy p, double costheta, double phi) { return Momentum3(p*sqrt(1.0 - sqr(costheta))*sin(phi), p*sqrt(1.0 - sqr(costheta))*cos(phi), p*costheta); } /** * Get a number of randomly distributed momenta. * Given a number specified invariant masses and a * total invariant mass m0, return corresponding four-momenta * randomly distributed according to phase space. * @param m0 the * total invariant mass of the resulting momenta. * @param m a vector * of invariant masses of the resulting momenta. * @return a vector * of momenta with the given masses randomly distributed. * @throw ImpossibleKinematics if the sum of the masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ static vector CMSn(Energy m0, const vector & m); /** * Set the momentum of a number of particles. Given a number of * particles and a total invariant mass m0, distribute their * four-momenta randomly according to phase space. * @param particles a container of particles or pointers to * particles. The invariant mass of these particles will not be * chaned. * @param m0 the * total invariant mass of the resulting momenta. * @throw ImpossibleKinematics if the sum of the masses was * larger than the given invariant mass (\f$\sqrt{s}\f$). */ template static void CMSn(Container & particles, Energy m0); }; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "SimplePhaseSpace.tcc" #endif #endif /* ThePEG_SimplePhaseSpace_H */ thepeg-1.8.0.orig/Utilities/MaxCmp.h0000644000175000017500000000512311747772425015461 0ustar sunsun// -*- C++ -*- // // MaxCmp.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MaxCmp_H #define THEPEG_MaxCmp_H // // This is the declaration of the MaxCmp class. // #include namespace ThePEG { /** * MaxCmp is a helper class to be used in a loop where one would like * to keep track of the largest value so far of a certain * expression. The class simply checks if the given value to the * operator() is the largest so far (in which case true is returned, * and the value is saved together with the optional index * argument. The Cmp template argument is by default greater, but * can be set to any comparison class to change the meaning of * maximum: MaxCmp > will keep track of the * smallest value. */ template > class MaxCmp { public: /** * The default constructor. */ MaxCmp() : init(false), max(T()), indx(Indx()) {} /** * Constructor specifying an initial maximum value, \a t. */ MaxCmp(const T & t, Indx in = Indx()) : init(true), max(t), indx(in) {} public: /** * If \a t is the largest value seen so far return true. Otherwise * return false. \a i is an optional index for the value \a t. */ bool operator()(const T & t, Indx i = Indx()) { if ( !init || cmp(t, max) ) { max = t; init = true; indx = i; return true; } return false; } /** * Return the largest value so far. */ operator const T & () const { return value(); } /** * Return the largest value so far. */ const T & value() const { return max; } /** * Return the index of the largest object seen so far. */ Indx index() const { return indx; } private: /** * True if a first value has been given; */ bool init; /** * The largest value seen so far. */ T max; /** * The index for the largest value seen so far. */ Indx indx; /** * The comparison object to be used. */ Cmp cmp; }; /** * Special calss for Minimum comparisons. */ template class MinCmp: public MaxCmp > { public: /** * Constructors are not inherited. */ MinCmp() {} /** * Constructors are not inherited. */ MinCmp(const T & t, Indx in = Indx()) : MaxCmp >(t, in) {} }; } #endif /* THEPEG_MaxCmp_H */ thepeg-1.8.0.orig/Utilities/StringUtils.h0000644000175000017500000000536111747772425016567 0ustar sunsun// -*- C++ -*- // // StringUtils.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StringUtils_H #define ThePEG_StringUtils_H // This is the declaration of the StringUtils class. #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * The StringUtils class contains a few static utility functions for * basic strings. */ class StringUtils { public: /** * A vector of strings. */ typedef vector StringVector; /** * Return a vector of string containing the substrings of s, defined * by the separating characters in ws (the ws characters are not * included in the substrings. */ static StringVector split(string s, string ws = " \t\r\n"); /** * Return the first substring of s, defined by the separating * characters in ws (the ws characters are not included in the * substrings. */ static string car(string s, string ws = " \t\r\n"); /** * Return s after removing the first substring, defined by the * separating characters in ws (the ws characters are not included * in the substrings. */ static string cdr(string s, string ws = " \t\r\n"); /** * Return the string \a str stripped from leading and trailing white * space. */ static string stripws(string str); /** * Return the directory path part (excluding the trailing slash) of * the given filename, or an empty string if no directory path is * included */ static string dirname(string file); /** * Return the base name of the given filename, removing the * directory path if present. */ static string basename(string file); /** * Remove the trailing suffix from the given filename. */ static string remsuf(string file); /** * Return the trailing suffix (without the dot) of the given * filename. */ static string suffix(string file); /** * Assuming the \a line contains a valid XML \a tag, scan the \a * line for attributes belonging to this \a tag and return a map of * name-value pairs. Oprionally only look from position \a curr in * the \a line. */ static map xmlAttributes(string tag, string line, string::size_type curr = 0); /** * Try to return a human-readable class name given a type_info * object. Currently only works for simple classes compiled by g++. */ static string typeName(const type_info & t); /** * Convenient typdef. */ typedef string::size_type pos_t; /** * Convenient alias for npos. */ static const pos_t end = string::npos; }; } #endif /* ThePEG_StringUtils_H */ thepeg-1.8.0.orig/Utilities/CFile.h0000644000175000017500000000362511754473671015262 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_CFile_H #define THEPEG_CFile_H // // This is the declaration of the CFile class. // #include "Exception.h" namespace ThePEG { /** * Here is the documentation of the CFile class. */ class CFile { public: /** * Type of the file */ enum FileType { undefined, plain, pipe, gzip, bzip2 }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ CFile(): file(0), fileType(undefined) {} /** * Create a CFile given a file name and a mode. */ CFile(string filename, string mode) : file(0), fileType(undefined) { open(filename, mode); } /** * The destructor. */ ~CFile() {} //@} /** * Open the file */ void open(string filename, string mode); /** * Close the file */ void close(); /** * Pointer to the file */ operator void * () const { return fileType != undefined? file: 0; } /** * Exist for file existance */ bool operator!() const { return !(operator void * ()); } /** * Get characters */ char * gets(char * s, int size); /** * Set characters */ int puts(const char * s); /** * Get the current character */ int getc(); /** * Set the current character */ int putc(int c); /** Pushes the byte specified by \a c (converted to an unsigned char) * back onto the stream */ int ungetc(int c); /** * Read */ size_t read(void *ptr, size_t size, size_t nmemb = 1); /** * Write */ size_t write(const void *ptr, size_t size, size_t nmemb = 1); private: /** * Pointer to the file */ void * file; /** * Type of the file */ FileType fileType; public: /** @cond EXCEPTIONCLASSES */ /** Exception class used by CFile if reading a file fails. */ class FileError: public Exception {}; /** @endcond */ }; } #endif /* THEPEG_CFile_H */ thepeg-1.8.0.orig/Utilities/Rebinder.fh0000644000175000017500000000024411747772425016173 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Rebinder_FH #define ThePEG_Rebinder_FH namespace ThePEG { template class Rebinder; } #endif /* ThePEG_Rebinder_FH */ thepeg-1.8.0.orig/Utilities/DescribeClass.h0000644000175000017500000002662011747772425017007 0ustar sunsun// -*- C++ -*- // // DescribeClass.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DescribeClass_H #define ThePEG_DescribeClass_H #include "ThePEG/Utilities/ClassDescription.h" namespace ThePEG { /** * Helper class for multiple base classes. If a class to be described * by DescribeClass has multiple base classes, B1 and B2, they should * be encoded by BaseClasses. This can be done for up to four * base classes. */ template struct BaseClasses {}; /** * Traits class used by DescribeCLassT for transparent handling of one * base class or a several base classes encoded by BaseClasses. */ template struct BaseClassesTraits { /** The first base class */ typedef T Base1; /** The second base class */ typedef int Base2; /** The third base class */ typedef int Base3; /** The fourth base class */ typedef int Base4; }; /** * Traits class used by DescribeCLassT for transparent handling of one * base class or a several base classes encoded by BaseClasses. */ template struct BaseClassesTraits< BaseClasses > { /** The first base class */ typedef BaseT1 Base1; /** The second base class */ typedef BaseT2 Base2; /** The third base class */ typedef BaseT3 Base3; /** The fourth base class */ typedef BaseT4 Base4; }; /** * Helper class used by DescribeClassT for transparent handling of * classes with and without persistent I/O functions. */ template struct DescribeClassPIOHelper { /** * Call standard output function. */ static void output(const T & t, PersistentOStream & os) { t.persistentOutput(os); } /** * Call standard input function. */ static void input(T & t, PersistentIStream & is, int oldVersion) { t.persistentInput(is, oldVersion); } }; /** * Helper class used by DescribeClassT for transparent handling of * classes with and without persistent I/O functions. */ template struct DescribeClassPIOHelper { /** * Do nothing as T has no persistent I/O functions. */ static void output(const T &, PersistentOStream &) {} /** * Do nothing as T has no persistent I/O functions. */ static void input(T &, PersistentIStream &, int) {} }; /** * Helper class used by DescribeClassT for transparent handling of * abstract and concrete classes. */ template struct DescribeClassAbstractHelper { /** * Default-creat an object. */ static typename ThePEG::Ptr::pointer create() { return new_ptr(T()); } }; /** * Helper class used y DescribeClassT for transparent handling of * abstract and concrete classes. */ template struct DescribeClassAbstractHelper { /** * Throw an exception as the class is bastract. */ static typename ThePEG::Ptr::pointer create() { throw std::logic_error("Tried to instantiate abstract class " + ClassTraits::className()); } }; /** * DescribeClassT and its derived companion classes DescribeClass * DescribeAbstractClass, DescribeNoPIOClass and * DescribeAbstractNoPIOClass, is a simplified interface to the type * information system in ThePEG. For simple classes there is no need * to specialize the ClassTraits and BaseClassTrait classes and to * have a static member variable of ClassDescription in the class (as * in the full ThePEG type info system). Instead it is enough to have * one statically initialized variable of one of the DescraibeClass * classes for each class. The Abstract and NoPIO versions of this * class should be used for abstract classes and classes without * persistent I/O functions respectively. */ template class DescribeClassT: public ClassDescriptionBase { public: ThePEG_DECLARE_TEMPLATE_POINTERS(T,TPtr); ThePEG_DECLARE_POINTERS(Base,BPtr); /** * Constructor taking the name of the class, the dynamic library * where it is located and an optional version number as argument. */ DescribeClassT(string cname, string lib, int vers = 0) : ClassDescriptionBase(cname, typeid(T), vers, lib, Abstract) { DescriptionList::Register(*this); T::Init(); } /** * The descructor. */ virtual ~DescribeClassT() {} /** * Set up the base class information for this object. */ virtual void setup() { DescriptionVector bases; const ClassDescriptionBase * b = DescriptionList::find(typeid(typename BaseClassesTraits::Base1)); if ( b ) bases.push_back(b); b = DescriptionList::find(typeid(typename BaseClassesTraits::Base2)); if ( b ) bases.push_back(b); b = DescriptionList::find(typeid(typename BaseClassesTraits::Base3)); if ( b ) bases.push_back(b); b = DescriptionList::find(typeid(typename BaseClassesTraits::Base4)); if ( b ) bases.push_back(b); baseClasses(bases.begin(), bases.end()); } /** * Default-create an object. */ virtual BPtr create() const { return DescribeClassAbstractHelper::create(); } /** * Call standard output function. */ virtual void output(tcBPtr o, PersistentOStream & os) const { tcTPtr t = dynamic_ptr_cast(o); DescribeClassPIOHelper::output(*t, os); } /** * Call standard input function. */ virtual void input(tBPtr o, PersistentIStream & is, int oldVersion) const { tTPtr t = dynamic_ptr_cast(o); DescribeClassPIOHelper::input(*t, is, oldVersion); } }; /** * DescribeClass and its companion classes DescribeAbstractClass, * DescribeNoPIOClass and DescribeAbstractNoPIOClass, is a simplified * interface to type information system in ThePEG. For simple classes * there is no need to specialize the ClassTraits and BaseClassTrait * classes and to have a static member variable of ClassDescription in * the class (as in the full ThePEG type info system). Instead it is * enough to have one statically initialized variable of one of the * DescraibeClass classes for each class. The Abstract and NoPIO * versions of this class may be used for abstract classes and * classes without persistent I/O functions respectively. * * The template arguments are as follows: * T : the class being described. * BaseT : The base class of T. If several base classes these should be * encoded s template arguments to the BaseClasses class * (at most four base classes can be encoded). * Abstract: shoule be set to true if class T is abstract. * NoPIO : shoule be set to true if class T does not persistent I/O functions. */ template class DescribeClass: public DescribeClassT { public: /** * Constructor taking the name of the class, the dynamic library * where it is located and an optional version number as argument. */ DescribeClass(string cname, string lib, int vers = 0) : DescribeClassT(cname, lib, vers) {} }; /** * DescribeClass and its companion classes DescribeAbstractClass, * DescribeNoPIOClass and DescribeAbstractNoPIOClass, is a simplified * interface to type information system in ThePEG. For simple classes * there is no need to specialize the ClassTraits and BaseClassTrait * classes and to have a static member variable of ClassDescription in * the class (as in the full ThePEG type info system). Instead it is * enough to have one statically initialized variable of one of the * DescraibeClass classes for each class. The Abstract and NoPIO * versions of this class may be used for abstract classes and * classes without persistent I/O functions respectively. * * The template arguments are as follows: * T : the class being described. * BaseT : The base class of T. If several base classes these should be * encoded s template arguments to the BaseClasses class * (at most four base classes can be encoded). */ template class DescribeNoPIOClass: public DescribeClassT { public: /** * Constructor taking the name of the class, the dynamic library * where it is located and an optional version number as argument. */ DescribeNoPIOClass(string cname, string lib, int vers = 0) : DescribeClassT(cname, lib, vers) {} }; /** * DescribeClass and its companion classes DescribeAbstractClass, * DescribeNoPIOClass and DescribeAbstractNoPIOClass, is a simplified * interface to type information system in ThePEG. For simple classes * there is no need to specialize the ClassTraits and BaseClassTrait * classes and to have a static member variable of ClassDescription in * the class (as in the full ThePEG type info system). Instead it is * enough to have one statically initialized variable of one of the * DescraibeClass classes for each class. The Abstract and NoPIO * versions of this class may be used for abstract classes and * classes without persistent I/O functions respectively. * * The template arguments are as follows: * T : the class being described. * BaseT : The base class of T. If several base classes these should be * encoded s template arguments to the BaseClasses class * (at most four base classes can be encoded). */ template class DescribeAbstractClass: public DescribeClassT { public: /** * Constructor taking the name of the class, the dynamic library * where it is located and an optional version number as argument. */ DescribeAbstractClass(string cname, string lib, int vers = 0) :DescribeClassT(cname, lib, vers) {} }; /** * DescribeClass and its companion classes DescribeAbstractClass, * DescribeNoPIOClass and DescribeAbstractNoPIOClass, is a simplified * interface to type information system in ThePEG. For simple classes * there is no need to specialize the ClassTraits and BaseClassTrait * classes and to have a static member variable of ClassDescription in * the class (as in the full ThePEG type info system). Instead it is * enough to have one statically initialized variable of one of the * DescraibeClass classes for each class. The Abstract and NoPIO * versions of this class may be used for abstract classes and * classes without persistent I/O functions respectively. * * The template arguments are as follows: * T : the class being described. * BaseT : The base class of T. If several base classes these should be * encoded s template arguments to the BaseClasses class * (at most four base classes can be encoded). */ template class DescribeAbstractNoPIOClass: public DescribeClassT { public: /** * Constructor taking the name of the class, the dynamic library * where it is located and an optional version number as argument. */ DescribeAbstractNoPIOClass(string cname, string lib, int vers = 0) :DescribeClassT(cname, lib, vers) {} }; } #endif /* ThePEG_DescribeClass_H */ thepeg-1.8.0.orig/Utilities/Exception.h0000644000175000017500000001164311747772425016236 0ustar sunsun// -*- C++ -*- // // Exception.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Exception_H #define ThePEG_Exception_H // This is the declaration of the Exception class. #include #include "ThePEG/Config/ThePEG.h" #include "Exception.fh" #include #include extern "C" { void breakThePEG(); } namespace ThePEG { /** * Exception is the base class for all exceptions to be * used in ThePEG. It is derived from std::exception and * adds information about the severity of the exception to indicate to * the Repository and EventGenrator how to act on it. * * To throw an exception one should inherit from * Exception and add information in the constructor of * the base class. Alternatively one can use the operator<< * operator on a default constructed Exception to * add information as for a standard ostream object, in * which case one should always end with adding an enum of the type * Exception::Severity to indicate the severity of the * exception e.g.
Exception() << "Something went wrong." << * Exception::eventerror. * * @see Repository * @see EventGenrator */ class Exception: public exception { public: /** * The levels of severity. */ enum Severity { unknown, /**< Unknown severity */ info, /**< Not severe (but the user should be * informed). */ warning, /**< Possibly severe, (the user should be * warned). */ setuperror, /**< Command failed during setup phase, * execution is continued. */ eventerror, /**< Possibly severe, (the event being * generated should be discarded). */ runerror, /**< Severe error, (the run should be * terminated). */ maybeabort, /**< Severe error, (the run should be * terminated, possibly dumping core). */ abortnow /**< Severe error, (the run is aborted * immediately, before the exception is * thrown). */ }; public: /** * Standard constructor. * @param str an error message. * @param sev the severity. */ Exception(const string & str, Severity sev); /** * Default constructor. */ Exception() : handled(false), theSeverity(unknown) { breakThePEG(); } /** * The copy constructor. */ Exception(const Exception & ex) : std::exception(ex), theMessage(ex.message()), handled(ex.handled), theSeverity(ex.severity()) { ex.handle(); } /** * The destructor */ virtual ~Exception() throw(); public: /** * Assignment. */ const Exception & operator=(const Exception & ex) { handled = ex.handled; theMessage << ex.message(); theSeverity = ex.severity(); ex.handle(); return *this; } /** * Comparison */ bool operator==(const Exception & ex) const { return ( message() == ex.message() && severity() == ex.severity() ); } /** * Compare severity. If equal compare error message * lexicographically. */ bool operator<(const Exception & ex) const { return ( severity() == ex.severity() ? ( message() < ex.message() ) : ( severity() < ex.severity() ) ); } public: /** * Return the error message. */ virtual const char* what() const throw() { static string str; str = message(); return str.c_str(); } /** * Return the error message. */ string message() const { string mess = theMessage.str(); return mess.empty() ? string("Error message not provided.") : mess; } /** * Write the error message to a stream. */ void writeMessage(ostream & os = *errstream) const; /** * Return the severity. */ Severity severity() const { return theSeverity; } /** * Indicate that this exception has been taken care of. */ void handle() const { handled = true; } /** * Add info to the exception message. */ template Exception & operator<<(const T & t) { theMessage << t; return *this; } /** * Set the severity for the exception. */ Exception & operator<<(Severity sev) { severity(sev); return *this; } protected: /** * set the severity. */ void severity(Severity); /** * Stream to write the error message to. */ mutable ostringstream theMessage; private: /** * True if this exception has been taken care of. */ mutable bool handled; /** * The severity. */ Severity theSeverity; /** * The default stream to write the error message if unhandled. */ static ostream * errstream; public: /** * If this flag is set, all abortnow and maybeabort severities will * be treated as runerror. */ static bool noabort; }; } #endif /* ThePEG_Exception_H */ thepeg-1.8.0.orig/Utilities/Current.h0000644000175000017500000000664511747772425015730 0ustar sunsun// -*- C++ -*- // // Current.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Current_H #define ThePEG_Current_H // This is the declaration of the Current class. namespace ThePEG { /** * The Current class keeps a static stack of objects of the templated * class, which can be used anywhere by any class. When an object is * active it adds itself to the stack which can be used by any other * object through the static functions of the Current class. If * someone needs to use an alternative object a new Current object can * be constructed with a pointer to the desired object * as argument and that object will the be used by the static Current * functions until the Current object is destructed. * * Default-contructed objects of the Current class can be used as a * pointer to the currently chosen object on the stack. * * The typical use case for this class is a handler class which uses a * number of objects which do not have a reference back to the * handler, but still need to acces some member functions. In a member * function the handler class will construct a Current object: * Current<Handler> current(this); in any following * function called in this member function, any object can then access * the handlers methods as * Current<Handler>()->memfun();. * */ template class Current { public: /** * Default constructor does nothing. */ Current() : pushed(false) {} /** * Copy-constructor does nothing. */ Current(const Current &) : pushed(false) {} /** * Construct a new object specifying a new object, \a o, to be used * during this objects lifetime. The object must not be deleted * until the Current object us destroyed. */ Current(T * t) : pushed(false) { if ( t ) { theStack.push_back(t); pushed = true; } } /** * The destructor removing the object specified in the constructor * from the stack. */ ~Current() { if ( pushed ) theStack.pop_back(); } public: /** * Returns true if there is no currently chosen object. */ static bool isVoid() { return theStack.empty() || !(theStack.back()); } /** * Return a reference to the currently chosen object. */ static T & current() { return *theStack.back(); } /** * Return a reference to the currently chosen object. */ T & operator*() const { return *theStack.back(); } /** * Return a pointer to the currently chosen object. */ T * operator->() const { return theStack.back(); } /** * Pointer to the stack */ static T * ptr() { return theStack.back(); } /** * Test for existance */ operator bool() const { return ptr(); } /** * Test for existance */ bool operator!() const { return !ptr(); } private: /** * The stack of objects requested. */ static vector theStack; /** * True if this object is responsible for pushing an object * onto the stack. */ bool pushed; private: /** * Private and non-existent assignment operator. */ Current & operator=(const Current &); }; template std::vector ThePEG::Current::theStack; } #endif /* ThePEG_Current_H */ thepeg-1.8.0.orig/Utilities/Direction.cc0000644000175000017500000000155511754473671016356 0ustar sunsun// -*- C++ -*- // // Direction.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Direction class. // #include "Direction.h" using namespace ThePEG; MultipleDirectionException::MultipleDirectionException(int i) { theMessage << "Attempted to instantiate a second object of the Direction<" << i << ">. This is intolerable!"; severity(abortnow); } UndefinedDirectionException::UndefinedDirectionException(int i) { theMessage << "Attempted to use/create a Direction<" << i << "> object with undefined direction. This is intolerable!"; severity(abortnow); } thepeg-1.8.0.orig/Utilities/ClassTraits.h0000644000175000017500000002301611747772425016531 0ustar sunsun// -*- C++ -*- // // ClassTraits.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ClassTraits_H #define ThePEG_ClassTraits_H // This is the declaration of the ClassTraitsBase, ClassTraits and // BaseClassTraits classes. #include "ThePEG/Config/ThePEG.h" // #include "ClassTraits.fh" // #include "ClassTraits.xh" #include "ThePEG/Persistency/PersistentOStream.fh" #include "ThePEG/Persistency/PersistentIStream.fh" #include "DescriptionList.h" namespace ThePEG { /** * ClassTraitsType is an empty, non-polymorphic, base class. It is * used as a base class of all class traits classes in order to group * them together in the documentation. It currently serves no other * purpose. */ struct ClassTraitsType: public TraitsType {}; /** * The templated ClassTraitsBase class defines a set of default * information about classes used by ThePEG. By default, the * ClassTraits simply inherits from ClassTraitsBase, but it can be * specialized to override the static member functions. * * The information that should be made available is:
* create() creates an object of the described class,
* className() returns the platform-independent name of * the class,
version() return the version * number,
output() output the members of the class * to a PersistentOStream,
input() reads the members * of the class from a PersistentIStream and
cast() * dynamically cast a pointer to a public base class to a pointer to * the class. * * @see PersistentOStream * @see PersistentIStream */ template struct ClassTraitsBase: public ClassTraitsType { ThePEG_DECLARE_TEMPLATE_POINTERS(T,TPtr); ThePEG_DECLARE_POINTERS(Base,BPtr); /** * Create a T object and return a smart pointer to it. */ static TPtr create() { return TPtr::Create(); } /** * Return the name of class T. */ // static string className() { return T::className(); } static string className() { return DescriptionList::className(typeid(T)); } /** * Return the version of class T */ static int version() { return DescriptionList::version(typeid(T)); } /** * The name of a file containing the dynamic library where the class * T is implemented. It may also include several, space separated, * libraries if the class T depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return DescriptionList::library(typeid(T)); } /** * Write the T part of an object to a persistent stream. */ static void output(tcTPtr t, PersistentOStream & os) { t->persistentOutput(os); } /** * Read the T part of an object from a persistent stream. */ static void input(tTPtr t, PersistentIStream & is, int oldVersion) { t->persistentInput(is, oldVersion); } /** * Perform a dynamic cast from the given pointer to a pointer to T. */ static TPtr cast(BPtr b) { return dynamic_ptr_cast(b); } /** * Perform a dynamic cast from the given const pointer to a pointer * to const T. */ static cTPtr cast(cBPtr b) { return dynamic_ptr_cast(b); } /** * Perform a dynamic cast from the given transient pointer to a * transient pointer to T. */ static tTPtr cast(tBPtr b) { return dynamic_ptr_cast(b); } /** * Perform a dynamic cast from the given transient const pointer to * a transient pointer to const T. */ static tcTPtr cast(tcBPtr b) { return dynamic_ptr_cast(b); } }; /** * The default concrete implementation of ClassTraitsBase. This * templated class may be specialized for any class if the default * implementation is not sufficient. */ template struct ClassTraits: public ClassTraitsBase {}; /** * ClassTraits specialization for double */ template<> struct ClassTraits : public ClassTraitsBase { static string className() { return "double"; } }; /** * BaseClassTraits describes the base classes of the templated class. * BaseClassTraits should be specialized once for each * base class of a class to be described. The specializations should * contain a typedef so that * BaseClassTraits::NthBase is made an alias for * the first base class of T, * BaseClassTraits::NthBase the second base * class and so on. The typedef defaults to int which means * no base class. */ template struct BaseClassTrait: public ClassTraitsType { /** * The type of the BaseN'th base class (int means there * are no further base classes). */ typedef int NthBase; }; } #define ThePEG_DECLARE_BASE_CLASS_TRAITS_1(Class,Base) \ /** This template specialization informs ThePEG about the \ * base classes of Class. */ \ template <> \ struct BaseClassTrait: public ClassTraitsType { \ /** Typedef of the first base class of Class. */ \ typedef Base NthBase; \ }; \ #define ThePEG_DECLARE_BASE_CLASS_TRAITS_2(Class,Base1,Base2) \ /** This template specialization informs ThePEG about the \ * base classes of Class. */ \ template <> \ struct BaseClassTrait: public ClassTraitsType { \ /** Typedef of the first base class of Class. */ \ typedef Base1 NthBase; \ }; \ /** This template specialization informs ThePEG about the \ * base classes of Class. */ \ template <> \ struct BaseClassTrait: public ClassTraitsType { \ /** Typedef of the second base class of Class. */ \ typedef Base2 NthBase; \ }; \ #define ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,Name,Lib) \ /** This template specialization informs ThePEG about the name of \ * the Class class and the shared object where it is defined. */ \ template <> \ struct ClassTraits: \ public ClassTraitsBase { \ /** Return a platform-independent class name */ \ static string className() { return Name; } \ /** \ * The name of a file containing the dynamic library where the class \ * T is implemented. It may also include several, space separated, \ * libraries if the class T depends on other classes (base classes \ * excepted). In this case the listed libraries will be dynamically \ * linked in the order they are specified. \ */ \ static string library() { return Lib; } \ } \ #define ThePEG_DECLARE_CLASS_TRAITS(Class,Base) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_1(Class,Base) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,"ThePEG::" #Class,"") \ #define ThePEG_DECLARE_DYNAMIC_CLASS_TRAITS(Class,Base,Lib) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_1(Class,Base) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,"ThePEG::" #Class,Lib) \ #define ThePEG_DECLARE_CLASS_TRAITS_2(Class,Base1,Base2) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_2(Class,Base1,Base2) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,"ThePEG/::" #Class,"") \ #define ThePEG_DECLARE_DYNAMIC_CLASS_TRAITS_2(Class,Base1,Base2,Lib) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_2(Class,Base1,Base2) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,"ThePEG::" #Class,Lib) \ #define ThePEG_DECLARE_NAMED_CLASS_TRAITS(Class,Base,Name) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_1(Class,Base) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,Name,"") \ #define ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS(Class,Base,Name,Lib) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_1(Class,Base) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,Name,Lib) \ #define ThePEG_DECLARE_NAMED_CLASS_TRAITS_2(Class,Base1,Base2,Name) \ ThePEG_DECLARE_BASE_CLASS_TRAITS_2(Class,Base1,Base2) \ ThePEG_DECLARE_NAMED_DYNAMIC_CLASS_TRAITS_(Class,Name,"") \ #endif /* ThePEG_ClassTraits_H */ thepeg-1.8.0.orig/Utilities/Selector.h0000644000175000017500000002242511747772425016060 0ustar sunsun// -*- C++ -*- // // Selector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Selector_H #define ThePEG_Selector_H // This is the declaration of the Selector class. #include "ThePEG/Config/ThePEG.h" #include #include #include namespace ThePEG { /** * Selector is a templated class for storing objects associated with * probabilities in a way such that, given a flat random number * between 0 and 1, an object can be selected according to its * relative probability. Internally, the objects of class * T are stored in a map where the key is the * probability of the corresponding object plus the accumulated sum of * probabilities of all objects before the current one in the * map. This allows for fast retreival of an object according to its * probability. Where fast means that the time increases as a * logarithm of the number of objects in the selector. * * Here is an example on how to use the class:
* double random(); // A random generator returning a * number between 0 and 1.
* class foo; // Any class.
* Selector bar; // A selector.
* foo f1, f2;
* bar.insert(0.5,&f1) // assign probability 0.5
* bar.insert(0.5,&f2) // to each of f1 and f2
* foo * f = bar.select(random()) // randomly returns * a pointer to f1 or f2
* * @see VSelector */ template class Selector { public: /** Map doubles to objects. */ typedef map > MapType; /** Iterator corresponding to the underlying map. */ typedef typename MapType::const_iterator const_iterator; /** Iterator corresponding to the underlying map. */ typedef typename MapType::iterator iterator; /** Size type of the underlying map. */ typedef typename MapType::size_type size_type; public: /** * Default constructor. */ Selector() : theSum(WeightType()) {} /** * Swap the underlying representation with the argument. */ void swap(Selector & s) { theMap.swap(s.theMap); std::swap(theSum, s.theSum); } /** * Insert an object given a probability for this object. If the * probability is zero or negative, the object will not be inserted * and the probability itself is returned. Otherwise the sum of * probabilities so far is returned. */ WeightType insert(WeightType d, const T & t) { typedef typename MapType::value_type value_type; WeightType newSum = theSum + d; if ( newSum <= theSum ) return d; theMap.insert(theMap.end(), value_type((theSum = newSum), t)); return theSum; } /** * Reweight an object previously inserted giving it a new * weight. Semantically reweight(w,o); is equivalent to * erase(o); insert(w,o); */ WeightType reweight(WeightType d, const T & t) { erase(t); return insert(d, t); } /** * Erase an object, previously inserted. If the object had not been * inserted, nothing will happen. If several copies of the object * has been inserted, all will be removed removed. In all cases the * sum of the remaining probabilities is returned. */ WeightType erase(const T &); /** * Replace all occurencies of oldObject with newObject without * changing the probability for the entry. */ void replace(const T & oldObject, const T & newObject) { for ( iterator it = theMap.begin(); it != theMap.end(); ++it ) if ( it->second == oldObject ) it->second = newObject; } /** * Select an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. * @param rnd a flat random number in the interval ]0,1[ * @param remainder if non-zero the double pointed to will be set to * a uniform random number in the interval ]0,1[ calculated from the * fraction of rnd which was in the range of the selected object. */ T & select(double rnd, double * remainder = 0) throw(range_error); /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. */ T & operator[](double rnd) throw(range_error) { return select(rnd); } /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. * @param rnd a flat random number in the interval ]0,1[ * @param remainder if non-zero the double pointed to will be set to * a uniform random number in the interval ]0,1[ calculated from the * fraction of rnd which was in the range of the selected object. */ const T & select(double rnd, double * remainder = 0) const throw(range_error); /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. */ const T & operator[](double rnd) const throw(range_error) { return select(rnd); } /** * Selct an object randomly. Given a random number generator which * generates flat random numbers in the interval ]0,1[ with the * operator()() function, select an object according to * the individual probabilities specified when they were * inserted. If the generated number is outside the allowed range or * the Selector is empty, a range_error will be thrown. The * generator should have a push_back function which will be used * push back a uniform random number in the interval ]0,1[ * calculated from the fraction of rnd which was in the range of the * selected object. */ template T & select(RNDGEN & rnd) throw(range_error) { double rem = 0.0; T & t = select(rnd(), &rem); rnd.push_back(rem); return t; } /** * Selct an object randomly. Given a random number generator which * generates flat random numbers in the interval ]0,1[ with the * operator()() function, select an object according to * the individual probabilities specified when they were * inserted. If the generated number is outside the allowed range or * the Selector is empty, a range_error will be thrown. The * generator should have a push_back function which will be used * push back a uniform random number in the interval ]0,1[ * calculated from the fraction of rnd which was in the range of the * selected object. */ template const T & select(RNDGEN & rnd) const throw(range_error) { double rem = 0.0; const T & t = select(rnd(), &rem); rnd.push_back(rem); return t; } /** * Return the sum of probabilities of the objects inserted. Note * that probabilities specified when objects are inserted are * rescaled with this number to give unit probability for * 'select()'. */ WeightType sum() const { return theSum; } /** * Access to the begin() iterator of the underlying * map. Dereferenced, it will give a std::pair, where * 'first' is the sum of all probabilities up to this one, and * 'second' is the object inserted. */ const_iterator begin() const { return theMap.begin(); } /** * Access to the end() iterator in the underlying * map. */ const_iterator end() const { return theMap.end(); } /** * Returns true if the Selector is empty. */ bool empty() const { return theMap.empty(); } /** * Returns the number of objects in the selector. */ size_type size() const { return theMap.size(); } /** * Erases all objects. */ void clear() { theMap.clear(); theSum = WeightType(); } /** * Output to a stream. */ template void output(OStream &) const; /** * Input from a stream. */ template void input(IStream &); private: /** * The underlying map relating sums of probabilities to inserted objects. */ MapType theMap; /** * The sum of all probabilities assicialted with inserted objects. */ WeightType theSum; }; /** * Output a Selector to a stream. */ template OStream & operator<<(OStream & os, const Selector & s) { s.output(os); return os; } /** * Input a Selector from a stream. */ template IStream & operator>>(IStream & is, Selector & s) { s.input(is); return is; } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Selector.tcc" #endif #endif /* ThePEG_Selector_H */ thepeg-1.8.0.orig/Utilities/StringUtils.cc0000644000175000017500000000743411747772425016730 0ustar sunsun// -*- C++ -*- // // StringUtils.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StringUtils class. // #include "StringUtils.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; StringUtils::StringVector StringUtils::split(string s, string ws) { StringVector r; string::size_type i = s.find_first_not_of(ws); while ( i != string::npos ) { s = s.substr(i); i = s.find_first_of(ws); r.push_back(s.substr(0, i)); if ( i == string::npos ) return r; s = s.substr(i); i = s.find_first_not_of(ws); } return r; } string StringUtils::car(string s, string ws) { string::size_type p = s.find_first_not_of(ws); if ( p == string::npos ) return ""; s = s.substr(p); return s.substr(0, s.find_first_of(ws)); } string StringUtils::cdr(string s, string ws) { string::size_type p = s.find_first_not_of(ws); if ( p == string::npos ) return ""; s = s.substr(p); p = s.find_first_of(ws); if ( p == string::npos ) return ""; s = s.substr(p); p = s.find_first_not_of(ws); if ( p == string::npos ) return ""; return s.substr(p); } string StringUtils::stripws(string str) { string::size_type i = str.find_first_not_of(" \t\r\n"); if ( i != string::npos ) str = str.substr(i); i = str.find_last_not_of(" \t\r\n"); return str.substr(0, i + 1); } map StringUtils:: xmlAttributes(string tag, string line, string::size_type curr) { map ret; // First find the beginning and end of the tag pos_t begin = line.find("<" + tag, curr); if ( begin == end ) return ret; curr = begin + tag.length() + 2; while ( true ) { pos_t close = line.find(">", curr); // Now skip some white space to see if we can find an attribute. curr = line.find_first_not_of(" \t\r\n", curr); if ( curr == end || curr >= close ) return ret; pos_t tend = line.find_first_of("= \t\r\n", curr); if ( tend == end || tend >= close ) return ret; string name = line.substr(curr, tend - curr); curr = line.find("=", curr) + 1; // OK now find the beginning and end of the atribute. curr = line.find("\"", curr); if ( curr == end || curr >= close ) return ret; pos_t bega = ++curr; curr = line.find("\"", curr); while ( curr != end && line[curr - 1] == '\\' ) curr = line.find("\"", curr + 1); string value = line.substr(bega, curr == end? end: curr - bega); ret[name] = value; ++curr; } } string StringUtils::dirname(string file) { string::size_type pos = file.rfind('/'); if ( pos == string::npos ) return ""; return file.substr(0,pos); } string StringUtils::basename(string file) { string::size_type pos = file.rfind('/'); if ( pos == string::npos ) return file; return file.substr(pos + 1); } string StringUtils::remsuf(string file) { string::size_type pos = file.rfind('.'); if ( pos == string::npos ) return ""; return file.substr(0,pos); } string StringUtils::suffix(string file) { string::size_type pos = file.rfind('.'); if ( pos == string::npos ) return file; return file.substr(pos + 1); } string StringUtils::typeName(const type_info & t) { string ret; string name = t.name(); if ( name[0] != 'N' ) return name; string::size_type pos = 1; while ( pos < name.length() && name[pos] != 'E' ) { int size = 0; while ( pos < name.length() && isdigit(name[pos]) ) size = size*10 + int(name[pos++] - '0'); if ( size == 0 ) return name; if ( !ret.empty() ) ret += "::"; ret += name.substr(pos, size); pos += size; } return ret; } thepeg-1.8.0.orig/Utilities/CFileLineReader.h0000644000175000017500000001210011747772425017202 0ustar sunsun// -*- C++ -*- // // CFileLineReader.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_CFileLineReader_H #define THEPEG_CFileLineReader_H // // This is the declaration of the CFileLineReader class. // #include "ThePEG/Config/ThePEG.h" #include "CFileLineReader.fh" #include "CFile.h" #include #include namespace ThePEG { /** * CFileLineReader is a wrapper around a standard C FILE stream. With * it one reads one line at the time (with readline()) into an * internal buffer from which one can then read as from a standard * std::istream with a limited set of operator>> functions. It can be * thought of as an std::ifstream where the internal buffer must be * filled by hand one line at the time. * * Contrary to std::ifstream the CFileLineReader can also handle * gipped files and pipes. Gzipped files are automatically handles by * a pipe using the zcat command if the file name ends * with .gz. Also if a file name ends with a * | sign, the preceding string is interpreted as a * command defining a pipe from which to read. * * Since CFileLineReader is very close to the standard C FILE stream * it is in many cases much faster than eg. reading from lines via * std::istringstream. */ class CFileLineReader { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ CFileLineReader(); /** * Constructor taking a \a filename as argument. Optionally the size * \a len of the line buffer can be specified. If \a filename ends * with .gz a pipe is opened where the file is read by * zcat. If \a filename ends with a | * sign, the preceding string is interpreted as a command defining a * pipe from which to read. */ CFileLineReader(string filename, int len = defsize); /** * The destructor. */ ~CFileLineReader(); //@} /** @name Initialization functions. */ //@{ /** * Initialize with a \a filename. If \a filename ends with * .gz a pipe is opened where the file is read by * zcat. If \a filename ends with a | * sign, the preceding string is interpreted as a command defining a * pipe from which to read. */ void open(string filename); /** * If the file was opened from within this object, close it. */ void close(); //@} /** * Read a line from the underlying c-file into the line buffer. */ bool readline(); /** * Undo reading from the current line, ie. the next read will be * from the beginning of the current line. Afterwards the state will * be not bad. */ void resetline(); /** * Return a string containing what is left of the line buffer. */ string getline() const; /** * Return the underlying c-file. */ CFile cFile() const; /** * Return null if a previous read failed. */ operator void *(); /** * Return true if a previous read failed. */ bool operator!(); /** * Scan forward up and until the first occurrence of the given * character. * @return true if the given character was found. */ bool skip(char c); /** * Check if a given string is present in the current line buffer. */ bool find(string str) const; /** @name Operators to read from the line buffer. */ //@{ /** * Return the next character of the line-buffer. */ char getc(); /** * Read a long from the line buffer. */ CFileLineReader & operator>>(long & l); /** * Read an int from the line buffer. */ CFileLineReader & operator>>(int & i); /** * Read an unsigned long from the line buffer. */ CFileLineReader & operator>>(unsigned long & l); /** * Read an unsigned int from the line buffer. */ CFileLineReader & operator>>(unsigned int & i); /** * Read a double from the line buffer. */ CFileLineReader & operator>>(double & d); /** * Read a float from the line buffer. */ CFileLineReader & operator>>(float & f); /** * Read a (whitespace delimited) string from the line buffer. */ CFileLineReader & operator>>(std::string & s); //@} private: /** * The c-file to be read from. */ CFile file; /** * The length of the line buffer. */ int bufflen; /** * The line buffer. */ char * buff; /** * The current position in the line buffer. */ char * pos; /** * The current state is bad if a read has failed. */ bool bad; /** * The default size of the buffer. */ static const int defsize = 1024; private: /** * The copy constructor is private and not implemented. */ CFileLineReader(const CFileLineReader &); /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ CFileLineReader & operator=(const CFileLineReader &); }; } #endif /* THEPEG_CFileLineReader_H */ thepeg-1.8.0.orig/Utilities/AnyReference.h0000644000175000017500000000701611747772425016645 0ustar sunsun// -*- C++ -*- // // AnyReference.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2007 Leif Lonnblad // Copyright (C) 2010-2011 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_AnyReference_H #define ThePEG_AnyReference_H #include "ThePEG/Config/ThePEG.h" #include "Exception.h" namespace ThePEG { /** * AnyReference is inspired by boost::any to hold a reference to an * object of arbitrary type. */ class AnyReference { struct ReferenceHolderBase { /** * The destructor. */ virtual ~ReferenceHolderBase() {} /** * Return the type held. */ virtual const std::type_info& type() const = 0; /** * Clone this reference holder. */ virtual ReferenceHolderBase* clone() const = 0; }; template struct ReferenceHolder : public ReferenceHolderBase { /** * The reference held. */ T& value; /** * Static member to initialize the reference. */ static T& init() { static T v; return v; } /** * The default constructor */ ReferenceHolder() : value(init()) {} /** * Construct from given reference. */ explicit ReferenceHolder(T& v) : value(v) {} /** * Return the type held. */ virtual const std::type_info& type() const { return typeid(T); } /** * Clone this reference holder. */ virtual ReferenceHolderBase* clone() const { return new ReferenceHolder(*this); } }; /** * The reference holder used. */ ReferenceHolderBase* holder; public: /** * The default constructor */ AnyReference() : holder(0) {} /** * The standard constructor */ template AnyReference(T& v) : holder(new ReferenceHolder(v)) {} /** * The copy constructor */ AnyReference(const AnyReference& other) : holder(other.holder ? other.holder->clone() : 0) {} /** * The destructor. */ ~AnyReference() { if ( holder ) { delete holder; holder = 0; } } public: /** * Return the type held. */ const std::type_info& type() const { return holder ? holder->type() : typeid(void); } /** * Return true, if no reference is held. */ bool empty() const { return !holder; } public: /** * Swap the references held. */ AnyReference& swap(AnyReference& other) { std::swap(holder,other.holder); return *this; } /** * Assign from definite type */ template AnyReference& operator=(T& v) { AnyReference(v).swap(*this); return *this; } /** * Assign from AnyReference */ AnyReference& operator=(AnyReference other) { other.swap(*this); return *this; } /** * Reset to not keep track of any reference. */ void reset() { if ( holder ) delete holder; holder = 0; } public: /** * Extract the held reference. */ template T& cast() const { if ( !empty() && type() == typeid(T) ) { return static_cast*>(holder)->value; } throw Exception() << "Bad cast in AnyReference" << Exception::abortnow; return ReferenceHolder::init(); } }; } #endif // ThePEG_AnyReference_H thepeg-1.8.0.orig/Utilities/Named.h0000644000175000017500000000277111747772425015326 0ustar sunsun// -*- C++ -*- // // Named.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Named_H #define ThePEG_Named_H // This is the declaration of the Named class. #include namespace ThePEG { /** * The Named class is a simple concrete base class to * used by classes of objects with a name. It just defines a string * member variable with corresponding (protected) set and get * functions. */ class Named { public: /** * Constructor with name. */ Named(const string & newName = string()) : theName(newName) {} /** * Return name. */ const string & name() const { return theName; } /** * Test for equality. */ bool operator == (const Named & other) const { return theName == other.name(); } /** * Lexicographical comparison. */ bool operator < (const Named & other) const { return theName < other.name(); } protected: /** * Assignment. */ const Named & operator = (const Named & other) { if (this != &other) theName = other.name(); return *this; } /** * Set new name. */ const string & name(const string & newName) { return theName = newName; } private: /** * The string containing the name. */ string theName; }; } #endif /* ThePEG_Named_H */ thepeg-1.8.0.orig/Utilities/DebugItem.h0000644000175000017500000000461111747772425016142 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_DebugItem_H #define ThePEG_DebugItem_H // // This is the declaration of the DebugItem class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * The DebugItem class can be used to efficiently handle detailed * debug options. The actual objects are used anywhere in a function * where optional debugging should be done. At that point a static * object of DebugItem should be constructed giving a name to be used * (it should be static to ensure that the initialization is only done * once). After that the object is automatically cast to a bool * indicating whether or not debugging has been requested for this * item. */ class DebugItem { public: /** @name Standard constructors and destructors. */ //@{ /** * The only relevant constructor. The string should typically be on * the form "namspace::class::function". If the Debug::level is * larger than or equal to the given \a level this DebugItem will be * turned on. */ DebugItem(string itemname, int level = 100); //@} public: /** * Switch on all DebugItem objects matching the given string. If \a * after is positive delay the DebugItem until that number of * tics. If the string is on the form "=" the integer * will be taken as the delay. */ static void setDebugItem(string itemname, long after = 0); /** * Advance one tic, opssibly switching on more debug items. */ static void tic(); /** * Cheap way of testing if debugging should be done. */ operator bool () const { #ifndef ThePEG_NO_DEBUG return debug; #else return false; #endif } private: /** * Set to true if debugging requested. */ bool debug; /** * Counter for number of tics. */ static long & ticker(); /** * The DebugItem objects registered, indexed by their name. */ static multimap & items(); /** * The DebugItem objects registered, indexed by the tic at which * they should be turned on.. */ static multimap & itemtics(); /** * The DebugItem names registered together with the tic at which it * should be turned on. */ static map & nametics(); private: /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ DebugItem & operator=(const DebugItem &); }; } #endif /* ThePEG_DebugItem_H */ thepeg-1.8.0.orig/Utilities/Rebinder.h0000644000175000017500000000721211747772425016027 0ustar sunsun// -*- C++ -*- // // Rebinder.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Rebinder_H #define ThePEG_Rebinder_H #include "ThePEG/Config/ThePEG.h" #include "Rebinder.fh" #include namespace ThePEG { /** * Rebinder is a class associating pairs of pointers to objects. It is * typically used when cloning a set of objects which have pointers to * eachother. The Rebinder is then set up so that a cloned object can * easily be retrieved given a pointer to the original one. The cloned * objects can then use the Rebinder to change their pointers so that * they henceforth points to the cloned copies. */ template class Rebinder { public: /** Default constructor. */ Rebinder() {} public: ThePEG_DECLARE_TEMPLATE_POINTERS(T,TPtr); /** Map associating pairs of objects. */ typedef std::map MapType; /** The iterator of the underlying map. */ typedef typename MapType::const_iterator const_iterator; public: /** * Return a pointer to the object associated with the argument. */ TPtr & operator[](tcTPtr t) { return theMap[t]; } /** * Return a pointer to the object associated with the argument. If * no corresponding object is found a null pointer given by R() is * returned. * @param r a pointer to an object of a type which is derived from T. */ template R translate(const R & r) const { const_iterator it = theMap.find(r); return it == theMap.end()? R(): dynamic_ptr_cast(it->second); } /** * Insert pointers to objects into the output iterator, pointers to * objects corresponding to the ones given by the range of input * iterators. If a given object in the input iterator range does not * exists, a null pointer will be inserted in the output iterator. */ template void translate(OutputIterator r, InputIterator first, InputIterator last) const { while ( first != last ) *r++ = translate(*first++); } /** * Return a pointer to the object associated with the argument. If * no corresponding object is found an exception is thrown. * @param r a pointer to an object of a type which is derived from T. */ template R alwaysTranslate(const R & r) const throw(std::runtime_error) { R ret; if ( !r ) return ret; const_iterator it = theMap.find(r); ret = (it == theMap.end()? R(): dynamic_ptr_cast(it->second)); if ( !ret ) throw std::runtime_error("Rebinder exception"); return ret; } /** * Insert pointers to objects into the output iterator, pointers to * objects corresponding to the ones given by the range of input * iterators. If a given object in the input iterator range does not * exists, an exception will be thrown. */ template void alwaysTranslate(OutputIterator r, InputIterator first, InputIterator last) const throw(std::runtime_error) { while ( first != last ) *r++ = alwaysTranslate(*first++); } /** * Acces the underlying map representation. */ const MapType & map() const { return theMap; } private: /** * The underlying map representation. */ MapType theMap; private: /** The copy constructor is private and not implemented */ Rebinder(const Rebinder &); /** The assignment operator is private and not implemented */ Rebinder & operator=(const Rebinder &); }; } #endif /* ThePEG_Rebinder_H */ thepeg-1.8.0.orig/Utilities/DescriptionList.h0000644000175000017500000000656311747772425017424 0ustar sunsun// -*- C++ -*- // // DescriptionList.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DescriptionList_H #define ThePEG_DescriptionList_H // This is the declaration of the DescriptionList class. #include "ThePEG/Config/ThePEG.h" #include "ClassDescription.fh" namespace ThePEG { /** * The DescriptionList keeps a static list of descriptions * of classes included in the current run. */ class DescriptionList { public: #ifndef THEPEG_DYNAMIC_TYPE_INFO_BUG /** Map of class descriptions indexed by type_info objects. */ typedef map DescriptionMap; #else /** Map of class descriptions indexed by type_info objects. */ typedef map DescriptionMap; #endif /** Map of class descriptions indexed by platform-independent class * names. */ typedef map StringMap; public: /** * Insert a description in the list. */ static void Register(ClassDescriptionBase &); /** * Get the description of a class giving its type_info object. */ static inline const ClassDescriptionBase * find(const type_info & ti) { #ifndef THEPEG_DYNAMIC_TYPE_INFO_BUG DescriptionMap::const_iterator it = descriptionMap().find(&ti); #else DescriptionMap::const_iterator it = descriptionMap().find(ti.name()); #endif if ( it == descriptionMap().end() ) return 0; return (*it).second; } /** * Return the name of the class corresponding to the given type_info object. */ static string className(const type_info & ti); /** * Return the version of the class corresponding to the given type_info object. */ static int version(const type_info & ti); /** * Return the dynamic library of the class corresponding to the * given type_info object. */ static string library(const type_info & ti); /** * Get the description of a class giving its name. */ static inline const ClassDescriptionBase * find(const string & name) { StringMap::const_iterator it = stringMap().find(name); if ( it == stringMap().end() ) return 0; return it->second; } /** * Return the static set of descriptions mapped to the relevant * type_info objects. */ static inline const DescriptionMap & all() { return descriptionMap(); } /** * Print the classes in the list and their base classes to a * stream. Mainly intended for debugging purposes. */ static void printHierarchies(ostream & os); protected: /** * Hookup the base class descriptions in the list. */ static void hookup(); /** * Insert a class description. */ static void insert(ClassDescriptionBase & pb); /** * Return the static set of descriptions mapped to the relevant * type_info objects. This function has a static DescriptionMap * variable which is initialized the first time it is called. */ static DescriptionMap & descriptionMap(); /** * Return the static set of descriptions mapped to the corresponding * class names. This function has a static StringMap variable which * is initialized the first time it is called. */ static StringMap & stringMap(); }; } #endif /* ThePEG_DescriptionList_H */ thepeg-1.8.0.orig/Utilities/Direction.xh0000644000175000017500000000175111754473671016406 0ustar sunsun// -*- C++ -*- // // Direction.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Direction_XH #define ThePEG_Direction_XH // // This is the declarations of the exception classes used by the // Direction class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by Direction when multiple objects of the * same direction class is requested. */ struct MultipleDirectionException: public Exception { /** Constructor */ MultipleDirectionException(int); }; /** Exception class used by Direction when an undefined direction is * used. */ struct UndefinedDirectionException: public Exception { /** Constructor */ UndefinedDirectionException(int); }; /** @endcond */ } #endif /* ThePEG_Direction_XH */ thepeg-1.8.0.orig/Utilities/UtilityBase.tcc0000644000175000017500000001774711747772425017073 0ustar sunsun// -*- C++ -*- // // UtilityBase.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ThePEG { template LorentzRotation UtilityBase::boostToCM(const pair & pp) { typedef ParticleTraits Traits; LorentzRotation boost(-(Traits::momentum(pp.first) + Traits::momentum(pp.second)).boostVector()); Traits::transform(pp.first, boost); Traits::transform(pp.second, boost); LorentzRotation rot; rot.rotateZ(-Traits::momentum(pp.first).phi()); rot.rotateY(-Traits::momentum(pp.first).theta()); rot.rotateZ(Traits::momentum(pp.first).phi()); Traits::transform(pp.first, rot); Traits::transform(pp.second, rot); return rot*boost; } template LorentzRotation UtilityBase::boostToCM(const Triplet & pt) { typedef ParticleTraits Traits; LorentzRotation rot = getBoostToCM(pt); Traits::transform(pt.first, rot); Traits::transform(pt.second, rot); Traits::transform(pt.third, rot); return rot; } template LorentzRotation UtilityBase::getBoostToCM(const pair & pp) { typedef ParticleTraits Traits; LorentzMomentum p1 = Traits::momentum(pp.first); Boost b = (p1 + Traits::momentum(pp.second)).boostVector(); p1.boost(-b); LorentzRotation rot(-b); rot.rotateZ(-p1.phi()); rot.rotateY(-p1.theta()); rot.rotateZ(p1.phi()); return rot; } template LorentzRotation UtilityBase:: getBoostToCM(const Triplet & pt) { typedef ParticleTraits Traits; LorentzMomentum p1 = Traits::momentum(pt.first); LorentzMomentum p2 = Traits::momentum(pt.second); Boost b = (p1 + p2 + Traits::momentum(pt.third)).boostVector(); p1.boost(-b); LorentzRotation rot(-b); rot.rotateZ(-p1.phi()); rot.rotateY(-p1.theta()); p2.transform(rot); rot.rotateZ(-p2.phi()); return rot; } template LorentzRotation UtilityBase:: getBoostFromCM(const Triplet & pt) { return getBoostToCM(pt).inverse(); } template LorentzRotation UtilityBase::getBoostFromCM(const pair & pp) { typedef ParticleTraits Traits; LorentzMomentum p1 = Traits::momentum(pp.first); Boost b = (p1 + Traits::momentum(pp.second)).boostVector(); p1.boost(-b); LorentzRotation rot; rot.rotateZ(-p1.phi()); rot.rotateY(p1.theta()); rot.rotateZ(p1.phi()); rot.boost(b); return rot; } template LorentzRotation UtilityBase::boostToCM(Iterator first, Iterator last, Iterator zAxis, Iterator xzPlane) { if ( first == last ) return LorentzRotation(); LorentzRotation boost(-sumMomentum(first, last).boostVector()); typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; transform(first, last, boost); if ( zAxis != last ) { LorentzRotation rot; rot.rotateZ(-Traits::momentum(*zAxis).phi()); rot.rotateY(-Traits::momentum(*zAxis).theta()); if ( xzPlane == last ) rot.rotateZ(Traits::momentum(*zAxis).phi()); transform(first, last, rot); boost = rot*boost; } if ( xzPlane != last ) { LorentzRotation rot; rot.rotateZ(-Traits::momentum(*xzPlane).phi()); transform(first, last, rot); boost = rot*boost; } return boost; } template LorentzRotation UtilityBase:: transformFromCMS(const LV & p) { if(p.rho()/p.e()>=1.) throw Exception() << "Boost >=1. in " << "UtilityBase::transformFromCMS()" << Exception::eventerror; LorentzRotation r(0.0, 0.0, p.rho()/p.e()); r.rotateZ(-p.phi()); r.rotateY(p.theta()); r.rotateZ(p.phi()); return r; } template LorentzRotation UtilityBase:: transformFromCMS(const LV & sum, LV zAxis) { LorentzRotation r; Boost bz(sum.boostVector()); zAxis.boost(-bz); r.rotateZ(-zAxis.phi()); r.rotateY(zAxis.theta()); r.rotateZ(zAxis.phi()); r.boost(bz); return r; } template LorentzRotation UtilityBase:: transformFromCMS(const LV & sum, const LV & zAxis, LV xyPlane) { LorentzRotation r; LorentzRotation r1 = transformFromCMS(sum, zAxis); xyPlane.transform(r1.inverse()); r.rotateZ(xyPlane.phi()); r.transform(r1); return r; } template LorentzRotation UtilityBase:: transformToCMS(const LV & p) { LorentzRotation r; r.rotateZ(-p.phi()); r.rotateY(-p.theta()); r.rotateZ(p.phi()); if(p.rho()/p.e()>1.) throw Exception() << "Boost >=1. in " << "UtilityBase::transformToCMS " << Exception::eventerror; r.boostZ(-p.rho()/p.e()); return r; } template LorentzRotation UtilityBase:: transformToCMS(const LV & sum, LV zAxis) { LorentzRotation r(-sum.boostVector()); zAxis.transform(r); r.rotateZ(-zAxis.phi()); r.rotateY(-zAxis.theta()); r.rotateZ(zAxis.phi()); return r; } template LorentzRotation UtilityBase:: transformToCMS(const LV & sum, const LV & zAxis, LV xyPlane) { LorentzRotation r(transformToCMS(sum, zAxis)); xyPlane.transform(r); r.rotateZ(-xyPlane.phi()); return r; } template void UtilityBase::setMomentum(PType & p, const Momentum3 & q) { typedef ParticleTraits Traits; if ( Traits::momentum(p).m2() <= ZERO || Traits::mass(p) <= ZERO ) { Traits::set3Momentum(p, q); } else { Traits::transform(p, transformToCMS(Traits::momentum(p))); setMomentumFromCMS(p, q); } } template void UtilityBase::setMomentumFromCMS(PType & p, const Momentum3 & q) { typedef ParticleTraits Traits; LorentzMomentum q4(q, sqrt(q.mag2() + sqr(Traits::mass(p)))); if ( Traits::momentum(p) == LorentzMomentum() ) Traits::set5Momentum(p, q4); else Traits::transform(p, transformFromCMS(q4)); return; } template void UtilityBase::setMomentum(Iter first, Iter last, const Momentum3 & q) { if ( first == last ) return; typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; Iter second = first; if ( ++second == last ) return setMomentum(Traits::ref(*first), q); LorentzMomentum sum = sumMomentum(first, last); transform(first, last, transformToCMS(sum)); setMomentumFromCMS(first, last, sum.m2(), q); } template void UtilityBase:: setMomentum(Iter first, Iter last, const Momentum3 & q, double eps) { if ( first == last ) return; typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; Iter second = first; if ( ++second == last ) return setMomentum(Traits::ref(*first), q); LorentzRotation r; LorentzMomentum sum = sumMomentum(first, last); if ( sum.rho2() > 1.0e-12*MeV2 ) { r.rotateZ(-sum.phi()); r.rotateY(-sum.theta()); r.rotateZ(sum.phi()); } if((sum.vect()-q).mag2()< 1.0e-12*MeV2) return; Energy2 ppo = sqr(sum.rho() + sum.e()); Energy2 ppn = sqr(q.mag() + sqrt(q.mag2() + sum.m2())); r.boost(0.0, 0.0, (ppn - ppo)/(ppn + ppo)); r.rotateZ(-q.phi()); r.rotateY(q.theta()); r.rotateZ(q.phi()); transform(first, last, r); sum = sumMomentum(first, last); if ( abs(sum.x() - q.x()) > eps*sum.e() || abs(sum.y() - q.y()) > eps*sum.e() || abs(sum.z() - q.z()) > eps*sum.e() ) setMomentum(first, last, q, eps); } template void UtilityBase:: setMomentumFromCMS(Iter first, Iter last, Energy2 m2, const Momentum3 & q) { if ( first == last ) return; typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; Iter second = first; if ( ++second == last ) return setMomentumFromCMS(Traits::ref(*first), q); transform(first, last, transformFromCMS(LorentzMomentum(q, sqrt(q.mag2() + m2)))); } template void UtilityBase::add(Cont1 & c1, const Cont2 & c2) { typename Cont2::const_iterator i = c2.begin(); while ( i != c2.end() ) c1.insert(c1.end(), *i++); } } thepeg-1.8.0.orig/Utilities/EnumIO.h0000644000175000017500000000420311747772425015426 0ustar sunsun// -*- C++ -*- // // EnumIO.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EnumIO_H #define ThePEG_EnumIO_H // This is the declaration of the IEnum and OEnum classes and // associated templated functions. // #include "ThePEG/Config/ThePEG.h" // #include "EnumIO.fh" // #include "EnumIO.xh" namespace ThePEG { template /** * The OEnum helper class is used to facilitate output of enums * to persistent streams. An enum can hence be written like this:
* os >> oenum(x);
* * @see PersistentOStream * @see PersistentIStream * */ struct OEnum { /** Constructor. */ OEnum(const T & t): theT(t) {} /** Copy constructor. */ OEnum(const OEnum & oe): theT(oe.theT) {} /** The variable to be written */ const T & theT; }; /** * The IEnum helper class is used to facilitate input of enums * from persistent streams. An enum can hence be read like this:
* is >> ienum(x); * * @see PersistentOStream * @see PersistentIStream * */ template struct IEnum { /** Constructor. */ IEnum(T & t): theT(t) {} /** Copy constructor. */ IEnum(const IEnum & ie): theT(ie.theT) {} /** The variable to be read */ T & theT; }; /** Helper function to create an OEnum object for a given variable. */ template inline OEnum oenum(const T & t) { return OEnum(t); } /** Helper function to create an IEnum object for a given variable. */ template inline IEnum ienum(T & t) { return IEnum(t); } /** Overloading of operator<< for OEnum. */ template OStream & operator<<(OStream & os, const OEnum & e) { os << long(e.theT); return os; } /** Overloading of operator<< for IEnum. */ template IStream & operator>>(IStream & is, const IEnum & e) { long l = 0; is >> l; e.theT = T(l); return is; } } #endif /* ThePEG_EnumIO_H */ thepeg-1.8.0.orig/Utilities/Maths.cc0000644000175000017500000000416111747772425015507 0ustar sunsun// -*- C++ -*- // // Maths.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #include #include "Maths.h" double ThePEG::Math::atanh(double x) { #ifndef ThePEG_HAS_ATANH return 0.5*(ThePEG::Math::log1m(-x) - ThePEG::Math::log1m(x)); #else return std::atanh(x); #endif } double ThePEG::Math::exp1m(double x) { using namespace std; #ifndef ThePEG_HAS_EXPM1 return 2.0*std::exp(x/2.0)*std::sinh(-x/2.0); #else return -expm1(x); #endif } double ThePEG::Math::log1m(double x) { using namespace std; #ifndef ThePEG_HAS_LOG1P #ifndef ThePEG_HAS_ATANH volatile double y = 1.0 - x; return log(y) - ((y - 1.0) + x)/y ; /* cancels errors with IEEE arithmetic */ #else return 2.0*atanh(x/(x-2.0)); #endif #else return log1p(-x); #endif } double ThePEG::Math::powi(double x, int i) { switch ( i ) { case 0: return 1.0; case -1: return 1/x; case -2: return 1/x/x; case -3: return 1/x/x/x; case 1: return x; case 2: return x*x; case 3: return x*x*x; default: return i > 0? powi(x, i - 1)*x: powi(x, i + 1)/x; } } double ThePEG::Math::gamma(double x) { static const double b[8] = {-0.577191652, 0.988205891, -0.897056937, 0.918206857, -0.756704078, 0.482199394, -0.193527818, 0.035868343}; const long nx = long(x); const double dx = x - double(nx); double res = 1.0; double dxp = 1.0; for ( int i = 0; i < 8; ++i ) { dxp*=dx; res += b[i]*dxp; } if ( x < 0.0 ) { res /= x; } else { for ( long ix = 1; ix < nx; ++ix ) res *= x - double(ix); } return res; } double ThePEG::Math::lngamma(double x) { #ifndef ThePEG_HAS_LGAMMA static const double b[6]={76.18009173, -86.50532033, 24.01409822, -1.231739516, 0.120858003e-2, -0.536382e-5}; x -= 1.0; double t = x + 5.5; t -= (x + 0.5)*log(t); double sum = 1.0; for (int j = 0; j < 6; j++) { x += 1.0; sum += b[j]/x; } return -t + log(2.50662827465*sum); #else return lgamma(x); #endif } thepeg-1.8.0.orig/Utilities/VSelector.h0000644000175000017500000002370611747772425016211 0ustar sunsun// -*- C++ -*- // // VSelector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_VSelector_H #define ThePEG_VSelector_H // This is the definition of the ThePEG::VSelector class. #include "ThePEG/Config/ThePEG.h" #include #include #include namespace ThePEG { template /** * VSelector is a templated class for storing objects associated with * probabilities in a way such that, given a flat random number * between 0 and 1, an object can be selected according to its * relative probability. Internally, the objects of class * T are stored in a vector parallel to a vector of the * probability of the corresponding object plus the accumulated sum of * probabilities of all objects before the current one in the * vector. This allows for fast retreival of an object according to * its probability. Where fast means that the time increases as a * logarithm of the number of objects in the selector. * * Here is an example on how to use the class:
* double random(); // A random generator returning a * number between 0 and 1.
* class foo; // Any class.
* VSelector bar; // A selector.
* foo f1, f2;
* bar.insert(0.5,&f1) // assign probability 0.5
* bar.insert(0.5,&f2) // to each of f1 and f2
* foo * f = bar.select(random()) // randomly returns * a pointer to f1 or f2
* * @see Selector */ class VSelector { public: /** A vector of weights. */ typedef vector WeightVector; /** The weight vector iterator type. */ typedef typename WeightVector::const_iterator WIterator; /** A vector ob objects. */ typedef vector ObjectVector; /** The object vector iterator type. */ typedef typename ObjectVector::iterator iterator; /** The object vector const iterator type. */ typedef typename ObjectVector::const_iterator const_iterator; /** Size type of the underlying vector. */ typedef typename ObjectVector::size_type size_type; public: /** * Default constructor. */ VSelector(size_type reserved = 0) : theSum() { reserve(reserved); } /** * Swap the underlying representation with the argument. */ void swap(VSelector & s) { theSums.swap(s.theSums); theWeights.swap(s.theWeights); theObjects.swap(s.theObjects); std::swap(theSum, s.theSum); } /** * Insert an object given a probability for this object. If the * probability is zero or negative, the object will not be inserted * and the probability itself is returned. Otherwise the sum of * probabilities is returned. */ WeightType insert(WeightType d, const T & t) { WeightType newSum = theSum + d; if ( newSum <= theSum ) return d; theSums.push_back(theSum = newSum); theWeights.push_back(d); theObjects.push_back(t); return theSum; } /** * Reweight an object previously inserted giving it a new weight. If * several equivalent objects exists, all of them will be * reweighted. */ WeightType reweight(WeightType, const T &); /** * Erase an object, previously inserted. If the object had not been * inserted, nothing will happen. If several copies of the object * has been inserted, all will be removed removed. In all cases the * sum of probabilities is returned. */ WeightType erase(const T &); /** * Replace all occurencies of told with tnew without changing the * probability for the entry. */ void replace(const T & told, const T & tnew) { for ( iterator it = theObjects.begin(); it != theObjects.end(); ++it ) if ( *it == told ) *it = tnew; } /** * Select an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. * @param rnd a flat random number in the interval ]0,1[ * @param remainder if non-zero the double pointed to will be set to * a uniform random number in the interval ]0,1[ calculated from the * fraction of rnd which was in the range of the selected object. */ T & select(double rnd, double * remainder = 0) throw(range_error) { return theObjects[iselect(rnd, remainder)]; } /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. */ T & operator[](double rnd) throw(range_error) { return select(rnd, 0); } /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ Select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. * @param rnd a flat random number in the interval ]0,1[ * @param remainder if non-zero the double pointed to will be set to * a uniform random number in the interval ]0,1[ calculated from the * fraction of rnd which was in the range of the selected object. */ const T & select(double rnd, double * remainder = 0) const throw(range_error) { return theObjects[iselect(rnd, remainder)]; } /** * Selct an object randomly. Given a random number flatly * distributed in the interval ]0,1[ select an object according to * the individual probabilities specified when they were * inserted. If rnd <= 0 or if rnd >= 1 or the Selector is empty, a * range_error will be thrown. */ const T & operator[](double rnd) const throw(range_error) { return select(rnd, 0); } /** * Selct an object randomly. Given a random number generator which * generates flat random numbers in the interval ]0,1[ with the * operator()() function, select an object according to * the individual probabilities specified when they were * inserted. If the generated number is outside the allowed range or * the Selector is empty, a range_error will be thrown. The * generator should have a push_back function which will be used * push back a uniform random number in the interval ]0,1[ * calculated from the fraction of rnd which was in the range of the * selected object. */ template T & select(RNDGEN & rnd) throw(range_error) { double rem = 0.0; T & t = select(rnd(), &rem); rnd.push_back(rem); return t; } /** * Selct an object randomly. Given a random number generator which * generates flat random numbers in the interval ]0,1[ with the * operator()() function, select an object according to * the individual probabilities specified when they were * inserted. If the generated number is outside the allowed range or * the Selector is empty, a range_error will be thrown. The * generator should have a push_back function which will be used * push back a uniform random number in the interval ]0,1[ * calculated from the fraction of rnd which was in the range of the * selected object. */ template const T & select(RNDGEN & rnd) const throw(range_error) { double rem = 0.0; const T & t = select(rnd(), &rem); rnd.push_back(rem); return t; } /** * Return the sum of probabilities of the objects inserted. Note * that probabilities specified when objects are inserted are * rescaled with this number to give unit probability for * 'select()'. */ WeightType sum() const { return theSum; } /** * Access to the begin() iterator of the underlying * vector of objects. */ const_iterator begin() const { return theObjects.begin(); } /** * Access to the end() iterator in the underlying * vector of objects. */ const_iterator end() const { return theObjects.end(); } /** * Returns true if the VSelector is empty. */ bool empty() const { return theObjects.empty(); } /** * Returns the number of objects in the selector. */ size_type size() const { return theObjects.size(); } /** * Allocate space for a number of objects in the underlying vectors. */ void reserve(size_type reserved) { theSums.reserve(reserved); theWeights.reserve(reserved); theObjects.reserve(reserved); } /** * Erases all objects. */ void clear() { theSums.clear(); theWeights.clear(); theObjects.clear(); theSum = WeightType(); } /** * Output to a stream. */ template void output(OStream &) const; /** * Input from a stream. */ template void input(IStream &); protected: /** * Internal selection engine. */ size_type iselect(double rnd, double * remainder) const throw(range_error); private: /** * The vector of accumulated weights for the objects in the selector */ WeightVector theSums; /** * The vector of weights for the objects in the selector */ WeightVector theWeights; /** * The vector of objects in the selector. */ ObjectVector theObjects; /** * The sum of all weights. */ WeightType theSum; }; /** * Output a VSelector to a stream. */ template inline OStream & operator<<(OStream & os, const VSelector & s) { s.output(os); return os; } /** * Input a VSelector from a stream. */ template inline IStream & operator>>(IStream & is, VSelector & s) { s.input(is); return is; } } #include "VSelector.tcc" #endif /* ThePEG_VSelector_H */ thepeg-1.8.0.orig/Utilities/DescriptionList.cc0000644000175000017500000000563611747772425017562 0ustar sunsun// -*- C++ -*- // // DescriptionList.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DescriptionList class. // #include "DescriptionList.h" #include "ClassDescription.h" using namespace ThePEG; void DescriptionList::hookup() { for ( DescriptionMap::iterator it = descriptionMap().begin(); it != descriptionMap().end(); ++it ) it->second->setup(); } void DescriptionList::Register(ClassDescriptionBase & pd) { if ( find(pd.info()) ) return; insert(pd); hookup(); } DescriptionList::DescriptionMap & DescriptionList::descriptionMap() { static DescriptionMap theDescriptionMap; return theDescriptionMap; } DescriptionList::StringMap & DescriptionList::stringMap() { static StringMap theStringMap; return theStringMap; } string DescriptionList::className(const type_info & ti) { const ClassDescriptionBase * d = find(ti); return d? d->name(): string(); } int DescriptionList::version(const type_info & ti) { const ClassDescriptionBase * d = find(ti); return d? d->version(): 0; } string DescriptionList::library(const type_info & ti) { const ClassDescriptionBase * d = find(ti); return d? d->library(): string(); } void DescriptionList::insert(ClassDescriptionBase & pb) { #ifndef THEPEG_DYNAMIC_TYPE_INFO_BUG descriptionMap()[&(pb.info())] = &pb; #else descriptionMap()[pb.info().name()] = &pb; #endif stringMap()[pb.name()] = &pb; // The following is for backward compatibility and will eventually // be removed. string name = pb.name(); if ( name.find('/') == string::npos ) { if ( name.substr(0, 2) == "::" ) name = name.substr(2); if ( name.find("::") == string::npos ) return; while ( name.find("::") != string::npos ) name.replace(name.find("::"), 2, "/"); name = "/" + name; stringMap()[name] = &pb; } else { if ( name[0] == '/' ) name = name.substr(1); while ( name.find('/') != string::npos ) name.replace(name.find('/'), 1, "::"); stringMap()[name] = &pb; } } void DescriptionList::printHierarchies(ostream & os) { typedef ClassDescriptionBase::DescriptionVector DescVec; for ( DescriptionMap::iterator it = descriptionMap().begin(); it != descriptionMap().end(); ++it ) { os << "Class Name '" << it->second->name() << "'\n (" #ifndef THEPEG_DYNAMIC_TYPE_INFO_BUG << it->first->name() #else << it->first #endif << "," << it->second << ") version " << it->second->version() << endl << " Base classes:" << endl; for ( unsigned int i = 0; i < it->second->descriptions().size(); ++i ) os << " " << i << " '" << it->second->descriptions()[i]->name() << "' (" << it->second->descriptions()[i] << ")" << endl; } } thepeg-1.8.0.orig/Utilities/ClassDescription.cc0000644000175000017500000000144511747772425017706 0ustar sunsun// -*- C++ -*- // // ClassDescription.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ClassDescription class. // #include "ClassDescription.h" using namespace ThePEG; ClassDescriptionBase::~ClassDescriptionBase() {} bool ClassDescriptionBase::isA(const ClassDescriptionBase & base) const { if ( base.info() == info() ) return true; for ( DescriptionVector::const_iterator i = descriptions().begin(); i != descriptions().end(); ++i ) if ( (**i).isA(base) ) return true; return false; } thepeg-1.8.0.orig/Utilities/UtilityBase.h0000644000175000017500000003476211747772425016545 0ustar sunsun// -*- C++ -*- // // UtilityBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_UtilityBase_H #define ThePEG_UtilityBase_H #include "ThePEG/Config/ThePEG.h" #include "ThePEG/EventRecord/ParticleTraits.h" #include "ThePEG/Utilities/Triplet.h" namespace ThePEG { /** * UtilityBase is a base class implementing a number of static utility * functions. It should be used as a base class to give acces to these * functions to a class. A class can safely multiply inherit from this * class as it only contains static functions. */ struct UtilityBase { /** * Sums the four-momentum of given container. The class * Cont::value_type must be of a type T * for which ParticleTraits::momentum(const T&) is * implemented correctly. */ template static LorentzMomentum sumMomentum(const Cont & c) { return sumMomentum(c.begin(), c.end()); } /** * Sums the four-momentum of the entries between first and last. The * class Iterator::value_type must be of a type * T for which ParticleTraits::momentum(const * T&) is implemented correctly. */ template static LorentzMomentum sumMomentum(Iterator first, Iterator last) { LorentzMomentum sum; typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; while ( first != last ) sum += Traits::momentum(*first++); return sum; } /** * Transform the entries between \a first and \a last. The class * Iterator::value_type must be of a type * T for which ParticleTraits::momentum(const * T&) is implemented correctly. */ template static void transform(Iterator first, Iterator last, const LorentzRotation & boost) { typedef typename std::iterator_traits::value_type PType; typedef ParticleTraits Traits; while ( first != last ) Traits::transform(*first++, boost); } /** * Transform the entries in a container \a cont. The class * Cont::value_type must be of a type T * for which ParticleTraits::momentum(const T&) is * implemented correctly. */ template static void transform(Cont & cont, const LorentzRotation & boost) { transform(cont.begin(), cont.end(), boost); } /** * Boost the two objects in the pair to their CM system. Also rotate * so that the first is along the z-axis. The class * PType must have * ParticleTraits::momentum(const PType&) and * ParticleTraits::transform(PType&, const * LorentzRotation&) implemented correctly. */ template static LorentzRotation boostToCM(const pair & pp); /** * Boost the three objects in the Triplet to their CM system. Also * rotate so that the first is along the z-axis and the second is in * the x-z plane with positive x. The class PType must * have ParticleTraits::momentum(const PType&) * and ParticleTraits::transform(PType&, const * LorentzRotation&) implemented correctly. */ template static LorentzRotation boostToCM(const Triplet & pt); /** * Obtain the LorentzRotation needed to boost the two objects in the * pair to their CM system. Also rotate the LorentzRotation so that * the first is along the z-axis. The class PType must * have ParticleTraits::momentum(const PType&) * implemented correctly. */ template static LorentzRotation getBoostToCM(const pair & pp); /** * Obtain the LorentzRotation needed to boost the three objects in * the Triplet to their CM system. Also rotate the LorentzRotation * so that the first is along the z-axis and the secons i in the x-z * plane with positive x. The class PType * must have ParticleTraits::momentum(const * PType&) implemented correctly. */ template static LorentzRotation getBoostToCM(const Triplet & pt); /** * Get the inverse boost as compared to getBoostToCM. */ template static LorentzRotation getBoostFromCM(const pair & pp); /** * Get the inverse boost as compared to getBoostToCM. */ template static LorentzRotation getBoostFromCM(const Triplet & pt); /** * Boost the entries between fisrt and last into their CM system. * The class Iterator::value_type must be of a type * T for which ParticleTraits::momentum(const * T&) and ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. */ template static LorentzRotation boostToCM(Iterator first, Iterator last) { return boostToCM(first, last, last, last); } /** * Boost the entries between fisrt and last into their CM system. If * zAxis != last, also rotate the entries so that zAxis becomes * paralell to the z-axis. The class * Iterator::value_type must be of a type * T for which ParticleTraits::momentum(const * T&) and ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. */ template static LorentzRotation boostToCM(Iterator first, Iterator last, Iterator zAxis) { return boostToCM(first, last, zAxis, last); } /** * Boost the entries between fisrt and last into their CM system. If * zAxis != last, also rotate the entries so that zAxis becomes * paralell to the z-axis. Also, if xzPlane != last, rotate the * entries so that xzPlane is placed in the xz-plane. The class * Iterator::value_type must be of a type * T for which ParticleTraits::momentum(const * T&) and ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. */ template static LorentzRotation boostToCM(Iterator first, Iterator last, Iterator zAxis, Iterator xzPlane); /** * Rotate p to the z-axis and boost it to its CMS, then boost it * along the z-axis and rotate it so that it ends up with momentum * q. If p is massless - simply set its momentum. The class * PType must have * ParticleTraits::momentum(const PType&) * implemented correctly. */ template static void setMomentum(PType & p, const Momentum3 & q); /** * Boost p along the z-axis and rotate it so that, if it was * previously at rest, it ends up with momentum q. If p is massless * - simply set its momentum to q. The class * PType must have * ParticleTraits::momentum(const PType&) * implemented correctly. */ template static void setMomentumFromCMS(PType & p, const Momentum3 & q); /** * Rotate the range of particles so their sum is along z-axis and * boost them to their CMS, then boost them along the z-axis and * rotate them so that they end up with total momentum q. The class * Iter::value_type must be of a type T * for which ParticleTraits::momentum(const T&) and * ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. */ template static void setMomentum(Iter first, Iter last, const Momentum3 & q); /** * Rotate the range of particles so their sum is along z-axis then * boost them along the z-axis and rotate them so that they end up * with total momentum q. If a single boost does not succeed to * obtain the required precision within eps times the total energy, * the boost is redone. The class Iter::value_type must * be of a type T for which * ParticleTraits::momentum(const T&) and * ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. */ template static void setMomentum(Iter first, Iter last, const Momentum3 & q, double eps); /** * Boost the range of particles along the z-axis and rotate them so * that, if they were previously in their rest frame, they end up * with total momentum q. The class Iter::value_type must * be of a type T for which * ParticleTraits::momentum(const T&) and * ParticleTraits::transform(T&, const * LorentzRotation&) are implemented correctly. * @param first iterator pointing to the first particle in the range. * @param last iterator indicating the end of the range. * @param m2 the invariant mass squared of the particles. * @param q final summed momentum of the particles. */ template static void setMomentumFromCMS(Iter first, Iter last, Energy2 m2, const Momentum3 & q); /** * Return the transformation needed to rotate \a p to the z-axis and * boost it to its CMS, then boost it along the z-axis and rotate it * so that it ends up with momentum \a q. The class * PType must have * ParticleTraits::momentum(const PType&) * implemented correctly. Warning This function only works * properly if \a p has a well defined direction in both polar and * azimuth angles. * \deprecated{Use getTransformToMomentum() instead.} */ template static LorentzRotation transformToMomentum(const PType & p, const Momentum3 & q) { typedef ParticleTraits Traits; LorentzMomentum q4(q, sqrt(q.mag2() + Traits::momentum(p).m2())); return transformToMomentum(p, q4); } /** * Return the transformation needed to rotate \a p to the z-axis and * boost it to its CMS, then boost it along the z-axis and rotate it * so that it ends up with momentum \a q. The class PType * must have ParticleTraits::momentum(const * PType&) implemented correctly. Warning This * function only works properly if \a p has a well defined direction * in both polar and azimuth angles. * \deprecated{Use getTransformToMomentum() instead.} */ template static LorentzRotation transformToMomentum(const PType & p, const LorentzMomentum & q) { return transformFromCMS(q)*transformToCMS(p); } /** * Return a transformation appropriate for transforming \a p to have * the momentum \a q. The transformation is done so that the * auxiliary vector \a k is left unchanged. */ template static LorentzRotation getTransformToMomentum(const PType & p, const LorentzMomentum & q, const LorentzMomentum & k) { typedef ParticleTraits Traits; LorentzMomentum k0 = Traits::momentum(p) - k; LorentzMomentum k1 = Traits::momentum(q) - k; return getBoostFromCM(make_pair(k1, k))*getBoostToCM(make_pair(k0, k)); } /** * Return a transformation appropriate for transforming \a p to have * the momentum \a q. The transformation is done so that the * auxiliary vector \a k is left unchanged. */ template static LorentzRotation getTransformToMomentum(const PType & p, const Momentum3 & q, const LorentzMomentum & k) { typedef ParticleTraits Traits; LorentzMomentum q4(q, sqrt(q.mag2() + Traits::momentum(p).m2())); return getTransformToMomentum(p, q4, k); } /** * Create a rotation corresponding to transforming p to its current * value from its CMS by first boosting along the z-axis and then * rotating. The class LV must have methods * rho() and e(). */ template static LorentzRotation transformFromCMS(const LV & p); /** * Create a rotation corresponding to transforming sum to its * current value from its CMS, with zAxis along the z-axis in that * CMS frame. The class LV must have methods * rho(), phi() theta() and * e(). */ template static LorentzRotation transformFromCMS(const LV & sum, LV zAxis); /** * Create a rotation corresponding to transforming sum to its * current value from its CMS, with zAxis along the z-axis and * xyPlane in the x-y plane in that CMS frame. The class * LV must have methods rho(), * phi() theta() and e(). */ template static LorentzRotation transformFromCMS(const LV & sum, const LV & zAxis, LV xyPlane); /** * Create a rotation which would transform sum to its CMS frame with * zAxis along the z-axis in that frame. The class LV * must have methods rho(), phi() * theta() and e(). */ template static LorentzRotation transformToCMS(const LV & sum, LV zAxis); /** * Create a rotation which would transform sum to its CMS frame * first rotating it to the z-axis and then boost it along the * z-axis. The class LV must have methods * rho(), phi() theta() and * e(). */ template static LorentzRotation transformToCMS(const LV & p); /** * Create a rotation which would transform sum to its CMS frame with * zAxis along the z-axis and xyPlane in the x-y plane in that * frame. The class LV must have methods * rho(), phi() theta() and * e(). */ template static LorentzRotation transformToCMS(const LV & sum, const LV & zAxis, LV xyPlane); /** * Add the elements in Cont2 to Cont1, appending them to the end if * possible. */ template static void add(Cont1 & c1, const Cont2 & c2); }; /** Concrete class with UtilityBase as base class. */ struct Utilities: public UtilityBase {}; } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "UtilityBase.tcc" #endif #endif /* ThePEG_UtilityBase_H */ thepeg-1.8.0.orig/Utilities/SimplePhaseSpace.xh0000644000175000017500000000136711754473671017657 0ustar sunsun// -*- C++ -*- // // SimplePhaseSpace.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SimplePhaseSpace_XH #define ThePEG_SimplePhaseSpace_XH // #include "SimplePhaseSpace.fh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by SimplePhaseSpace. */ struct ImpossibleKinematics: public std::runtime_error { /** Constructor. */ ImpossibleKinematics() : runtime_error("Impossible kinematics in SimplePhaseSpace.") { breakThePEG(); } }; /** @endcond */ } #endif /* ThePEG_SimplePhaseSpace_XH */ thepeg-1.8.0.orig/Utilities/DynamicLoader.h0000644000175000017500000000605611747772425017015 0ustar sunsun// -*- C++ -*- // // DynamicLoader.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DynamicLoader_H #define ThePEG_DynamicLoader_H // This is the declaration of the DynamicLoader class. #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * DynamicLoader is the general interface to the dynamic * loader functions of the underlying operating system. Currently it * only works on Linux. * * @see ClassTraits * @see ClassDescription * @see DescriptionList * @see PersistentIStream */ class DynamicLoader { public: /** * The actual load command used on the current platform. */ static bool loadcmd(string); /** * Try to load the file given as argument. If the filename does not * begin with a '/', try to prepend the paths one at the time until * success. If all fail try without prepending a path. * @return true if the loading succeeded, false otherwise. */ static bool load(string file); /** * Add a path to the bottom of the list of directories to seach for * dynaically linkable libraries. */ static void appendPath(string); /** * Add a path to the top of the list of directories to seach for * dynaically linkable libraries. */ static void prependPath(string); /** * Return the last error message issued from the platforms loader. */ static string lastErrorMessage; /** * Insert the name of the given library with correct version numbers * appended, in the corresponding map. */ static void dlname(string); /** * Given a list of generic library names, return the same list with * appended version numbers where available. */ static string dlnameversion(string libs); /** * Return the full list of directories to seach for dynaically * linkable libraries. */ static const vector & allPaths(); /** * Return the list of appended directories to seach for dynaically * linkable libraries. */ static const vector & appendedPaths(); /** * Return the list of prepended directories to seach for dynaically * linkable libraries. */ static const vector & prependedPaths(); private: /** * The list of directories to seach for dynaically linkable * libraries. */ static vector paths; /** * The list of prepended directories to seach for dynaically linkable * libraries. */ static vector prepaths; /** * The list of appended directories to seach for dynaically linkable * libraries. */ static vector apppaths; /** * Used to initialize the paths vector from the ThePEG_PATH * environment. */ static vector defaultPaths(); /** * Map of names of dynamic libraries with correct version numbers * indexed by their generic names. */ static map versionMap; }; } #endif /* ThePEG_DynamicLoader_H */ thepeg-1.8.0.orig/Utilities/DebugItem.cc0000644000175000017500000000476111747772425016306 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the DebugItem class. // #include "DebugItem.h" #include "ThePEG/Utilities/Debug.h" using namespace ThePEG; DebugItem::DebugItem(string itemname, int level): debug(false) { if ( level <= Debug::level ) debug = true; items().insert(make_pair(itemname, this)); map::iterator it = nametics().find(itemname); if ( it != nametics().end() ) { if ( ticker() >= it->second ) debug = true; else itemtics().insert(make_pair(it->second, this)); } else { while ( itemname.rfind("::") != string::npos ) { itemname = itemname.substr(0, itemname.rfind("::")) + "::all"; it = nametics().find(itemname); if ( it != nametics().end() ) { if ( ticker() >= it->second ) debug = true; else itemtics().insert(make_pair(it->second, this)); } itemname = itemname.substr(0, itemname.rfind("::")); } } } void DebugItem::tic() { ticker()++; multimap::iterator it = itemtics().begin(); while ( it != itemtics().end() && ticker() >= it->first ) (it++)->second->debug = true; itemtics().erase(itemtics().begin(), it); } void DebugItem::setDebugItem(string itemname, long after) { typedef multimap::iterator ItemIt; if ( itemname.rfind('=') != string::npos ) { after = atoi(itemname.substr(itemname.rfind('=') + 1).c_str()); itemname = itemname.substr(0, itemname.rfind('=')); } nametics()[itemname] = after; pair range = items().equal_range(itemname); while ( range.first != range.second ) { if ( ticker() >= after ) (range.first++)->second->debug = true; else itemtics().insert(make_pair(after, (range.first++)->second)); } if ( itemname.substr(itemname.length() - 5) == "::all" ) { itemname = itemname.substr(itemname.length() - 3); for ( ItemIt it = items().begin(); it != items().end(); ++it ) if ( it->first.substr(0, itemname.length()) == itemname ) { if ( ticker() >= after ) it->second->debug = true; else itemtics().insert(make_pair(after, it->second)); } } } long & DebugItem::ticker() { static long tics = 0; return tics; } multimap & DebugItem::items() { static multimap itemmap; return itemmap; } multimap & DebugItem::itemtics() { static multimap itemmap; return itemmap; } map & DebugItem::nametics() { static map namemap; return namemap; } thepeg-1.8.0.orig/Utilities/CFile.cc0000644000175000017500000001202011754473671015405 0ustar sunsun// -*- C++ -*- // // CFileLineReader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CFileLineReader class. // #include "CFile.h" #include "config.h" #include #include #include "Throw.h" #include #ifdef HAVE_LIBZ #include #else typedef void * gzFile; #endif #ifdef HAVE_LIBBZ2_NEVER #include #else typedef void BZFILE; #endif using namespace ThePEG; void CFile::open(string filename, string mode) { close(); if ( filename[filename.length()-1] == '|' && mode.find("r") != string::npos ) { filename = filename.substr(0, filename.length() - 1); file = popen(filename.c_str(), mode.c_str()); fileType = pipe; } else if ( filename[0] == '|' && mode.find("w") != string::npos ) { filename = filename.substr(1); file = popen(filename.c_str(), mode.c_str()); fileType = pipe; } else if ( filename.substr(filename.length()-3,3) == ".gz" ) { #ifdef HAVE_LIBZ file = gzopen(filename.c_str(), mode.c_str()); fileType = gzip; #else #ifdef ThePEG_GZREAD_FILE #ifdef ThePEG_GZWRITE_FILE if ( mode.find("r") != string::npos ) filename = ThePEG_GZREAD_FILE " " + filename + " 2>/dev/null"; else filename = ThePEG_GZWRITE_FILE " " + filename + " 2>/dev/null"; file = popen(filename.c_str(), mode.c_str()); fileType = pipe; #else file = fopen(filename.c_str(), mode.c_str()); fileType = plain; #endif #endif #endif } else if ( filename.substr(filename.length()-4,4) == ".bz2" ) { #ifdef HAVE_LIBBZ2_NEVER file = BZ2_bzopen(filename.c_str(), mode.c_str()); fileType = bzip2; #else #ifdef ThePEG_BZ2READ_FILE #ifdef ThePEG_BZ2WRITE_FILE if ( mode.find("r") != string::npos ) filename = ThePEG_BZ2READ_FILE " " + filename + " 2>/dev/null"; else filename = ThePEG_BZ2WRITE_FILE " " + filename + " 2>/dev/null"; file = popen(filename.c_str(), mode.c_str()); fileType = pipe; #else file = fopen(filename.c_str(), mode.c_str()); fileType = plain; #endif #endif #endif } else { file = fopen(filename.c_str(), mode.c_str()); fileType = plain; } if ( !file ) { Throw() << std::strerror(errno) << ": " << filename << Exception::runerror; } } void CFile::close() { if ( !file ) { fileType = undefined; return; } switch ( fileType ) { case plain: fclose((FILE*)file); break; case pipe: pclose((FILE*)file); break; #ifdef HAVE_LIBZ case gzip: gzclose((gzFile)file); break; #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: BZ2_bzclose(file); break; #endif default: break; } file = 0; fileType = undefined; } char * CFile::gets(char * s, int size) { switch ( fileType ) { case plain: case pipe: return fgets(s, size, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzgets((gzFile)file, s, size); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: // don't know what to do here #endif default: return 0; } } int CFile::puts(const char * s) { switch ( fileType ) { case plain: case pipe: return fputs(s, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzputs((gzFile)file, s); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: // don't know what to do here #endif default: return 0; } } int CFile::getc() { switch ( fileType ) { case plain: case pipe: return fgetc((FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzgetc((gzFile)file); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2:// don't know what to do here #endif default: return 0; } } int CFile::putc(int c) { switch ( fileType ) { case plain: case pipe: return fputc(c, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzputc((gzFile)file, c); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: // don't know what to do here #endif default: return 0; } } int CFile::ungetc(int c) { switch ( fileType ) { case plain: case pipe: return std::ungetc(c, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzungetc(c, (gzFile)file); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: // don't know what to do here #endif default: return 0; } } size_t CFile::read(void *ptr, size_t size, size_t nmemb) { switch ( fileType ) { case plain: case pipe: return fread(ptr, size, nmemb, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzread((gzFile)file, ptr, size); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: return BZ2_bzread(file, ptr, size); #endif default: return 0; } } size_t CFile::write(const void *ptr, size_t size, size_t nmemb) { switch ( fileType ) { case plain: case pipe: return fwrite(ptr, size, nmemb, (FILE*)file); #ifdef HAVE_LIBZ case gzip: return gzwrite((gzFile)file, ptr, size); #endif #ifdef HAVE_LIBBZ2_NEVER case bzip2: return BZ2_bzwrite(file, ptr, size); #endif default: return 0; } } thepeg-1.8.0.orig/Utilities/UnitIO.h0000644000175000017500000002113211754473671015440 0ustar sunsun// -*- C++ -*- // // UnitIO.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_UnitIO_H #define ThePEG_UnitIO_H // This is the declaration of the IUnit and OUnit classes and // associated templated functions. #include #include #include #include #include // Workarounds for OS X #if defined __APPLE__ && defined __MACH__ extern "C" int isnan(double) throw(); extern "C" int isinf(double) throw(); #endif namespace ThePEG { /** * The OUnit< class is used to * facilitate output of unitful numbers to a * persistent stream. An Energy can hence be written like * this:
os * << ounit(x, GeV);
Also containers of unitful * numbers may be written like this, as well as LorentzVector and * ThreeVector. * * @see PersistentOStream * @see PersistentIStream * */ template struct OUnit { /** Constructor given an object to be written assuming the given * unit. */ OUnit(const T & t, const UT & u): theX(t), theUnit(u) {} /** Copy constructor */ OUnit(const OUnit & iu): theX(iu.theX), theUnit(iu.theUnit) {} /** Reference to the object to be written. */ const T & theX; /** The unit assumed when writing the object. */ const UT & theUnit; }; /** * The IUnit class is used to facilitate input of unitful numbers from * and to a persistent stream. An Energy can hence be read like * this:
is >> iunit(x, GeV);
Also containers of * unitful numbers may be read like this, as well as LorentzVector and * ThreeVector. * * @see PersistentOStream * @see PersistentIStream * */ template struct IUnit { /** Constructor given an object to be read assuming the given * unit. */ IUnit(T & t, const UT & u): theX(t), theUnit(u) {} /** Copy constructor */ IUnit(const IUnit & iu): theX(iu.theX), theUnit(iu.theUnit) {} /** Reference to the object to be read. */ T & theX; /** The unit assumed when reading the object. */ const UT & theUnit; }; /** Helper function creating a OUnit object given an object and a * unit. */ template inline OUnit ounit(const T & t, const UT & ut) { return OUnit(t, ut); } /** Helper function creating a IUnit object given an object and a * unit. */ template inline IUnit iunit(T & t, const UT & ut) { return IUnit(t, ut); } /** Helper function writing out an object with a given unit to an * output stream. */ template void ounitstream(OStream & os, const T & t, UT & u) { os << t/u; } /** Helper function reading an object with a given unit from an * input stream. */ template void iunitstream(IStream & is, T & t, UT & u) { double d; is >> d; t = d*u;; } /** Helper function reading a complex object with a given unit from an * input stream. */ template void iunitstream(IStream & is, std::complex & t, UT & u) { std::complex d; is >> d; t = d*u;; } /** Output an OUnit object to a stream. */ template OStream & operator<<(OStream & os, const OUnit & u) { ounitstream(os, u.theX, u.theUnit); return os; } /** Input an IUnit object from a stream. */ template IStream & operator>>(IStream & is, const IUnit & u) { iunitstream(is, u.theX, u.theUnit); return is; } /** * OUnitErr is used to write out unitful numbers with an error * estimate on a standard ostream. using the helper function ouniterr * an energy e with an error estimate de can * be written out as eg. cout << ouniterr(e, de, * GeV);. The result will be presented in scientific format * (with the exponent divisible by three) with the relevant number of * significant digits with a single digit in parenthesis indicating * the error in the least significant digit, * eg. 1.23(2)e+03. */ template struct OUnitErr { /** Constructor given an object to be written assuming the given * unit. */ OUnitErr(const T & t, const T & dt, const UT & u): x(t/u), dx(dt/u) {} /** The number to be written. */ double x; /** The estimated error of the number to be written. */ double dx; }; /** Helper function creating a OUnitErr object. */ template inline OUnitErr ouniterr(const T & t, const T & dt, const UT & ut) { return OUnitErr(t, dt, ut); } /** Helper function creating a OUnitErr object. */ inline OUnitErr ouniterr(double t, double dt) { return OUnitErr(t, dt, 1.0); } /** Output an OUnitErr object to a stream. */ template OStream & operator<<(OStream & os, const OUnitErr & u) { if ( isnan(u.x) || isinf(u.x) ) return os << u.x; if ( isnan(u.dx) || isinf(u.dx) ) return os << u.x << '(' << u.dx << ')'; double dx = min(u.dx, abs(u.x)); if ( dx <= 0.0 ) return os << u.x; ostringstream osse; osse << std::scientific << setprecision(0) << dx; string sse = osse.str(); string::size_type ee = sse.find('e'); long m = static_cast(round(abs(u.x)/std::pow(10.0,std::atoi(sse.substr(ee + 1).c_str())))); int powx = m <= 0? os.precision(): int(log10(double(m))); if ( m <= 0 || powx > os.precision() ) sse[0]='0'; ostringstream oss; oss << std::scientific << setprecision(powx) << u.x; string ss = oss.str(); string::size_type e = ss.find('e'); ostringstream out; int pp = std::atoi(ss.substr(e + 1).c_str()); if ( pp%3 == 0 ) out << ss.substr(0, e) << "(" << sse[0] << ")" << ss.substr(e); else if ( (pp - 1)%3 == 0 ) { ostringstream oss; oss << std::scientific << setprecision(powx) << u.x/10.0; string ss = oss.str(); string::size_type e = ss.find('e'); if ( powx == 0 ) out << ss.substr(0, e) << "0(" << sse[0] << "0)" << ss.substr(e); else if ( powx == 1 ) out << ss.substr(0, ss.find('.')) << ss.substr(ss.find('.') + 1, e - ss.find('.') - 1) << "(" << sse[0] << ")" << ss.substr(e); else { swap(ss[ss.find('.')], ss[ss.find('.') + 1]); out << ss.substr(0, e) << "(" << sse[0] << ")" << ss.substr(e); } } else { ostringstream oss; oss << std::scientific << setprecision(powx) << u.x*10.0; string ss = oss.str(); string::size_type e = ss.find('e'); if ( powx == 0 ) out << "0." << ss.substr(0, e) << "(" << sse[0] << ")" << ss.substr(e); else { swap(ss[ss.find('.')], ss[ss.find('.') - 1]); out << ss.substr(0, ss.find('.')) << "0" << ss.substr(ss.find('.'), e) << "(" << sse[0] << ")" << ss.substr(e); } } return os << out.str(); } /** * The IUnitErr class is used to facilitate input of unitful numbers * with error estimates written out using the OUnitErr class. * */ template struct IUnitErr { /** Constructor given an object to be read assuming the given * unit. */ IUnitErr(T & t, T & dt, const UT & u): x(t), dx(dt), ut(u) {} /** Reference to the object to be read. */ T & x; /** The estimated error of the number to be read. */ T & dx; /** The unit assumed when reading the object. */ UT ut; }; /** Helper function creating a IUnitErr object. */ template inline IUnitErr iuniterr(T & t, T & dt, const UT & ut) { return IUnitErr(t, dt, ut); } /** Helper function creating a OUnitErr object. */ inline IUnitErr iuniterr(double & t, double & dt) { return IUnitErr(t, dt, 1.0); } /** Input an IUnit object from a stream. */ template IStream & operator>>(IStream & is, const IUnitErr & u) { string s; double x = 0.0; double dx = 0.0; double ex = 1.0; is >> s; string::size_type open = s.find('('); string::size_type close = s.find(')'); string se = "0"; string sp = "1"; double pe = 1.0; if ( open != string::npos && close != string::npos ) { se = s.substr(open + 1); sp += s.substr(close + 1); string::size_type dot = s.find('.'); if ( dot != string::npos && dot < open ) pe = std::pow(10.0, 1.0 - (open - dot)); } istringstream(s) >> x; istringstream(se) >> dx; istringstream(sp) >> ex; u.x = x*ex*u.ut; u.dx = dx*ex*pe*u.ut; return is; } } #endif /* ThePEG_UnitIO_H */ thepeg-1.8.0.orig/Utilities/XSecStat.h0000644000175000017500000001764311747772425016004 0ustar sunsun// -*- C++ -*- // // XSecStat.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_XSecStat_H #define THEPEG_XSecStat_H // // This is the declaration of the XSecStat class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * XSecStat is a concrete helper class used to collect statistics * about the cross section for a specific process or group of * processes. It contains an overestimated cross section and * information about the number of times the process has been used to * generate an event and how many times this event has been accepted. * * An object of this class must initially be given an overestimated * cross section in the constructor or with the maxXSec(CrossSection) * function. Each time the corresponding process is selected * (according to maxXSec()), the select(double) function should be * called giving the weight with which the event will be accepted as * argument. If the event is then accepted, the accept() function * should be called. If an event is later vetoed, the reject() * function should be called. * */ class XSecStat { public: /** @name Standard constructors, destructor and assignment operator. */ //@{ /** * The default constructor. */ XSecStat() : theMaxXSec(ZERO), theAttempts(0), theAccepted(0), theVetoed(0), theSumWeights (vector(5,0.0)), theSumWeights2(vector(5,0.0)), theLastWeight(0.0) {} /** * Constructor taking the overestimated cross section, \a xsecmax, * as argument. */ XSecStat(CrossSection xsecmax) : theMaxXSec(xsecmax), theAttempts(0), theAccepted(0), theVetoed(0), theSumWeights (vector(5,0.0)), theSumWeights2(vector(5,0.0)), theLastWeight(0.0) {} /** * The assignment operator. */ XSecStat & operator=(const XSecStat & x) { theMaxXSec = x.theMaxXSec; theAttempts = x.theAttempts; theAccepted = x.theAccepted; theVetoed = x.theVetoed; theSumWeights = x.theSumWeights; theSumWeights2 = x.theSumWeights2; theLastWeight = x.theLastWeight; return *this; } /** * Add the contents of another XSecStat. */ XSecStat & operator+=(const XSecStat & x) { theMaxXSec += x.theMaxXSec; theAttempts += x.theAttempts; theAccepted += x.theAccepted; theVetoed += x.theVetoed; for(unsigned int ix=0;ix<5;++ix) { theSumWeights [ix] += x.theSumWeights [ix]; theSumWeights2[ix] += x.theSumWeights2[ix]; } theLastWeight = 0.0; return *this; } /** * Reset the statistics. */ void reset() { theAttempts = theAccepted = theVetoed = 0; theSumWeights = theSumWeights2 = vector(5,0.0); theLastWeight = 0.0; } //@} public: /** @name Simple access functions */ //@{ /** * An event of the corresponding class has been accepted. The * select() method must have been called before. */ void accept() { ++theAccepted; theSumWeights [1] += 1.; theSumWeights2[1] += 1.; } /** * An event of the corresponding class has been attempted. It will * subsequently be accepted with the given \a weight. */ void select(double weight) { ++theAttempts; theSumWeights [0] += weight ; theSumWeights2[0] += sqr(weight); theSumWeights [3] += weight ; theSumWeights2[3] += sqr(weight); theLastWeight = weight; } /** * Reweight a selected and accepted event. */ void reweight(double oldWeight, double newWeight) { theSumWeights [0] += newWeight - oldWeight ; theSumWeights2[0] += sqr(newWeight) - sqr(oldWeight); } /** * Reject the event which was last accepted with accept() or * selected with select(double). The \a weight should be set to the * value, \f$w\f$, used in the previous call to select(double), * except if the event has been accepted with the probability * \f$w\f$, in which case \a weight should be set to \f$sign(1, * w)\f$. */ void reject(double weight = 1.0) { theSumWeights [1] -= weight ; theSumWeights2[1] -= sqr(weight); theSumWeights [2] += weight ; theSumWeights2[2] += sqr(weight); theSumWeights [4] += theLastWeight ; theSumWeights2[4] += sqr(theLastWeight); ++theVetoed; } /** * The current estimate of the cross section for the corresponding * class of events. If no events have been generated, maxXSec() will * be returned. */ CrossSection xSec() const { return attempts() ? maxXSec()*(theSumWeights[0]-theSumWeights[2])/attempts() : maxXSec(); } /** * The current estimate of the error in the cross section for the * corresponding class of events. If no events have been generated, * maxXSec() will be returned. */ CrossSection xSecErr() const { return attempts() ? maxXSec()*sqrt(theSumWeights2[0]+ theSumWeights2[2])/attempts() : maxXSec(); } /** * The current estimate of the cross section for the corresponding * class of events, excluding reweighting. If no events have been * generated, maxXSec() will be returned. */ CrossSection xSecNoReweight() const { return attempts() ? maxXSec()*(theSumWeights[3]-theSumWeights[4])/attempts() : maxXSec(); } /** * The current estimate of the error in the cross section for the * corresponding class of events, excluding reweighting. If no * events have been generated, maxXSec() will be returned. */ CrossSection xSecErrNoReweight() const { return attempts() ? maxXSec()*sqrt(theSumWeights2[3]+ theSumWeights2[4])/attempts() : maxXSec(); } /** * The overestimated cross section. */ CrossSection maxXSec() const { return theMaxXSec; } /** * The sum of the weights so far. */ double sumWeights() const { return theSumWeights[0] - theSumWeights[2]; } /** * The sum of the squared weights so far. */ double sumWeights2() const { return theSumWeights2[0] + theSumWeights2[2]; } /** * The sum of the weights so far, excluding reweighting. */ double sumWeightsNoReweight() const { return theSumWeights[3] - theSumWeights[4]; } /** * The sum of the squared weights so far, excluding reweighting. */ double sumWeights2NoReweight() const { return theSumWeights2[3] + theSumWeights2[4]; } /** * Number of attempts so far. */ long attempts() const { return theAttempts; } /** * Number of attempts so far. */ long accepted() const { return theAccepted-theVetoed; } /** * Set the overestimated cross section. */ void maxXSec(CrossSection x) { theMaxXSec = x; } //@} public: /** @name I/O functions */ //@{ /** * Output to a persistent stream. */ void output(PersistentOStream & os) const; /** * Input from a persistent stream. */ void input(PersistentIStream & is); //@} private: /** * The overestimated cross section. */ CrossSection theMaxXSec; /** * Number of attempts so far. */ long theAttempts; /** * Number of accepted events so far. */ long theAccepted; /** * Number of events vetoed after being accepted */ long theVetoed; /** * The sum of the weights so far. */ vector theSumWeights; /** * The sum of the squared weights so far. */ vector theSumWeights2; /** * The last selected weight, ignoring reweighting. */ double theLastWeight; }; /** Ouptut an XSecStat to a persistent stream. */ PersistentOStream & operator<<(PersistentOStream &, const XSecStat &); /** Input an XSecStat from a persistent stream. */ PersistentIStream & operator>>(PersistentIStream &, XSecStat &); /** Add the contents of two XSecStat objects. */ inline XSecStat operator+(const XSecStat & x1, const XSecStat & x2) { XSecStat x = x1; return x += x2; } } #endif /* THEPEG_XSecStat_H */ thepeg-1.8.0.orig/Utilities/Throw.h0000644000175000017500000000622311747772425015401 0ustar sunsun// -*- C++ -*- // // Throw.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Throw_H #define ThePEG_Throw_H // This is the declaration of the Throw class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/Repository/Repository.h" namespace ThePEG { /** * Helper function to make it easier to throw exceptions. The template * argument should be a class inheriting from Exception. In the * constructor, an object of this Exception class is created and * afterwards a message may be added using ostream-like output * (<<). If a Exception::Severity value is output with << * the Exception object is assumed to be complete and the exception is * actually thrown, except if the Exception::Severity value * Exception::warning was specified, in which case the Exception * object is treated as a warning which is logged with the current * EventGenerator. If no current EventGenerator is present the warning * message is instead written to std::cerr. If no Exception::Severity * is specified, the Exception object is thrown when the Throw object * is destroyed. * * Assuming you have an Exception class called MyEx the Throw class is * used as follows:
Throw<MyEx>>() << "My error * message" << Exception::eventerror;
This will throw * an exception and the current event will be discarded. Changing * Exception::eventerror to * Exception::warning will write out a warning, but no * proper exception is thrown. */ template struct Throw { /** * Standard constructor creating an internal Exception object. */ Throw(): ex(Ex()), handled(false) {} /** * Add information to the current Exception object. */ template Throw & operator<<(const T & t) { ex << t; return *this; } /** * Specify the Exception::Severity of the exception. If this is * Exception::warning, the exception will not be thown, instead it * will be logged with the current * EventGenerator. If no current * EventGenerator is present the warning * message is instead * written to std::cerr. All other seveities will cause the * exception to be thrown immediately. */ void operator<<(Exception::Severity sev) { handled = true; ex << sev; if ( sev != Exception::warning && sev != Exception::info ) { throw ex; } else { if ( CurrentGenerator::isVoid() ) { Repository::clog() << ex.message() << endl; ex.handle(); } else { CurrentGenerator::current().logWarning(ex); } } } /** * The destructor will throw the exception if it has not been handled. */ ~Throw() { if ( !handled ) throw ex; } /** * The ExceptionObject to be thrown. */ Ex ex; /** * If true, the exception has been handled and should not be thrown * in the destructor. */ bool handled; }; } #endif /* ThePEG_Throw_H */ thepeg-1.8.0.orig/Utilities/CompSelector.h0000644000175000017500000002166111747772425016700 0ustar sunsun// -*- C++ -*- // // CompSelector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_CompSelector_H #define THEPEG_CompSelector_H // // This is the declaration of the CompSelector class. // #include "ThePEG/Utilities/Selector.h" namespace ThePEG { /** * The CompSelector class works like the Selector class in that it can * be used to randomly select objects according to associated * probabilities. In addition, the CompSelector class is able to * handle the case where the associated probabilities are * overestimates and the selected object will be discarded according * to some weight. If then a weight above one is encountered, this * means that the overestimated probability for the selected object * was wrong and it should in fact have been higher. If this happens, * the CompSelecteor will go into compensation mode, which means that * the selected object will be oversampled a period after the * violation to compensate for having been undersampled before. Also * the associated probability is adjusted to reflect the new * overestimate. * * The available functions are not as many as in Selector, and some of * the works somewhat differently. Before starting sampling the * objects should be added to a CompSelector object with the insert() * function. To selct an object the select() function should be * used. After that the weight with which the object should be * accepted should be presented with the reweight() function which * normally returns zero. If, however, the weight is larger than unity * the new overestimated probability is returned and the CompSelector * enters the compensating mode. Note that the weight is passed as a * reference and may be changed in by the reweight function if in the * compensating mode. */ template class CompSelector { public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. The optional argument gives the margin * used to get a new overestimated probability for an object when * entering compensation mode. */ CompSelector(double newMargin = 1.1, double newTolerance = 1.0e-6) : N(0), last(), theMargin(newMargin), theTolerance(newTolerance) {} //@} public: /** @name The main function controlling the selection and compensation. */ //@{ /** * Insert an object given a probability for this object. If the * probability is zero or negative, the object will not be inserted * and the probability itself is returned. Otherwise the sum of * probabilities so far is returned. Note that if selection has * already started and this CompSelector is in compensating mode, it * will immediately leave this mode and the selection procedure will * start from scratch. */ WeightType insert(WeightType d, const T & t) { reset(); return selector.insert(d, t); } /** * Selct an object randomly. Given a random number generator which * generates flat random numbers in the interval ]0,1[ with the * operator()() function, select an object according to * the individual probabilities specified when they were * inserted. If the generated number is outside the allowed range or * the Selector is empty, a range_error will be thrown. The * generator should have a push_back function which will be used * push back a uniform random number in the interval ]0,1[ * calculated from the fraction of rnd which was in the range of the * selected object. */ template T & select(RNDGEN & rnd) throw(range_error) { ++N; if ( !compensating() ) last = selector.select(rnd); return last; } /** * Report the weight associated with the last selected * object. Returns the zero if weight was below unity, otherwise the * compensation mode will be entered and the new overestimated * probabilty for the last selected object will be returned. */ WeightType reweight(double & weight) { if ( abs(weight) > 1.0 + tolerance() ) { // Retrieve the old overestimate of the object by seing how much // the summed weights are decreased when removing the object. WeightType oldtot = selector.sum(); WeightType oldmax = oldtot - selector.erase(last); WeightType newmax = oldmax*abs(weight)*margin(); WeightType newtot = selector.insert(newmax, last); double rat = newmax/oldmax; // Setup the new compensation level. Level level; level.weight = 1.0/rat; level.lastN = long(N*newtot/oldtot); // If we are already compensating, reweight the previous // compensation levels. for ( int i = 0, M = levels.size(); i < M; ++i ) { levels[i].lastN = long(levels[i].lastN*newtot/oldtot); levels[i].weight /= rat; } levels.push_back(level); weight /= rat; return newmax; } // If we are compensating we should only accept the selection if the // weight is above the previous overestimate. if ( compensating() ) if ( abs(weight) < levels.back().weight ) weight = 0.0; return WeightType(); } /** * Exit compensation mode and start selection procedure from * scratch. */ void reset() { N = 0; levels.clear(); last = T(); } /** * Erases all objects. */ void clear() { selector.clear(); reset(); } /** * Set the margin used to get a new overestimated probability for an * object when entering compensation mode. */ void margin(double m) { theMargin = m; } /** * Set the tolerance for how much a weight is allowed to be * larger than unity before starting the compensation. */ void tolerance(double t) { theTolerance = t; } //@} /** @name Simple access functions. */ //@{ /** * Return true if this CompSelector is in a compensating state. */ bool compensating() { // Leave all levels which has reached there 'expiry date'. while ( levels.size() && levels.back().lastN < N ) levels.pop_back(); return !levels.empty(); } /** * If in a compensating mode, return the number of selection needed * before exiting this mode. */ long compleft() const { return levels.empty()? 0: levels.back().lastN - N; } /** * Return the sum of probabilities of the objects inserted. Note * that probabilities specified when objects are inserted are * rescaled with this number to give unit probability for * 'select()'. */ WeightType sum() const { return selector.sum(); } /** * Return the margin used to get a new overestimated probability for an * object when entering compensation mode. */ double margin() const { return theMargin; } /** * Return the tolerance for how much a weight is allowed to be * larger than unity before starting the compensation. */ double tolerance() const { return theTolerance; } //@} /** @name I/O functions. */ //@{ /** * Output to a stream. */ template void output(OStream & os) const { os << selector << N << last << theMargin << theTolerance << levels.size(); for ( int i = 0, M = levels.size(); i < M; ++i ) os << levels[i].lastN << levels[i].weight; } /** * Input from a stream. */ template void input(IStream & is) { long M; is >> selector >> N >> last >> theMargin >> theTolerance >> M; levels.resize(M); for ( int i = 0; i < M; ++i ) is >> levels[i].lastN >> levels[i].weight; } //@} private: /** * Internal struct used for bookkeeping when compensating. */ struct Level { /** * The selection number at which point this level of compensation * is ended. */ long lastN; /** * The minimum weight allowed when compensating on this level. */ double weight; }; private: /** * The underlying selector */ Selector selector; /** * The number of selections so far. */ long N; /** * The last selected object. */ T last; /** * The margin used to get a new overestimated probability for an * object when entering compensation mode. */ double theMargin; /** * Set the tolerance for how much a weight is allowed to be * larger than unity before starting the compensation. */ double theTolerance; /** * The currently active compensation levels. */ vector levels; }; /** * Output a Selector to a stream. */ template inline OStream & operator<<(OStream & os, const CompSelector & s) { s.output(os); return os; } /** * Input a Selector from a stream. */ template inline IStream & operator>>(IStream & is, CompSelector & s) { s.input(is); return is; } } #endif /* THEPEG_CompSelector_H */ thepeg-1.8.0.orig/Utilities/Maths.h0000644000175000017500000002175311747772425015357 0ustar sunsun// -*- C++ -*- // // Maths.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Math_H #define ThePEG_Math_H #include namespace ThePEG { /** The Math namespace includes the declaration of some useful * mathematical functions. */ namespace Math { /** * MathType is an empty non-polymorphic base class for all * mathematical function types. */ struct MathType {}; /** The gamma function */ double gamma(double); /** The log of the gamma function */ double lngamma(double); /** Return \f${\rm atanh}(x)\f$ */ double atanh(double); /** Return \f$1-e^x\f$, with highest possible precision for * \f$x\rightarrow 0\f$. */ double exp1m(double x); /** Return \f$1\log(1-x)\f$, with highest possible precision for * \f$x\rightarrow 0\f$. */ double log1m(double); /** Return x rased to the integer power p, using recursion. */ double powi(double x, int p); /** Return the integral of \f$x^p dx\f$ between xl and xu. */ inline double pIntegrate(double p, double xl, double xu) { return p == -1.0? log(xu/xl): (pow(xu, p + 1.0) - pow(xl, p + 1.0))/(p + 1.0); } /** Return the integral of \f$x^p dx\f$ between xl and xu. */ inline double pIntegrate(int p, double xl, double xu) { return p == -1? log(xu/xl): (powi(xu, p + 1) - powi(xl, p + 1))/double(p + 1); } /** Return the integral of \f$x^{e-1} dx\f$ between xl and xl+dx with * highest possible precision for \f$dx\rightarrow 0\f$ and/or * \f$e\rightarrow 0\f$. */ inline double pXIntegrate(double e, double xl, double dx) { return e == 0.0? log1m(-dx/xl): -pow(xl, e)*exp1m(e*log1m(-dx/xl))/e; } /** Generate an x between xl and xu distributed as \f$x^p\f$. */ inline double pGenerate(double p, double xl, double xu, double rnd) { return p == -1.0? xl*pow(xu/xl, rnd): pow((1.0 - rnd)*pow(xl, p + 1.0) + rnd*pow(xu, p + 1.0), 1.0/(1.0 + p)); } /** Generate an x between xl and xu distributed as \f$x^p\f$. */ inline double pGenerate(int p, double xl, double xu, double rnd) { return p == -1? xl*pow(xu/xl, rnd): pow((1.0 - rnd)*powi(xl, p + 1) + rnd*powi(xu, p + 1), 1.0/double(1 + p)); } /** Generate an x between xl and xl + dx distributed as \f$x^{e-1}\f$ * with highest possible precision for\f$dx\rightarrow 0\f$ and/or * * \f$e\rightarrow 0\f$. * @param e the parameter defining the power in \f$x^{e-1}\f$. * @param xl the lower bound of the generation interval. * @param dx the interval. * @param rnd a flat random number in the interval ]0,1[. */ inline double pXGenerate(double e, double xl, double dx, double rnd) { return e == 0.0? -xl*exp1m(rnd*log1m(-dx/xl)): -exp1m(log1m(rnd*exp1m(e*log1m(-dx/xl)))/e)*xl; } /** Returns (x - y)/(|x| + |y|). */ template inline double relativeError(FloatType x, FloatType y) { return ( x == y ? 0.0 : double((x - y)/(abs(x) + abs(y))) ); } /** Return x if |x|<|y|, else return y. */ template inline T absmin(const T & x, const T & y) { return abs(x) < abs(y)? x: y; } /** Return x if |x|>|y|, else return y. */ template inline T absmax(const T & x, const T & y) { return abs(x) > abs(y)? x: y; } /** Transfer the sign of the second argument to the first. * @return \f$|x|\f$ if \f$y>0\f$ otherwise return \f$-|x|\f$. */ template inline T sign(T x, U y) { return y > U()? abs(x): -abs(x); } /** Templated class for calculating integer powers. */ //@{ /** * Struct for powers */ template struct Power: public MathType {}; /** * Struct for powers */ template struct Power { /** Member for the power*/ static double pow(double x) { return x*Power::pow(x); } }; /** * Struct for powers */ template struct Power { /** Member for the power*/ static double pow(double x) { return Power::pow(x)/x; } }; /** * Struct for powers */ template <> struct Power<0,true> { /** Member for the power*/ static double pow(double) { return 1.0; } }; /** * Struct for powers */ template <> struct Power<0,false> { /** Member for the power*/ static double pow(double) { return 1.0; } }; //@} /** Templated function to calculate integer powers known at * compile-time. */ template inline double Pow(double x) { return Power::pow(x); } /** This namespace introduces some useful function classes with known * primitive and inverse primitive functions. Useful to sample * corresponding distributions.*/ namespace Functions { /** Class corresponding to functions of the form \f$x^N\f$ with integer N. */ template struct PowX: public MathType { /** The primitive function. */ static double primitive(double x) { return Pow(x)/double(N+1); } /** Integrate function in a given interval. */ static double integrate(double x0, double x1) { return primitive(x1) - primitive(x0); } /** Sample a distribution in a given interval given a flat random * number R in the interval ]0,1[. */ static double generate(double x0, double x1, double R) { return pow(primitive(x0) + R*integrate(x0, x1), 1.0/double(N+1)); } }; /** @cond TRAITSPECIALIZATIONS */ /** * Template for generating according to a specific power */ template <> inline double PowX<1>::generate(double x0, double x1, double R) { return std::sqrt(x0*x0 + R*(x1*x1 - x0*x0)); } /** * Template for generating according to a specific power */ template <> inline double PowX<0>::generate(double x0, double x1, double R) { return x0 + R*(x1 - x0); } /** * Template for generating according to a specific power */ template<> inline double PowX<-1>::primitive(double x) { return log(x); } /** * Template for generating according to a specific power */ template <> inline double PowX<-1>::integrate(double x0, double x1) { return log(x1/x0); } /** * Template for generating according to a specific power */ template <> inline double PowX<-1>::generate(double x0, double x1, double R) { return x0*pow(x1/x0, R); } /** * Template for generating according to a specific power */ template <> inline double PowX<-2>::generate(double x0, double x1, double R) { return x0*x1/(x1 - R*(x1 - x0)); } /** * Template for generating according to a specific power */ template <> inline double PowX<-3>::generate(double x0, double x1, double R) { return x0*x1/std::sqrt(x1*x1 - R*(x1*x1 - x0*x0)); } /** @endcond */ /** Class corresponding to functions of the form \f$(1-x)^N\f$ * with integer N. */ template struct Pow1mX: public MathType { /** The primitive function. */ static double primitive(double x) { return -PowX::primitive(1.0 - x); } /** Integrate function in a given interval. */ static double integrate(double x0, double x1) { return PowX::integrate(1.0 - x1, 1.0 - x0); } /** Sample a distribution in a given interval given a flat random * number R in the interval ]0,1[. */ static double generate(double x0, double x1, double R) { return 1.0 - PowX::generate(1.0 - x1, 1.0 - x0, R); } }; /** Class corresponding to functions of the form \f$1/(x(1-x))\f$ */ struct InvX1mX: public MathType { /** The primitive function. */ static double primitive(double x) { return log(x/(1.0 - x)); } /** Integrate function in a given interval. */ static double integrate(double x0, double x1) { return log(x1*(1.0 - x0)/(x0*(1.0 - x1))); } /** Sample a distribution in a given interval given a flat random * number R in the interval ]0,1[. */ static double generate(double x0, double x1, double R) { double r = pow(x1*(1.0 - x0)/(x0*(1.0 - x1)), R)*x0/(1.0 - x0); return r/(1.0 + r); } }; /** Class corresponding to functions of the form \f$e^x\f$ */ struct ExpX: public MathType { /** The primitive function. */ static double primitive(double x) { return exp(x); } /** Integrate function in a given interval. */ static double integrate(double x0, double x1) { return exp(x1) - exp(x0); } /** Sample a distribution in a given interval given a flat random * number R in the interval ]0,1[. */ static double generate(double x0, double x1, double R) { return log(exp(x0) + R*(exp(x1) - exp(x0))); } }; /** Class corresponding to functions of the form \f$x^{N/D}\f$ * with integer N and D. */ template struct FracPowX: public MathType { /** The primitive function. */ static double primitive(double x) { double r = double(N)/double(D) + 1.0; return pow(x, r)/r; } /** Integrate function in a given interval. */ static double integrate(double x0, double x1) { return primitive(x1) - primitive(x0); } /** Sample a distribution in a given interval given a flat random * number R in the interval ]0,1[. */ static double generate(double x0, double x1, double R) { double r = double(N)/double(D) + 1.0; return pow(primitive(x0) + R*integrate(x0, x1), 1.0/r); } }; } } } #endif /* ThePEG_Math_H */ thepeg-1.8.0.orig/Utilities/Exception.cc0000644000175000017500000000640311747772425016372 0ustar sunsun// -*- C++ -*- // // Exception.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Exception class. // #include "Exception.h" #include #include #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Repository/CurrentGenerator.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/Utilities/Debug.h" void breakThePEG() { return; } extern "C" { void debugThePEG(const ThePEG::Interfaced * i) { i->debug(); } void debugEvent() { using namespace ThePEG; if ( !CurrentGenerator::isVoid() && CurrentGenerator::current().currentEvent() ) cerr << *CurrentGenerator::current().currentEvent(); } long debugEventNumber() { using namespace ThePEG; if ( !CurrentGenerator::isVoid() ) return CurrentGenerator::current().currentEventNumber(); return 0; } void debugDump() { using namespace ThePEG; if ( !CurrentGenerator::isVoid() ) CurrentGenerator::current().dump(); } void debugParticle(const ThePEG::Particle * p) { using namespace ThePEG; cerr << *p; } void debugParticles(int n, const ThePEG::Particle ** p) { using namespace ThePEG; LorentzMomentum sum; for ( int i = 0; i < n; i++ ) { cerr << **p; sum += (**p).momentum(); ++p; } cerr << ounit(sum,GeV) << "GeV \t" << ounit(sum.m(),GeV) << " GeV\n"; } } namespace ThePEG { Veto::Veto() { if ( ThePEG_DEBUG_LEVEL ) breakThePEG(); } Exception::Exception(const string & newMessage, Severity newSeverity) : theMessage(newMessage), handled(false), theSeverity(newSeverity) { breakThePEG(); if ( noabort && ( theSeverity == abortnow || theSeverity == maybeabort ) ) theSeverity = runerror; if ( theSeverity == abortnow ) { writeMessage(); abort(); } } Exception::~Exception() throw() { if ( !handled ) { writeMessage(); if ( theSeverity == maybeabort ) abort(); } } void Exception::severity(Severity newSeverity) { theSeverity = newSeverity; if ( noabort && ( theSeverity == abortnow || theSeverity == maybeabort ) ) theSeverity = runerror; if ( theSeverity == abortnow ) { writeMessage(cerr); abort(); } } void Exception::writeMessage(ostream & os) const { switch ( severity() ) { case unknown: os << "unknown error type: "; break; case info: os << "Informational exception: "; break; case warning: os << "Warning: "; break; case setuperror: case eventerror: case runerror: case maybeabort: case abortnow: os << "Error: "; break; } os << message() << endl; switch ( severity() ) { case eventerror: os << "The generated event will be discarded." << endl; break; case runerror: os << "This run will be aborted." << endl; break; case maybeabort: case abortnow: os << "The program will now abort and dump core." << endl; break; case unknown: case info: case warning: case setuperror: break; } } ostream * Exception::errstream = &cerr; bool Exception::noabort = false; } thepeg-1.8.0.orig/Utilities/Level.h0000644000175000017500000000274111747772425015346 0ustar sunsun// -*- C++ -*- // // Level.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Level_H #define ThePEG_Level_H // This is the declaration of the Level class. #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * Level is used to increment temporarily a given integer * variable. Everytime a Level object is created with a given integer * variable as argument, the variable will be incremented. When the * corresponding Level object is destroyed, the associated integer * variable is decremented again. * * @see HoldFlag */ template class Level { public: /** Constructor taking an integer variable which is incremented. A * reference to the variable will be stored. */ Level(T & newLevel) : theLevel(++newLevel) {} /** Destructor decrementing the associated integer variable. */ ~Level() { --theLevel; } private: /** A reference to the integer variable to be decremmmented when * this object is destroyed. */ T & theLevel; /** * Default constructor is private and not implemented. */ Level(); /** * Copy constructor is private and not implemented. */ Level(const Level &); /** * Assignment is private and not implemented. */ Level & operator=(const Level &); }; } #endif /* ThePEG_Level_H */ thepeg-1.8.0.orig/Utilities/ObjectIndexer.h0000644000175000017500000001064111747772425017022 0ustar sunsun// -*- C++ -*- // // ObjectIndexer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_ObjectIndexer_H #define THEPEG_ObjectIndexer_H // This is the declaration of the ObjectIndexer class. #include "ThePEG/Config/ThePEG.h" #include namespace ThePEG { /** * This is a templated class which dynamically associates (reference * counted) objects to integer indices. By default, all indices will * be non-negative, but explicit usage of negative indices is * allowed as long as they do not include NoIndex. */ template (-1)> class ObjectIndexer { public: ThePEG_DECLARE_TEMPLATE_POINTERS(ObjT,TPtr); /** Map of objects to indices */ typedef map IndexObjectMap; /** Map of indices to objects. */ typedef map ObjectIndexMap; public: /** * Empty constructor. */ ObjectIndexer(): next(0) {} /** * Return the index for the given object. If the object is not known, * a new index will be created. */ IntT operator()(tTPtr o) { typename ObjectIndexMap::iterator it = objectIndex.find(o); if ( it == objectIndex.end() ) { IntT i = next++; objectIndex[o] = i; indexObject[i] = o; return i; } else return it->second; } /** * Return the index for the given object. If the object is not known, * NoIndex will be returned. */ IntT operator()(tTPtr o) const { return find(o); } /** * Return the index for the given object. If the object is not known, * NoIndex will be returned. */ IntT find(tTPtr o) const { typename ObjectIndexMap::const_iterator it = objectIndex.find(o); return it == objectIndex.end()? NoIndex: it->second; } /** * Return the object for the given index. If the index is not known, * a new object will be (default) created. */ tTPtr operator()(IntT i) { if ( i == NoIndex ) return tTPtr(); typename IndexObjectMap::iterator it = indexObject.find(i); if ( it == indexObject.end() ) { TPtr o = new_ptr(); objectIndex[o] = i; indexObject[i] = o; next = max(next, i + 1); return o; } else return it->second; } /** * Return the object for the given index. If the index is not known, * a null pointer will be returned. */ tTPtr operator()(IntT i) const { return find(i); } /** * Return the object for the given index. If the index is not known, * a null pointer will be returned. */ tTPtr find(IntT i) const { typename IndexObjectMap::const_iterator it = indexObject.find(i); return it == indexObject.end()? tTPtr(): it->second; } /** * Associate the given object with the given index. Possible other * associations involving the index or the object is removed. If the * given index is NoIndex, this function does nothing. */ void operator()(IntT i, tTPtr o) { if ( i == NoIndex ) return; typename IndexObjectMap::iterator iit = indexObject.find(i); if ( iit != indexObject.end() ) objectIndex.erase(iit->second); typename ObjectIndexMap::iterator oit = objectIndex.find(o); if ( oit != objectIndex.end() ) indexObject.erase(oit->second); objectIndex[o] = i; indexObject[i] = o; next = max(next, i + 1); } /** * Return true if the given object is known. */ bool included(tTPtr o) const { return objectIndex.find(o) != objectIndex.end(); } /** * Return true if the given index is known. */ bool included(IntT i) const { return indexObject.find(i) != indexObject.end(); } /** * Remove all associations. */ void clear() { indexObject.clear(); objectIndex.clear(); } /** * Return true if no associations has been made. */ bool empty() const { return indexObject.empty() && objectIndex.empty(); } private: /** * All known objects keyed by their indices. */ IndexObjectMap indexObject; /** * All known indices keyed by the corresponding objects. */ ObjectIndexMap objectIndex; /** * The next index to be used. */ IntT next; private: /** * Private and non-existent assignment operator. */ ObjectIndexer & operator=(const ObjectIndexer &); }; } #endif /* THEPEG_ObjectIndexer_H */ thepeg-1.8.0.orig/Utilities/LoopGuard.h0000644000175000017500000000650311747772425016173 0ustar sunsun// -*- C++ -*- // // LoopGuard.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LoopGuard_H #define ThePEG_LoopGuard_H // This is the declaration of the LoopGuard class. namespace ThePEG { /** * A LoopGuard object can be used to throw an exception if a loop is * iterated too many times. It is used by constructing an object * before the loop giving the maximum number of iterations allowed and * a message to be used as argument to the constructor of the * exception to be thrown. Inside the loop the parenthesis is called * without argument, which will increment and check an internal counter. * * * @see Level */ template class LoopGuard { public: /** * Create a loop guard object which will throw an exception of type * ExceptionT, constructed with 'mess' as argument, if the maximum * number of iterations is exceeded. */ LoopGuard(const MessageT & mess, long maxc = 1000000 ) : count(0), maxCount(maxc), message(mess) {} /** * Increase the iteration count and throw an ExceptionT if the * maximum number of iterations is exceeded. */ void operator()() { if ( ++count > maxCount ) throw ExceptionT(message); } private: /** * The number of counts so far. */ long count; /** * The maximum number of counts allowed. */ long maxCount; /** * The message with which the thrown ExceptionT object will be * initialized. */ const MessageT & message; private: /** * Default constructor is private and not implemented. */ LoopGuard(); /** * Copy constructor is private and not implemented. */ LoopGuard(const LoopGuard &); }; /** * A LoopGuard object can be used to throw an exception if a loop is * iterated too many times. It is used by constructing an object * before the loop giving the maximum number of iterations allowed and * a message to be used as argument to the constructor of the * exception to be thrown. Inside the loop the parenthesis is called * without argument, which will increment and check an internal * counter. This specialization is for the case where the exception * class cannot be created with a message. * * * @see Level */ template class LoopGuard { public: /** * Create a loop guard object which will throw an exception of type * ExceptionT, constructed with 'mess' as argument, if the maximum * number of iterations is exceeded. */ LoopGuard(long maxc = 1000000 ) : count(0), maxCount(maxc) {} /** * Increase the iteration count and throw an ExceptionT if the * maximum number of iterations is exceeded. */ void operator()() { if ( ++count > maxCount ) throw ExceptionT(); } private: /** * The number of counts so far. */ long count; /** * The maximum number of counts allowed. */ long maxCount; private: /** * Default constructor is private and not implemented. */ LoopGuard(); /** * Copy constructor is private and not implemented. */ LoopGuard(const LoopGuard &); }; } #endif /* ThePEG_LoopGuard_H */ thepeg-1.8.0.orig/Utilities/SimplePhaseSpace.cc0000644000175000017500000000562211754473671017623 0ustar sunsun// -*- C++ -*- // // SimplePhaseSpace.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #include "SimplePhaseSpace.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "SimplePhaseSpace.tcc" #endif using namespace ThePEG; Energy SimplePhaseSpace::getMagnitude(Energy2 s, Energy m1, Energy m2) { const Energy2 eps = 10.0*s*Constants::epsilon; if ( m1 < ZERO && sqr(m1) < eps ) m1 = ZERO; if ( m2 < ZERO && sqr(m2) < eps ) m2 = ZERO; if ( m1 >= ZERO && m2 >= ZERO ) { Energy2 aa = s - sqr(m1+m2); if ( aa < ZERO && aa > -eps ) return ZERO; if ( aa < ZERO ) throw ImpossibleKinematics(); return 0.5*sqrt(aa*(s-sqr(m1-m2))/s); } Energy2 m12 = m1 < ZERO? -sqr(m1): sqr(m1); Energy2 m22 = m2 < ZERO? -sqr(m2): sqr(m2); Energy2 r2 = 0.25*(sqr(m12) + sqr(m22 - s) -2.0*m12*(m22 + s))/s; if ( r2 < ZERO || r2 + m12 < ZERO || r2 + m22 < ZERO ) throw ImpossibleKinematics(); return sqrt(r2); } vector SimplePhaseSpace:: CMSn(Energy m0, const vector & m) { using Constants::pi; // Setup constants. int Np = m.size(); vector ret(Np); Energy summ = std::accumulate(m.begin(), m.end(), Energy()); if ( summ >= m0 ) throw ImpossibleKinematics(); while ( true ) { // First get an ordered list of random numbers. vector rndv(Np); rndv[0] = 1.0; rndv.back() = 0.0; for ( int i = 1; i < Np - 1; ++i ) rndv[i] = UseRandom::rnd(); std::sort(rndv.begin() + 1, rndv.end() - 1, std::greater()); // Now setup masses of subsystems. vector sm(Np); Energy tmass = m0 - summ; Energy tmp = summ; for ( int i = 0; i < Np; ++i ) { sm[i] = rndv[i]*tmass + tmp; tmp -= m[i]; } // Now the magnitude of all the momenta can be calculated. This // gives the weight. double weight = 1.0; vector p(Np); p[Np - 1] = getMagnitude(sqr(sm[Np - 2]), m[Np -2], sm[Np - 1]); for ( int i = Np - 2; i >= 0; --i ) weight *= (p[i] = getMagnitude(sqr(sm[i]), m[i], sm[i + 1]))/sm[i]; if ( weight > UseRandom::rnd() ) continue; // Now we just have to generate the angles. ret[Np - 1] = LorentzMomentum(ZERO, ZERO, ZERO, m[Np - 1]); for ( int i = Np - 2; i >= 0; --i ) { Momentum3 p3 = polar3Vector(p[i], 2.0*UseRandom::rnd() - 1.0, 2.0*pi*UseRandom::rnd()); ret[i] = LorentzMomentum(-p3, sqrt(sqr(p[i]) + sqr(m[i]))); if ( i == Np -2 ) { ret[Np - 1] = LorentzMomentum(p3, sqrt(sqr(m[Np - 1]) + p3.mag2())); } else { Boost bv = p3*(1.0/sqrt(sqr(p[i]) + sqr(sm[i + 1]))); if ( bv.mag2() >= 1.0 ) throw ImpossibleKinematics(); LorentzRotation r(bv); for ( int j = i + 1; j < Np; ++j ) ret[j]*=r.one(); } } return ret; } } thepeg-1.8.0.orig/Utilities/CFileLineReader.fh0000644000175000017500000000032111747772425017352 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the CFileLineReader class. // #ifndef ThePEG_CFileLineReader_FH #define ThePEG_CFileLineReader_FH namespace ThePEG { class CFileLineReader; } #endif thepeg-1.8.0.orig/Utilities/Exception.fh0000644000175000017500000000037011747772425016377 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the Exception class. // #ifndef ThePEG_Exception_FH #define ThePEG_Exception_FH #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class Exception; } #endif /* ThePEG_Exception_FH */ thepeg-1.8.0.orig/Utilities/XSecStat.cc0000644000175000017500000000216011747772425016126 0ustar sunsun// -*- C++ -*- // // XSecStat.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the XSecStat class. // #include "XSecStat.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" namespace ThePEG { PersistentOStream & operator<<(PersistentOStream & os, const XSecStat & x) { x.output(os); return os; } PersistentIStream & operator>>(PersistentIStream & is, XSecStat & x) { x.input(is); return is; } } using namespace ThePEG; void XSecStat::output(PersistentOStream & os) const { os << ounit(theMaxXSec,picobarn) << theAttempts << theAccepted << theSumWeights << theSumWeights2 << theLastWeight; } void XSecStat::input(PersistentIStream & is) { is >> iunit(theMaxXSec,picobarn) >> theAttempts >> theAccepted >> theSumWeights >> theSumWeights2 >> theLastWeight; } thepeg-1.8.0.orig/Utilities/Interval.tcc0000644000175000017500000000327411747772425016407 0ustar sunsun// -*- C++ -*- // // Interval.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ThePEG { template template bool Interval::check(Iterator first, Iterator last) { while ( first != last ) if ( includes(*first++) ) return true; return false; } template template bool Interval::checkAll(Iterator first, Iterator last) { while ( first != last ) if ( !includes(*first++) ) return false; return true; } template std::vector< Interval > Interval::split(Interval i, T x) { std::vector< Interval > intervals; Interval low = i.chopLower(x); if ( low.check() ) intervals.push_back(low); intervals.push_back(x); return intervals; } template template std::vector< Interval > Interval::split(Interval i, Iterator first, Iterator last) { typedef std::vector< Interval > IVec; IVec intervals; if ( first != last ) { Interval low = i.chopLower(*first++); IVec loints; if ( low.check() ) loints = split(low, first, last); IVec hiints = split(i, first, last); intervals.insert(intervals.end(), loints.begin(), loints.end()); intervals.insert(intervals.end(), hiints.begin(), hiints.end()); } else intervals = IVec(1, i); return intervals; } template CMP Interval::cmp; } thepeg-1.8.0.orig/Utilities/DIterator.h0000644000175000017500000001210411747772425016166 0ustar sunsun// -*- C++ -*- // // DIterator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DIterator_H #define ThePEG_DIterator_H // This is the declaration of the DIterator class. #include namespace ThePEG { template /** * DIterator is an iterator adaptor class. It can be used whenever one * has a container with pointers to facilitate member selection. The * only requirement is that the underlying pointer is pointing to a * valid object. Given e.g. a vector of pointers, vector * pv where the class A has a member function * dosomething(), it can be used as follows:
* typedef DIterator::iterator> It;
* for ( It i = dv.begin(), i != dv.end(), ++i ) * i->dosomething();
*/ class DIterator { public: /** Forward typedef from underlying iterator */ typedef std::iterator_traits Traits; /** Forward typedef from underlying iterator */ typedef typename Traits::iterator_category iterator_category; /** Forward typedef from underlying iterator */ typedef typename Traits::difference_type difference_type; /** Forward typedef from underlying iterator */ typedef typename Traits::value_type PtrType; /** Forward typedef from underlying iterator */ typedef std::iterator_traits PtrTraits; /** Forward typedef from underlying iterator */ typedef typename PtrTraits::value_type value_type; /** Forward typedef from underlying iterator */ typedef typename PtrTraits::pointer pointer; /** Forward typedef from underlying iterator */ typedef typename PtrTraits::reference reference; public: /** * Constructor from a normal iterator. */ DIterator(const BaseIterator & in): i(in) {} /** * Copy constructor. */ DIterator(const DIterator & pi): i(pi.i) {} public: /** * Dereference the pointer referred to by the underlying iterator. */ reference operator*() const { return **i; } /** * Select member from the pointer referred to by the underlying iterator. */ pointer operator->() const { return *i; } /** * Standard assignment operator. */ DIterator & operator=(const DIterator & pi) { i = pi.i; return *this; } /** * Assignment from a a normal iterator. */ DIterator & operator=(const BaseIterator & pi) { i = pi; return *this; } /** @name Increment and decrement operators. */ //@{ /** Pre increment the underlying iterator. */ DIterator & operator++() { ++i; return *this; } /** Post increment the underlying iterator. */ DIterator operator++(int) { DIterator tmp(*this); ++i; return tmp; } /** Pre decrement the underlying iterator. */ DIterator & operator--() { --i; return *this; } /** Post decrement the underlying iterator. */ DIterator operator--(int) { DIterator tmp(*this); --i; return tmp; } /** Jump forward n steps */ DIterator & operator+=(int n) { i += n; return *this; } /** Get an iterator n steps forward. */ DIterator operator+(int n) { return DIterator(i + n); } /** Jump backward n steps */ DIterator & operator-=(int n) { i -= n; return *this; } /** Get an iterator n steps backward. */ DIterator operator-(int n) { return DIterator(i - n); } //@} /** * Select a pointer with the given index and return a reference to * the object pointed to. */ reference operator[](difference_type n) { return *(i[n]); } /** * Return the distance to the given iterator. */ difference_type operator-(const DIterator & pi) { return i - pi.i; } /** @name Comparison operators. */ //@{ /** Test for equality. */ bool operator==(const DIterator & pi) { return i == pi.i; } /** Test for inequality. */ bool operator!=(const DIterator & pi) { return i != pi.i; } /** Test for less. */ bool operator<(const DIterator & pi) { return i < pi.i; } /** Test for greater. */ bool operator>(const DIterator & pi) { return i > pi.i; } /** Test for less or equal. */ bool operator<=(const DIterator & pi) { return i <= pi.i; } /** Test for greater or equal. */ bool operator>=(const DIterator & pi) { return i >= pi.i; } /** Test for equality. */ bool operator==(const BaseIterator & bi) { return i == bi; } /** Test for inequality. */ bool operator!=(const BaseIterator & bi) { return i != bi; } /** Test for less. */ bool operator<(const BaseIterator & bi) { return i < bi; } /** Test for greater. */ bool operator>(const BaseIterator & bi) { return i > bi; } /** Test for less or equal. */ bool operator<=(const BaseIterator & bi) { return i <= bi; } /** Test for greater or equal. */ bool operator>=(const BaseIterator & bi) { return i >= bi; } //@} private: /** * The underlying standard iterator. */ BaseIterator i; private: /** * The default constructor should never be used. */ DIterator() {} }; } #endif /* ThePEG_DIterator_H */ thepeg-1.8.0.orig/Utilities/Interval.h0000644000175000017500000001445111747772425016064 0ustar sunsun// -*- C++ -*- // // Interval.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Interval_H #define ThePEG_Interval_H // This is the declaration of the Interval class. #include #include #include "Interval.fh" #include "ThePEG/Utilities/UnitIO.h" namespace ThePEG { template /** * An Interval object is used to represent an interval * [ lower(), upper() ) where the ordering is defined by * the bool operator()(const T &, const T &) const member * of the CMP class (by defaut less). */ class Interval { public: /** * Construct an empty interval. */ Interval() : theLimits(pair()) {} /** * Construct interval [dn,up). */ Interval(T dn, T up) : theLimits(pair(dn, up)) {} /** * Test for equality. */ bool operator==(const Interval & i) const { return lower() == i.lower() && upper() == i.upper(); } /** * Test for ordering. * @return true if lower() < i.lower() or lower() * == i.lower() and upper() < i.upper(). */ bool operator<(const Interval & i) const { return cmp(lower(), i.lower()) || ( lower() == i.lower() && cmp(upper(), i.upper()) ); } /** * Check consistency ie. that lower() < upper(). */ bool check() const { return cmp(lower(), upper()); } /** * Returns true if x is within the interval. */ bool operator()(T x) const { return includes(x); } /** * Returns true if x is within the interval. */ bool includes(T x) const { return !cmp(x, lower()) && cmp(x, upper()); } /** * Returns true if the whole of i is within the interval. */ bool includes(const Interval & i) const { return includes(i.lower()) && !cmp(upper(), i.upper()); } /** * If x is in the interval return the interval [x,upper()) and * change this interval to [lower(),x). If x is not within the * interval, return [0,0) and leave this interval as it is. */ Interval chopUpper(T x) { Interval r; if ( includes(x) ) { r.lower(x); r.upper(upper()); upper(x); } return r; } /** * If x is in the interval return the interval [lower(),x) and * change this interval to [x,upper()). If x is not within the * interval, return [0,0) and leave this interval as it is. */ Interval chopLower(T x) { Interval r; if ( includes(x) ) { r.lower(lower()); r.upper(x); lower(x); } return r; } /** * If this interval operlaps with i return the overlapping interval. */ Interval overlap(const Interval & i) const { Interval res; if ( operator==(i) ) res = i; if ( includes(i.upper()) || includes(i.lower()) ) res = Interval(max(lower(),i.lower()), min(upper(), i.upper())); return res; } /** * If this interval operlaps with i return the union of the two * intervals. */ Interval sum(const Interval & i) const { Interval res; if ( operator==(i) ) res = i; if ( includes(i.upper()) || includes(i.lower()) ) res = Interval(min(lower(),i.lower()), max(upper(), i.upper())); return res; } /** * Return the upper limit of the interval. */ T upper() const { return theLimits.second; } /** * Return the lower limit of the interval. */ T lower() const { return theLimits.first; } /** * Set the upper limit of the interval. */ void upper(T up) { theLimits.second = up; } /** * Set the lower limit of the interval. */ void lower(T dn) { theLimits.first = dn; } /** * Check if any of the values in the iterator given range is * included in this interval. */ template bool check(Iterator first, Iterator last); /** * Check if all of the values in the given iterator range is * included in this interval. */ template bool checkAll(Iterator first, Iterator last); /** * If x is in the given interval, split the given interval in two, * otherwise return an empty list. */ std::vector< Interval > split(Interval, T x); /** * For each value in the given range is in the given interval, split * the interval in two, otherwise return an empty list. */ template std::vector< Interval > split(Interval, Iterator first, Iterator last); private: /** The lower and upper limit of this interval */ std::pair theLimits; /** The object used for comparisons. */ static CMP cmp; }; /** An interval of doubles. */ typedef Interval DInterval; /** Helper function to create an interval of a type determined by the * parameters. */ template inline Interval makeInterval(T dn, T up) { return Interval(dn, up); } /** Ouptut an interval to a stream. */ template inline OStream & operator<<(OStream & os, const Interval & i) { os << i.lower() << i.upper(); return os; } /** Input an interval from a stream. */ template inline IStream & operator>>(IStream & is, Interval & i) { T up, dn; is >> dn >> up; i.lower(dn); i.upper(up); return is; } /** Output an interval of a diminsionful type to a stream using the * given unit. * @param os the output stream. * @param i the interval. * @param u the unit. */ template void ounitstream(OStream & os, const Interval & i, UT & u) { os << ounit(i.lower(), u) << ounit(i.upper(), u); } /** Input an interval of a diminsionful type from a stream using the * given unit. * @param is the input stream. * @param i the interval. * @param u the unit. */ template void iunitstream(IStream & is, Interval & i, UT & u) { T low, upp; is >> iunit(low, u) >> iunit(upp, u); i = Interval(low, upp); } } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Interval.tcc" #endif #endif /* ThePEG_Interval_H */ thepeg-1.8.0.orig/Utilities/Makefile.in0000644000175000017500000011027711756366735016202 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Utilities ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGUtilities_la_LIBADD = am__objects_1 = libThePEGUtilities_la-SimplePhaseSpace.lo \ libThePEGUtilities_la-Debug.lo \ libThePEGUtilities_la-DescriptionList.lo \ libThePEGUtilities_la-Maths.lo \ libThePEGUtilities_la-Direction.lo \ libThePEGUtilities_la-DynamicLoader.lo \ libThePEGUtilities_la-StringUtils.lo \ libThePEGUtilities_la-Exception.lo \ libThePEGUtilities_la-ClassDescription.lo \ libThePEGUtilities_la-CFileLineReader.lo \ libThePEGUtilities_la-XSecStat.lo \ libThePEGUtilities_la-CFile.lo \ libThePEGUtilities_la-DebugItem.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGUtilities_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGUtilities_la_OBJECTS = $(am_libThePEGUtilities_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGUtilities_la_SOURCES) DIST_SOURCES = $(libThePEGUtilities_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = SimplePhaseSpace.cc Debug.cc DescriptionList.cc Maths.cc \ Direction.cc DynamicLoader.cc StringUtils.cc \ Exception.cc ClassDescription.cc CFileLineReader.cc \ XSecStat.cc CFile.cc DebugItem.cc DOCFILES = ClassDescription.h ClassTraits.h Debug.h DescriptionList.h \ HoldFlag.h Interval.h Maths.h Rebinder.h Selector.h \ SimplePhaseSpace.h Triplet.h Direction.h UtilityBase.h \ TypeInfo.h DynamicLoader.h UnitIO.h EnumIO.h \ DIterator.h StringUtils.h Exception.h Named.h \ VSelector.h LoopGuard.h ObjectIndexer.h \ CFileLineReader.h CompSelector.h XSecStat.h Throw.h MaxCmp.h \ Level.h Current.h CFile.h DescribeClass.h DebugItem.h AnyReference.h INCLUDEFILES = $(DOCFILES) ClassDescription.fh \ Interval.fh Interval.tcc Rebinder.fh \ Selector.tcc SimplePhaseSpace.tcc SimplePhaseSpace.xh \ Direction.xh UtilityBase.tcc \ Exception.fh VSelector.tcc CFileLineReader.fh noinst_LTLIBRARIES = libThePEGUtilities.la libThePEGUtilities_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGUtilities_la_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Utilities/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Utilities/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGUtilities.la: $(libThePEGUtilities_la_OBJECTS) $(libThePEGUtilities_la_DEPENDENCIES) $(EXTRA_libThePEGUtilities_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGUtilities_la_OBJECTS) $(libThePEGUtilities_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-CFile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-CFileLineReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-ClassDescription.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-Debug.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-DebugItem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-DescriptionList.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-Direction.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-DynamicLoader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-Exception.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-Maths.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-SimplePhaseSpace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-StringUtils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGUtilities_la-XSecStat.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< libThePEGUtilities_la-SimplePhaseSpace.lo: SimplePhaseSpace.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-SimplePhaseSpace.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-SimplePhaseSpace.Tpo -c -o libThePEGUtilities_la-SimplePhaseSpace.lo `test -f 'SimplePhaseSpace.cc' || echo '$(srcdir)/'`SimplePhaseSpace.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-SimplePhaseSpace.Tpo $(DEPDIR)/libThePEGUtilities_la-SimplePhaseSpace.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SimplePhaseSpace.cc' object='libThePEGUtilities_la-SimplePhaseSpace.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-SimplePhaseSpace.lo `test -f 'SimplePhaseSpace.cc' || echo '$(srcdir)/'`SimplePhaseSpace.cc libThePEGUtilities_la-Debug.lo: Debug.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-Debug.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-Debug.Tpo -c -o libThePEGUtilities_la-Debug.lo `test -f 'Debug.cc' || echo '$(srcdir)/'`Debug.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-Debug.Tpo $(DEPDIR)/libThePEGUtilities_la-Debug.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Debug.cc' object='libThePEGUtilities_la-Debug.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-Debug.lo `test -f 'Debug.cc' || echo '$(srcdir)/'`Debug.cc libThePEGUtilities_la-DescriptionList.lo: DescriptionList.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-DescriptionList.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-DescriptionList.Tpo -c -o libThePEGUtilities_la-DescriptionList.lo `test -f 'DescriptionList.cc' || echo '$(srcdir)/'`DescriptionList.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-DescriptionList.Tpo $(DEPDIR)/libThePEGUtilities_la-DescriptionList.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DescriptionList.cc' object='libThePEGUtilities_la-DescriptionList.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-DescriptionList.lo `test -f 'DescriptionList.cc' || echo '$(srcdir)/'`DescriptionList.cc libThePEGUtilities_la-Maths.lo: Maths.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-Maths.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-Maths.Tpo -c -o libThePEGUtilities_la-Maths.lo `test -f 'Maths.cc' || echo '$(srcdir)/'`Maths.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-Maths.Tpo $(DEPDIR)/libThePEGUtilities_la-Maths.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Maths.cc' object='libThePEGUtilities_la-Maths.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-Maths.lo `test -f 'Maths.cc' || echo '$(srcdir)/'`Maths.cc libThePEGUtilities_la-Direction.lo: Direction.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-Direction.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-Direction.Tpo -c -o libThePEGUtilities_la-Direction.lo `test -f 'Direction.cc' || echo '$(srcdir)/'`Direction.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-Direction.Tpo $(DEPDIR)/libThePEGUtilities_la-Direction.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Direction.cc' object='libThePEGUtilities_la-Direction.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-Direction.lo `test -f 'Direction.cc' || echo '$(srcdir)/'`Direction.cc libThePEGUtilities_la-DynamicLoader.lo: DynamicLoader.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-DynamicLoader.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-DynamicLoader.Tpo -c -o libThePEGUtilities_la-DynamicLoader.lo `test -f 'DynamicLoader.cc' || echo '$(srcdir)/'`DynamicLoader.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-DynamicLoader.Tpo $(DEPDIR)/libThePEGUtilities_la-DynamicLoader.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DynamicLoader.cc' object='libThePEGUtilities_la-DynamicLoader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-DynamicLoader.lo `test -f 'DynamicLoader.cc' || echo '$(srcdir)/'`DynamicLoader.cc libThePEGUtilities_la-StringUtils.lo: StringUtils.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-StringUtils.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-StringUtils.Tpo -c -o libThePEGUtilities_la-StringUtils.lo `test -f 'StringUtils.cc' || echo '$(srcdir)/'`StringUtils.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-StringUtils.Tpo $(DEPDIR)/libThePEGUtilities_la-StringUtils.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='StringUtils.cc' object='libThePEGUtilities_la-StringUtils.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-StringUtils.lo `test -f 'StringUtils.cc' || echo '$(srcdir)/'`StringUtils.cc libThePEGUtilities_la-Exception.lo: Exception.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-Exception.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-Exception.Tpo -c -o libThePEGUtilities_la-Exception.lo `test -f 'Exception.cc' || echo '$(srcdir)/'`Exception.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-Exception.Tpo $(DEPDIR)/libThePEGUtilities_la-Exception.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='Exception.cc' object='libThePEGUtilities_la-Exception.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-Exception.lo `test -f 'Exception.cc' || echo '$(srcdir)/'`Exception.cc libThePEGUtilities_la-ClassDescription.lo: ClassDescription.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-ClassDescription.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-ClassDescription.Tpo -c -o libThePEGUtilities_la-ClassDescription.lo `test -f 'ClassDescription.cc' || echo '$(srcdir)/'`ClassDescription.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-ClassDescription.Tpo $(DEPDIR)/libThePEGUtilities_la-ClassDescription.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='ClassDescription.cc' object='libThePEGUtilities_la-ClassDescription.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-ClassDescription.lo `test -f 'ClassDescription.cc' || echo '$(srcdir)/'`ClassDescription.cc libThePEGUtilities_la-CFileLineReader.lo: CFileLineReader.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-CFileLineReader.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-CFileLineReader.Tpo -c -o libThePEGUtilities_la-CFileLineReader.lo `test -f 'CFileLineReader.cc' || echo '$(srcdir)/'`CFileLineReader.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-CFileLineReader.Tpo $(DEPDIR)/libThePEGUtilities_la-CFileLineReader.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CFileLineReader.cc' object='libThePEGUtilities_la-CFileLineReader.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-CFileLineReader.lo `test -f 'CFileLineReader.cc' || echo '$(srcdir)/'`CFileLineReader.cc libThePEGUtilities_la-XSecStat.lo: XSecStat.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-XSecStat.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-XSecStat.Tpo -c -o libThePEGUtilities_la-XSecStat.lo `test -f 'XSecStat.cc' || echo '$(srcdir)/'`XSecStat.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-XSecStat.Tpo $(DEPDIR)/libThePEGUtilities_la-XSecStat.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='XSecStat.cc' object='libThePEGUtilities_la-XSecStat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-XSecStat.lo `test -f 'XSecStat.cc' || echo '$(srcdir)/'`XSecStat.cc libThePEGUtilities_la-CFile.lo: CFile.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-CFile.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-CFile.Tpo -c -o libThePEGUtilities_la-CFile.lo `test -f 'CFile.cc' || echo '$(srcdir)/'`CFile.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-CFile.Tpo $(DEPDIR)/libThePEGUtilities_la-CFile.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='CFile.cc' object='libThePEGUtilities_la-CFile.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-CFile.lo `test -f 'CFile.cc' || echo '$(srcdir)/'`CFile.cc libThePEGUtilities_la-DebugItem.lo: DebugItem.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGUtilities_la-DebugItem.lo -MD -MP -MF $(DEPDIR)/libThePEGUtilities_la-DebugItem.Tpo -c -o libThePEGUtilities_la-DebugItem.lo `test -f 'DebugItem.cc' || echo '$(srcdir)/'`DebugItem.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGUtilities_la-DebugItem.Tpo $(DEPDIR)/libThePEGUtilities_la-DebugItem.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='DebugItem.cc' object='libThePEGUtilities_la-DebugItem.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGUtilities_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGUtilities_la-DebugItem.lo `test -f 'DebugItem.cc' || echo '$(srcdir)/'`DebugItem.cc mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Utilities/Triplet.h0000644000175000017500000000525611747772425015726 0ustar sunsun// -*- C++ -*- // // Triplet.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Triplet_H #define ThePEG_Triplet_H #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * The Triplet class represents a general triplet of objects * completely analogous to std::pair. */ template struct Triplet { /** The type of the first member. */ typedef T1 first_type; /** The type of the second member. */ typedef T2 second_type; /** The type of the third member. */ typedef T3 third_type; /** The first member. */ T1 first; /** The second member. */ T2 second; /** The third member. */ T3 third; /** Default construcotr. */ Triplet() : first(T1()), second(T2()), third(T3()) {} /** Constructor specifying the three members. */ Triplet(const T1 & t1, const T2 & t2, const T3 & t3) : first(t1), second(t2), third(t3) {} /** Copy constructor. */ Triplet(const Triplet & t) : first(t.first), second(t.second), third(t.third) {} /** Copy constructor from other Triplet type. */ template Triplet(const Triplet & u) : first(u.first), second(u.second), third(u.third) {} /** Test for equality. */ bool operator==(const Triplet & t) const { return first == t.first && second == t.second && third == t.third; } /** Test for ordering. * @return first < t.first || ( * !(t.first < first) && ( * second < t.second || ( !(t.second < second) && third < t.third * ))) */ bool operator<(const Triplet & t) const { return first < t.first || ( !(t.first < first) && ( second < t.second || ( !(t.second < second) && third < t.third ))); } }; /** Helper function returning a Triplet with template parameters * determined by the arguments. */ template inline Triplet makeTriplet (const T1 & t1, const T2 & t2, const T3 & t3) { return Triplet(t1, t2, t3); } /** Output a Triplet to a stream. */ template OStream & operator<<(OStream & os, const Triplet & t) { return os << t.first << t.second << t.third; } /** Input a Triplet from a stream. */ template IStream & operator>>(IStream & is, Triplet & t) { return is >> t.first >> t.second >> t.third; } } #endif /* ThePEG_Triplet_H */ thepeg-1.8.0.orig/Utilities/ClassDescription.h0000644000175000017500000003245011747772425017550 0ustar sunsun// -*- C++ -*- // // ClassDescription.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ClassDescription_H #define ThePEG_ClassDescription_H #include "ThePEG/Config/ThePEG.h" #include "ClassDescription.fh" #include "ThePEG/Utilities/Named.h" #include "ThePEG/Persistency/PersistentOStream.fh" #include "ThePEG/Persistency/PersistentIStream.fh" #include "ClassTraits.h" #include "DescriptionList.h" namespace ThePEG { /** * ClassDescriptionBase is the base class for all class description * classes. ClassDescriptionBase is the non-templated base class for * the templated ClassDescriptionTBase, ClassDescription, * AbstractClassDescription, NoPIOClassDescription and * AbstractNoPIOClassDescription classes. An instantiation of one of * these classes represents a meta class encapsulating information * about the template argument class. This information is obtained * from the templated ClassTraits class which can be specialized for * any given class should the default information not be * satisfactory. Information is also obtained from the templated * BaseClassTraits class which must be specialized for each class * declaring a typedef for each of its base classes. * * The information about a class stored in a * ClassDescriptionBase objects is the following:
a * platform-independent class name,
a reference to the * type_info
an integer version number,
a vector * of ClassDescriptionBase* corresponding to the base * classes,
methods for reading/writing members of a class from/to * a PersistentIStream/PersistentOStream and
a method for creating * an object of a class. * * The ClassDescriptionBase objects should be created before main() is * executed, and shouold therfore be instantiated as static member * variables. Only one ClassDescriptionBase object shall be * instantiated for each class to be described. The * ClassDescriptionBase objects are automatically stored in a purely * static DescriptionList class. * * AbstractClassDescription and AbstractNoPIOClassDescription should * be used for abstract base classes, while NoPIOClassDescription and * AbstractNoPIOClassDescription should be used for classes which do * not have any members which need to be read and written * persistently. * * @see ClassTraits * @see PersistentIStream * @see PersistentOStream * @see DescriptionList */ class ClassDescriptionBase: public Named { public: /** A vector of class descriptions. */ typedef vector DescriptionVector; protected: /** * The constructor used by sub-classes. * @param newName the platform independent name of the class. * @param newInfo the type_info object corresponding to the class. * @param newVersion the implementation version of the class. * @param newLibrary the name of a file containing the dynamic * @param abst true if the class is abstract. * library where the class is implemented. */ ClassDescriptionBase(string newName, const type_info & newInfo, int newVersion, string newLibrary, bool abst) : Named(newName), theVersion(newVersion), theLibrary(newLibrary), theInfo(newInfo), isAbstract(abst), done(false) {} public: /** * Empty destructor. */ virtual ~ClassDescriptionBase(); /** * The standart RTTI type_info object for the described class. */ const type_info & info() const { return theInfo; } /** * The version of the described class. */ int version() const { return theVersion; } /** * The name of a file containing the dynamic * library where the class is implemented. */ string library() const { return theLibrary; } /** * Return true if this object was set up properly. */ bool check() const { return done; } /** * Return the descriptions of the base classes of the described * class. */ const DescriptionVector & descriptions() const { return theBaseClasses; } /** * Set up the base class information for this object. */ virtual void setup() = 0; /** * Create an object of the described class. */ virtual BPtr create() const = 0; /** * Output the members of an object of the described class to a * persistent stream. * @param b the object to be written. * @param os the persistent stream. */ virtual void output(tcBPtr b, PersistentOStream & os) const = 0; /** * Read the members of an object of the described class from a * persistent stream. * @param b the object to be read. * @param is the persistent stream. * @param oldVersion the version number of the object when it was written. */ virtual void input(tBPtr b, PersistentIStream & is, int oldVersion) const = 0; /** * Return true if the class described by the argument is a base * class of the class described by this. */ bool isA(const ClassDescriptionBase & base) const; /** * Return true if the corresponding class is abstract. */ bool abstract() const { return isAbstract; } protected: /** * Set the base classes. * @param first an iterator refering to the first base class * @param last an iterator giving the end of the range of base class * descriptions. */ void baseClasses(DescriptionVector::iterator first, DescriptionVector::iterator last) { theBaseClasses = DescriptionVector(first, last); done = true; } private: /** * The version of the described class. */ int theVersion; /** * The library file where this class may be found. */ string theLibrary; /** * The type_info object for the described class */ const type_info & theInfo; /** * The vector of base classes. */ DescriptionVector theBaseClasses; /** * True if this class is abstract. */ bool isAbstract; /** * True if this object was set up properly. */ bool done; }; /** * A helper class for tracing the base classes of a class to be * described */ template ::NthBase> struct ClassDescriptionHelper { /** Add base classes */ static void addBases(vector & c){ const ClassDescriptionBase * b = DescriptionList::find(typeid(B)); if ( !b ) return; c.push_back(b); ClassDescriptionHelper::addBases(c); } }; /** @cond TRAITSPECIALIZATIONS */ /** * A helper class for tracing the base classes of a class to be * described */ template struct ClassDescriptionHelper { /** Add base classes */ static void addBases(vector & ) {} }; /** @endcond */ /** * An intermediate templated base class derived from * ClassDescriptionBase. */ template class ClassDescriptionTBase: public ClassDescriptionBase { public: /** The traits class for the template argument class. */ typedef ClassTraits Traits; public: /** * Default constructor. If \a abst is true then the corresponding * class is abstract. */ ClassDescriptionTBase(bool abst) : ClassDescriptionBase(Traits::className(), typeid(T), Traits::version(), Traits::library(), abst) { DescriptionList::Register(*this); T::Init(); } /** * The descructor. */ virtual ~ClassDescriptionTBase() {} /** * Set up the base class information for this object. */ virtual void setup() { DescriptionVector bases; ClassDescriptionHelper::addBases(bases); baseClasses(bases.begin(), bases.end()); } }; /** * A concreate implementation of ClassDescriptionBase describing an * abstract class with persistent data. */ template class AbstractClassDescription: public ClassDescriptionTBase { public: /** The traits class for the template argument class. */ typedef ClassTraits Traits; public: /** * Default constructor. */ AbstractClassDescription() : ClassDescriptionTBase(true) {} /** * Do not create an object of the described class (which is * abstract). Just return the null pointer. */ virtual BPtr create() const { throw std::logic_error("Tried to instantiate virtual class " + Named::name()); } /** * Output the members of an object of the described class to a * persistent stream. * @param b the object to be written. * @param os the persistent stream. */ virtual void output(tcBPtr b, PersistentOStream & os) const { Traits::output(Traits::cast(b), os); } /** * Read the members of an object of the described class from a * persistent stream. * @param b the object to be read. * @param is the persistent stream. * @param oldVersion the version number of the object when it was written. */ virtual void input(tBPtr b, PersistentIStream & is, int oldVersion) const { Traits::input(Traits::cast(b), is, oldVersion); } }; /** * A concreate implementation of ClassDescriptionBase describing a * concrete class with persistent data. */ template class ClassDescription: public ClassDescriptionTBase { public: /** The traits class for the template argument class. */ typedef ClassTraits Traits; public: /** * Default constructor. */ ClassDescription() : ClassDescriptionTBase(false) {} /** * Create an object of the described class. */ virtual BPtr create() const { return Traits::create(); } /** * Output the members of an object of the described class to a * persistent stream. * @param b the object to be written. * @param os the persistent stream. */ virtual void output(tcBPtr b, PersistentOStream & os) const { Traits::output(Traits::cast(b), os); } /** * Read the members of an object of the described class from a * persistent stream. * @param b the object to be read. * @param is the persistent stream. * @param oldVersion the version number of the object when it was written. */ virtual void input(tBPtr b, PersistentIStream & is, int oldVersion) const { Traits::input(Traits::cast(b), is, oldVersion); } }; /** * A concreate implementation of ClassDescriptionBase describing a * concrete class without persistent data. */ template class NoPIOClassDescription: public ClassDescriptionTBase { public: /** The traits class for the template argument class. */ typedef ClassTraits Traits; public: /** * Default constructor. */ NoPIOClassDescription() : ClassDescriptionTBase(false) {} /** * Create an object of the described class. */ virtual BPtr create() const { return Traits::create(); } /** * Do nothing since the described class has no persistent data. */ virtual void output(tcBPtr, PersistentOStream &) const {} /** * Do nothing since the described class has no persistent data. */ virtual void input(tBPtr, PersistentIStream &, int) const {} }; /** * A concreate implementation of ClassDescriptionBase describing an * abstract class without persistent data. */ template class AbstractNoPIOClassDescription: public ClassDescriptionTBase { public: /** The traits class for the template argument class. */ typedef ClassTraits Traits; public: /** * Default constructor. */ AbstractNoPIOClassDescription() : ClassDescriptionTBase(true) {} /** * Do not create an object of the described class (which is * abstract). Just return the null pointer. */ virtual BPtr create() const { throw std::logic_error("Tried to instantiate virtual class " + Named::name()); } /** * Do nothing since the described class has no persistent data. */ virtual void output(tcBPtr, PersistentOStream & ) const {} /** * Do nothing since the described class has no persistent data. */ virtual void input(tBPtr, PersistentIStream &, int) const {} }; } #define ThePEG_DECLARE_CLASS_DESCRIPTION(Class) \ /** Describe a concrete class with persistent data. */ \ static ClassDescription init ## Class \ #define ThePEG_DECLARE_ABSTRACT_CLASS_DESCRIPTION(Class) \ /** Describe an abstract class with persistent data. */ \ static AbstractClassDescription init ## Class \ #define ThePEG_DECLARE_NOPIO_CLASS_DESCRIPTION(Class) \ /** Describe a concrete class without persistent data. */ \ static NoPIOClassDescription init ## Class \ #define ThePEG_DECLARE_ABSTRACT_NOPIO_CLASS_DESCRIPTION(Class) \ /** Describe an abstract class without persistent data. */ \ static AbstractNoPIOClassDescription init ## Class \ #define ThePEG_IMPLEMENT_CLASS_DESCRIPTION(Class) \ ClassDescription Class::init ## Class \ #define ThePEG_IMPLEMENT_ABSTRACT_CLASS_DESCRIPTION(Class) \ AbstractClassDescription Class::init ## Class \ #define ThePEG_IMPLEMENT_NOPIO_CLASS_DESCRIPTION(Class) \ NoPIOClassDescription Class::init ## Class \ #define ThePEG_IMPLEMENT_ABSTRACT_NOPIO_CLASS_DESCRIPTION(Class) \ AbstractNoPIOClassDescription Class::init ## Class \ #endif /* ThePEG_ClassDescription_H */ thepeg-1.8.0.orig/Utilities/Direction.h0000644000175000017500000001035511747772425016217 0ustar sunsun// -*- C++ -*- // // Direction.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Direction_H #define ThePEG_Direction_H // This is the declaration of the Direction class. #include "ThePEG/Config/ThePEG.h" #include "Direction.xh" namespace ThePEG { template /** * A Direction object can be used to specify that some * following operations should be assumed to be performed with the * z-direction of the momenta reversed. As an example, if * Direction<0>::pos() is true, the method * Lorentz5Momentum::dirPlus() will return the positive, * light-cone component, and Lorentz5Momentum::dirMinus() * the negative, while if Direction<0>::pos() is false * the behavior of the methods are reversed. * * Direction is templated with an integer template argument * (default = 0), and only one object per class can be instatiated at * the time. Attempts to instatiate a second object of a * Direction class will result in an exception being * thrown. To have several different directions classes with different * template arguments must be instantiated. Direction<0> is * reserved for Lorentz5Momentum. Attempts to use the * static methods of a Direction class when no object has * been instatiated will result in an exception being thrown. * * @see Lorentz5Momentum */ class Direction { public: /** The enum defining the directions. */ enum Dir { Neg = -1, /**< Reversed direction. */ Negative = -1, /**< Reversed direction. */ Undefined = 0, /**< No direction has been defined. */ Pos = 1, /**< Standard (positive) direction. */ Positive = 1 /**< Standard (positive) direction. */ }; public: /** * Create an object with a given direction. */ Direction(Dir newDirection) { if ( theDirection != Undefined ) throw MultipleDirectionException(I); if ( newDirection == Positive ) theDirection = Positive; else if ( newDirection == Negative ) theDirection = Negative; else throw UndefinedDirectionException(I); } /** * Create an object with a positive direction if rnd > 0.5, * otherwise set the negative direction. */ Direction(double rnd) { if ( theDirection != Undefined ) throw MultipleDirectionException(I); theDirection = rnd > 0 ? Positive : Negative; } /** * Create an object with a positive direction if p is true, * otherwise set the negative direction. */ Direction(bool p) { if ( theDirection != Undefined ) throw MultipleDirectionException(I); theDirection = p ? Positive : Negative; } /** * Destructure makeing the static variable undefined. */ ~Direction() { theDirection = Undefined; } public: /** * Set the direction. */ static void set(Dir newDirection) { if ( newDirection == Positive ) theDirection = Positive; else if ( newDirection == Negative ) theDirection = Negative; else throw UndefinedDirectionException(I); } /** * Reverse the direction. */ static void reverse() { theDirection = pos() ? Negative : Positive; } /** * Return true if the direction is positive. */ static bool pos() { return dir() == Positive; } /** * Return true if the direction is negative (reversed). */ static bool neg() { return dir() == Negative; } /** * Return the direction. */ static Dir dir() { if ( theDirection == Undefined ) throw UndefinedDirectionException(I); return theDirection; } private: /** * The direction. */ static Dir theDirection; private: /** * Default ctors and assignment is private and not implemented. */ Direction(); /** * Default ctors and assignment is private and not implemented. */ Direction(const Direction &); /** * Default ctors and assignment is private and not implemented. */ Direction & operator=(const Direction &); }; template typename Direction::Dir Direction::theDirection = Direction::Undefined; } #endif /* ThePEG_Direction_H */ thepeg-1.8.0.orig/Utilities/Debug.h0000644000175000017500000000667611747772425015340 0ustar sunsun// -*- C++ -*- // // Debug.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Debug_H #define ThePEG_Debug_H // This is the declaration of the Debug class. #include namespace ThePEG { /** * The Debug class defines a number of debug levels and a * static public member giving the current debug level in a run. */ class Debug { public: /** * The different debug levels. */ enum Levels { noDebug = 0, /**< No debugging. */ printSomeEvents = 1, /**< Lowest debug level. Some events are printed out. */ printEveryEvent = 5, /**< Higher debug level. All events are printed out. */ full = 9 /**< Highest possible debug level */ }; /** * The current level. */ static int level; /** * If true, the debug level has been set from the outside from the * calling program. This would then override any debug settings in * the event generator. */ static bool isset; /** * A vector of switches indicating whether a given debug item * is switched on or not. The index of a debug item has no special * meaning. An implementor may assume that a given number * corresponds to a certain request for debug output, but cannot be * sure that someone else uses that number for some other purpose. */ static std::vector debugItems; /** * Switch on or off a given debug item. If no such item exists, one * will be created. */ static void debugItem(int item, bool on); /** * Set the debug level. */ static void setDebug(int ilev); /** * Check if a given item should be debugged. If no such item is * present false is returned. */ static bool debugItem(int item) { if ( level == noDebug ) return false; if ( level == full ) return true; return ( item < 0 || std::size_t(item) >= debugItems.size() )? false: debugItems[item]; } /** @name Functions for manipulating floating point (FPU) signals * (requires the existence of fpu_controll.h on the * platform). */ //@{ /** * Switch on signalling all FPU exceptions. */ static void unmaskFpuErrors(); /** * Switch on signalling overflow FPU exceptions. */ static void unmaskFpuOverflow(); /** * Switch on signalling underflow FPU exceptions. */ static void unmaskFpuUnderflow(); /** * Switch on signalling division by zero FPU exceptions. */ static void unmaskFpuDivZero(); /** * Switch on signalling denormalized argument FPU exceptions. */ static void unmaskFpuDenorm(); /** * Switch on signalling invalid operation FPU exceptions. */ static void unmaskFpuInvalid(); /** * Switch off signalling all FPU exceptions. */ static void maskFpuErrors(); /** * Switch off signalling overflow FPU exceptions. */ static void maskFpuOverflow(); /** * Switch off signalling underflow FPU exceptions. */ static void maskFpuUnderflow(); /** * Switch off signalling division by zero FPU exceptions. */ static void maskFpuDivZero(); /** * Switch off signalling denormalized argument FPU exceptions. */ static void maskFpuDenorm(); /** * Switch off signalling invalid operation FPU exceptions. */ static void maskFpuInvalid(); //@} }; } #endif /* ThePEG_Debug_H */ thepeg-1.8.0.orig/Utilities/Debug.cc0000644000175000017500000000644611747772425015471 0ustar sunsun// -*- C++ -*- // // Debug.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Debug class. // #include "Debug.h" #include "config.h" #ifdef ThePEG_HAS_FPU_CONTROL #include #endif #ifdef ThePEG_HAS_FENV #include #endif using namespace ThePEG; int Debug::level = 0; bool Debug::isset = false; std::vector Debug::debugItems; void Debug::debugItem(int item, bool on) { if ( item < 0 ) return; debugItems.resize(item + 1, false); debugItems[item] = on; } void Debug::setDebug(int ilev) { if ( ilev < 0 ) debugItem(-ilev, true); else { level = ilev; isset = true; } } void Debug::unmaskFpuErrors() { unmaskFpuOverflow(); unmaskFpuDivZero(); // unmaskFpuDenorm(); unmaskFpuInvalid(); } void Debug::unmaskFpuOverflow() { #ifdef ThePEG_HAS_FENV feenableexcept(FE_OVERFLOW); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_OM); _FPU_SETCW(cw); #endif #endif } void Debug::unmaskFpuUnderflow() { #ifdef ThePEG_HAS_FENV feenableexcept(FE_UNDERFLOW); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_UM); _FPU_SETCW(cw); #endif #endif } void Debug::unmaskFpuDivZero() { #ifdef ThePEG_HAS_FENV feenableexcept(FE_DIVBYZERO); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_ZM); _FPU_SETCW(cw); #endif #endif } void Debug::unmaskFpuDenorm() { #ifdef ThePEG_HAS_FENV feenableexcept(FE_INEXACT); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_DM); _FPU_SETCW(cw); #endif #endif } void Debug::unmaskFpuInvalid() { #ifdef ThePEG_HAS_FENV feenableexcept(FE_INVALID); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw &= ~(_FPU_MASK_IM); _FPU_SETCW(cw); #endif #endif } void Debug::maskFpuErrors() { maskFpuOverflow(); maskFpuDivZero(); maskFpuDenorm(); maskFpuInvalid(); } void Debug::maskFpuOverflow() { #ifdef ThePEG_HAS_FENV fedisableexcept(FE_OVERFLOW); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw |= (_FPU_MASK_OM); _FPU_SETCW(cw); #endif #endif } void Debug::maskFpuUnderflow() { #ifdef ThePEG_HAS_FENV fedisableexcept(FE_UNDERFLOW); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw |= (_FPU_MASK_UM); _FPU_SETCW(cw); #endif #endif } void Debug::maskFpuDivZero() { #ifdef ThePEG_HAS_FENV fedisableexcept(FE_DIVBYZERO); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw |= (_FPU_MASK_ZM); _FPU_SETCW(cw); #endif #endif } void Debug::maskFpuDenorm() { #ifdef ThePEG_HAS_FENV fedisableexcept(FE_INEXACT); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw |= (_FPU_MASK_DM); _FPU_SETCW(cw); #endif #endif } void Debug::maskFpuInvalid() { #ifdef ThePEG_HAS_FENV fedisableexcept(FE_INVALID); #else #ifdef ThePEG_HAS_FPU_CONTROL fpu_control_t cw; _FPU_GETCW(cw); cw |= (_FPU_MASK_IM); _FPU_SETCW(cw); #endif #endif } thepeg-1.8.0.orig/Utilities/HoldFlag.h0000644000175000017500000000705011747772425015755 0ustar sunsun// -*- C++ -*- // // HoldFlag.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HoldFlag_H #define ThePEG_HoldFlag_H // This is the declaration of the HoldFlag class. namespace ThePEG { template /** * HoldFlag objects are used to temporarily change the value * of an object, restoring the original value when the * HoldFlag object is destructed. * * @see Level */ class HoldFlag { public: /** * Constructor setting a temporary value for the given object. * @param newFlag the object which value is temporarily changed. * @param holdFlag the temporary value for the newFlag object. */ HoldFlag(T & newFlag, const T & holdFlag) : theFlag(newFlag), oldFlag(holdFlag) { std::swap(theFlag, oldFlag); } /** * Constructor setting the a temporary value for the given object. * @param newFlag the object which value is temporarily changed. * @param holdFlag the temporary value for the newFlag object. * @param finalFlag the newFlag object will be given the value * finalFlag when the HoldFlag object is destroyed. */ HoldFlag(T & newFlag, const T & holdFlag, const T & finalFlag) : theFlag(newFlag), oldFlag(holdFlag) { std::swap(theFlag, oldFlag); oldFlag = finalFlag; } /** * Destructor. Restores the corresponding object to its original * value. */ ~HoldFlag() { std::swap(theFlag, oldFlag); } private: /** * The object to be changed. */ T & theFlag; /** * The value which will be restored when this is destroyed. */ T oldFlag; /** * Default constructor is private and not implemented. */ HoldFlag(); /** * Copy constructor is private and not implemented. */ HoldFlag(const HoldFlag &); /** * Assignment is private and not implemented. */ HoldFlag & operator=(const HoldFlag &); }; /** * Specialization of HoldFlag for boolean variables. */ template <> class HoldFlag { public: /** * Constructor setting the a temporary value for the bool variable. * @param newFlag the boolean variable which value is temporarily changed. * @param holdFlag the temporary value for the newFlag variable. */ HoldFlag(bool & newFlag, bool holdFlag = true) : theFlag(newFlag), oldFlag(newFlag) { theFlag = holdFlag; } /** * Constructor setting the a temporary value for the bool variable. * @param newFlag the boolean variable which value is temporarily changed. * @param holdFlag the temporary value for the newFlag variable. * @param finalFlag the newFlag variable will be given the value * finalFlag when the HoldFlag object is destroyed. */ HoldFlag(bool & newFlag, bool holdFlag, bool finalFlag) : theFlag(newFlag), oldFlag(finalFlag) { theFlag = holdFlag; } /** * Destructor. Restores the corresponding variable to its original * value. */ ~HoldFlag() { theFlag = oldFlag; } private: /** * The variable to be changed. */ bool & theFlag; /** * The value which will be restored when this is destroyed. */ bool oldFlag; /** * Default constructor is private and not implemented. */ HoldFlag(); /** * Copy constructor is private and not implemented. */ HoldFlag(const HoldFlag &); /** * Assignment is private and not implemented. */ HoldFlag & operator=(const HoldFlag &); }; } #endif /* ThePEG_HoldFlag_H */ thepeg-1.8.0.orig/Utilities/Selector.tcc0000644000175000017500000000550111747772425016376 0ustar sunsun// -*- C++ -*- // // Selector.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ThePEG { template WeightType Selector::erase(const T & t) { Selector newSelector; WeightType oldsum = WeightType(); for ( iterator it = theMap.begin(); it != theMap.end(); ++it ) { WeightType r = it->first - oldsum; oldsum = it->first; if ( it->second != t ) newSelector.insert(r, it->second); } theMap.swap(newSelector.theMap); return theSum = newSelector.theSum; } template const T & Selector:: select(double rnd, double * remainder) const throw(range_error) { if ( rnd <= 0 ) throw range_error("Random number out of range in Selector::select."); const_iterator it = theMap.upper_bound(rnd*theSum); if ( it == theMap.end() ) throw range_error("Empty Selector, or random number out of range " "in Selector::select"); if ( remainder ) { if ( it == theMap.begin() ) *remainder = rnd*theSum/(it->first); else { const_iterator prit = it; --prit; *remainder = (rnd*theSum - prit->first)/(it->first - prit->first); } } return it->second; } template T & Selector:: select(double rnd, double * remainder) throw(range_error) { if ( rnd <= 0 ) throw range_error("Random number out of range in Selector::select."); iterator it = theMap.upper_bound(rnd*theSum); if ( it == theMap.end() ) throw range_error("Empty Selector, or random number out of range " "in Selector::select"); if ( remainder ) { if ( it == theMap.begin() ) *remainder = rnd*theSum/(it->first); else { const_iterator prit = it; --prit; *remainder = (rnd*theSum - prit->first)/(it->first - prit->first); } } return it->second; } template template void Selector::output(OStream & os) const { os << ounit(theSum,TypeTraits::baseunit) << size(); for ( const_iterator it = theMap.begin(); it != theMap.end(); ++it ) os << ounit(it->first,TypeTraits::baseunit) << it->second; } template template void Selector::input(IStream & is) { typedef typename MapType::value_type value_type; clear(); T t; WeightType weightsum; long n; is >> iunit(theSum,TypeTraits::baseunit) >> n; while ( n-- ) { is >> iunit(weightsum,TypeTraits::baseunit) >> t; theMap.insert(theMap.end(), value_type(weightsum, t)); } } } thepeg-1.8.0.orig/Utilities/Makefile.am0000644000175000017500000000241011747772425016153 0ustar sunsun mySOURCES = SimplePhaseSpace.cc Debug.cc DescriptionList.cc Maths.cc \ Direction.cc DynamicLoader.cc StringUtils.cc \ Exception.cc ClassDescription.cc CFileLineReader.cc \ XSecStat.cc CFile.cc DebugItem.cc DOCFILES = ClassDescription.h ClassTraits.h Debug.h DescriptionList.h \ HoldFlag.h Interval.h Maths.h Rebinder.h Selector.h \ SimplePhaseSpace.h Triplet.h Direction.h UtilityBase.h \ TypeInfo.h DynamicLoader.h UnitIO.h EnumIO.h \ DIterator.h StringUtils.h Exception.h Named.h \ VSelector.h LoopGuard.h ObjectIndexer.h \ CFileLineReader.h CompSelector.h XSecStat.h Throw.h MaxCmp.h \ Level.h Current.h CFile.h DescribeClass.h DebugItem.h AnyReference.h INCLUDEFILES = $(DOCFILES) ClassDescription.fh \ Interval.fh Interval.tcc Rebinder.fh \ Selector.tcc SimplePhaseSpace.tcc SimplePhaseSpace.xh \ Direction.xh UtilityBase.tcc \ Exception.fh VSelector.tcc CFileLineReader.fh noinst_LTLIBRARIES = libThePEGUtilities.la libThePEGUtilities_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGUtilities_la_CPPFLAGS = $(AM_CPPFLAGS) \ -DTHEPEG_PKGLIBDIR="\"$(pkglibdir)\"" include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Utilities/VSelector.tcc0000644000175000017500000000431711747772425016530 0ustar sunsun// -*- C++ -*- // // VSelector.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ThePEG { template WeightType VSelector::erase(const T & t) { theSum = WeightType(); int j = 0; for ( int i = 0, N = theWeights.size(); i < N; ++i ) { if ( theObjects[i] == t ) continue; theSums[j] = (theSum += theWeights[i]); if ( i != j ) { theWeights[j] = theWeights[i]; theObjects[j] = theObjects[i]; } ++j; } theSums.erase(theSums.begin() + j, theSums.end()); theWeights.erase(theWeights.begin() + j, theWeights.end()); theObjects.erase(theObjects.begin() + j, theObjects.end()); return theSum; } template WeightType VSelector::reweight(WeightType d, const T & t) { d = max(d, WeightType()); theSum = WeightType(); for ( int i = 0, N = theWeights.size(); i < N; ++i ) { if ( theObjects[i] == t ) theWeights[i] = d; theSums[i] = ( theSum += theWeights[i] ); } return theSum; } template typename VSelector::size_type VSelector:: iselect(double rnd, double * remainder) const throw(range_error) { if ( rnd <= 0 ) throw range_error("Random number out of range in VSelector::select."); WeightType sum = rnd*theSum; WIterator it = upper_bound(theSums.begin(), theSums.end(), sum); if ( it == theSums.end() ) throw range_error("Empty Selector, or random number out of range " "in Selector::select"); size_type i = it - theSums.begin(); if ( remainder ) *remainder = 1.0 - (theSums[i] - sum)/theWeights[i]; return i; } template template void VSelector::output(OStream & os) const { os << theSum << theSums << theWeights << theObjects; } template template void VSelector::input(IStream & is) { clear(); is >> theSum >> theSums >> theWeights >> theObjects; } } thepeg-1.8.0.orig/Utilities/ClassDescription.fh0000644000175000017500000000117411747772425017715 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_ClassDescription_FH #define ThePEG_ClassDescription_FH // // This is the forward declaration of the ClassDescriptionBase, // ClassDescriptionTBase, ClassDescription, AbstractClassDescription, // NoPIOClassDescription and AbstractNoPIOClassDescription, classes. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class ClassDescriptionBase; template class ClassDescription; template class AbstractClassDescription; template class NoPIOClassDescription; template class AbstractNoPIOClassDescription; } #endif /* ThePEG_ClassDescription_FH */ thepeg-1.8.0.orig/Utilities/DynamicLoader.cc0000644000175000017500000000770411754473671017153 0ustar sunsun// -*- C++ -*- // // DynamicLoader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DynamicLoader class. // // macro is passed in from -D compile flag #ifndef THEPEG_PKGLIBDIR #error Makefile.am needs to define THEPEG_PKGLIBDIR #endif #include "DynamicLoader.h" #include "ThePEG/Utilities/StringUtils.h" #include "ThePEG/Config/algorithm.h" #include "config.h" #ifdef ThePEG_HAS_DLOPEN #include #endif #include #ifdef ThePEG_HAS_FENV #include #endif using namespace ThePEG; void DynamicLoader::dlname(string sofile) { if ( StringUtils::suffix(sofile) == "so" ) { string lafile = StringUtils::remsuf(sofile) + ".la"; ifstream is(lafile.c_str()); string line; while ( getline(is, line) ) { if ( line.find("dlname='") != string::npos ) { int pos = line.find('\'') + 1; int l = line.rfind('\'') - pos; sofile = StringUtils::basename(sofile); versionMap[sofile] = line.substr(pos, l); } } } else if ( StringUtils::suffix(StringUtils::remsuf(sofile)) == "so" ) { versionMap[StringUtils::basename(StringUtils::remsuf(sofile))] = StringUtils::basename(sofile); } } string DynamicLoader::dlnameversion(string libs) { string ret; do { string soname = StringUtils::car(libs); string dir = StringUtils::dirname(soname); if ( dir.length() ) dir += '/'; libs = StringUtils::cdr(libs); if ( versionMap.find(StringUtils::basename(soname)) != versionMap.end() ) ret += dir + versionMap[StringUtils::basename(soname)] + " "; else ret += soname + " "; } while ( libs.length() ); return StringUtils::stripws(ret); } bool DynamicLoader::loadcmd(string file) { #ifdef ThePEG_HAS_DLOPEN dlname(file); #ifdef ThePEG_HAS_FENV int oldfpe = fegetexcept(); #endif bool ret = dlopen(file.c_str(), RTLD_LAZY|RTLD_GLOBAL) != 0; #ifdef ThePEG_HAS_FENV feenableexcept(oldfpe); #endif if ( !ret ) lastErrorMessage += string(dlerror()) + string("\n"); return ret; #else #error ThePEG can only be run on platforms which support #error dynamic loading. return false; #endif } void DynamicLoader::appendPath(string path) { if ( path[path.size()-1] != '/' ) path += '/'; paths.push_back(path); apppaths.push_back(path); } void DynamicLoader::prependPath(string path) { if ( path[path.size()-1] != '/' ) path += '/'; paths.insert(paths.begin(), path); prepaths.push_back(path); } bool DynamicLoader::load(string name) { lastErrorMessage = ""; static set loaded; if ( loaded.find(name) != loaded.end() ) return true; loaded.insert(name); bool success = false; if ( name[0] == '/' ) success = loadcmd(name); else { for ( unsigned i = 0; i < paths.size(); ++i ) { string path = paths[i]; if ( path[path.size() - 1] != '/' ) path += '/'; if ( loadcmd(path + name) ) { success = true; break; } } } if ( success || loadcmd(name) ) { lastErrorMessage = ""; return true; } loaded.erase(name); return false; } const vector & DynamicLoader::appendedPaths() { return apppaths; } const vector & DynamicLoader::prependedPaths() { return prepaths; } const vector & DynamicLoader::allPaths() { return paths; } vector DynamicLoader::paths = DynamicLoader::defaultPaths(); vector DynamicLoader::prepaths = vector(); vector DynamicLoader::apppaths = vector(); string DynamicLoader::lastErrorMessage; map DynamicLoader::versionMap; vector DynamicLoader::defaultPaths() { vector vpaths; // macro is passed in from -D compile flag string instpath = THEPEG_PKGLIBDIR; vpaths.push_back(instpath); vpaths.push_back("."); return vpaths; } thepeg-1.8.0.orig/Utilities/TypeInfo.h0000644000175000017500000000222711747772425016033 0ustar sunsun// -*- C++ -*- // // TypeInfo.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_TypeInfo_H #define ThePEG_TypeInfo_H #include "DescriptionList.h" namespace ThePEG { /** TypeInfo is a simple wrapper around the ClassDescription system in * ThePEG. Defines a few static functions for returning the mane and * version of the class given objects of that class. */ struct TypeInfo { /** Return the name of the class of the given object. */ template static string name(const T &) { const ClassDescriptionBase * cd = DescriptionList::find(typeid(T)); if ( cd ) return cd->name(); return "**** CLASS NOT REGISTERED ****"; } /** Return the version number of the class of the given object. */ template static int version(const T &) { const ClassDescriptionBase * cd = DescriptionList::find(typeid(T)); if ( cd ) return cd->version(); return -1; } }; } #endif /* ThePEG_TypeInfo_H */ thepeg-1.8.0.orig/PDF/0000755000175000017500000000000011756460366012556 5ustar sunsunthepeg-1.8.0.orig/PDF/PartonExtractor.fh0000644000175000017500000000036111747772425016236 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_PartonExtractor_FH #define ThePEG_PartonExtractor_FH // // This is the forward declaration of the PartonExtractor class. // namespace ThePEG { class PartonExtractor; } #endif /* ThePEG_PartonExtractor_FH */ thepeg-1.8.0.orig/PDF/RemnantHandler.h0000644000175000017500000001637211747772425015644 0ustar sunsun// -*- C++ -*- // // RemnantHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RemnantHandler_H #define ThePEG_RemnantHandler_H // This is the declaration of the RemnantHandler class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/PDF/PartonBin.h" #include "ThePEG/PDF/PartonBinInstance.h" #include "ThePEG/Vectors/Transverse.h" #include "RemnantHandler.xh" namespace ThePEG { /** * RemnantHandler is an abstract base class for implementing classes * used to generate remnants when partons are extracted from * particles. * * @see \ref RemnantHandlerInterfaces "The interfaces" * defined for RemnantHandler. * @see PartonExtractor * @see PDFBase */ class RemnantHandler: public HandlerBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. If \a multi is true the derived class can be * used to extract more than one parton. */ RemnantHandler(bool multi = false); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this remnant handler can handle extracting all * specified \a partons from the given \a particle. */ virtual bool canHandle(tcPDPtr particle, const cPDVector & partons) const = 0; /** * If the generation of remnants is expected to influence the actual * cross section of the hard sub process, the degrees of freedom * generated by this remnant handler may be included in the general * phase space sampling for the subprocess. In this case this * function should be overridden to return the number of degrees of * freedom used in the generation. If \a doScale is false, it means * that the actual virtuality of the extracted parton will be * obtained from another source. */ virtual int nDim(const PartonBin & pb, bool doScale) const; /** * Generate the momentum of the extracted parton with the \a parent * momentum given by the last argument. If the \a scale is negative, * it means that the doScale in the previous call to nDim() was * true, otherwise the given \a scale should be the virtuality of * the extracted parton. Generated quantities which are not returned * in the momentum may be saved in the PartonBinInstance, \a pb, for * later use. In particular, if the nDim() random numbers, \a r, are * not enough to generate with weight one, the resulting weight * should be stored with the remnantWeight() method of the parton * bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, const LorentzMomentum & parent, bool fixedPartonMomentum = false) const = 0; /** * Generate the momentum of the extracted parton with the \a parent * momentum given by the last argument. If the \a scale is negative, * it means that the doScale in the previous call to nDim() was * true, otherwise the given \a scale should be the virtuality of * the extracted parton. \a shat is the total invariant mass squared * of the hard sub-system produced by the extracted parton and the * primary parton entering from the other side. Generated quantities * which are not returned in the momentum may be saved in the * PartonBinInstance, \a pb, for later use. In particular, if the * nDim() random numbers, \a r, are not enough to generate with * weight one, the resulting weight should be stored with the * remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, Energy2 shat, const LorentzMomentum & parent, bool fixedPartonMomentum = false) const = 0; /** * Boost the generated remnants to the proper momentum given the * information in the parton bin, \a pb. */ virtual void boostRemnants(PartonBinInstance & pb) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, const LorentzMomentum & p, const PVector & prev = PVector()) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. In either case \a shat is * the total invariant mass squared of the hard sub-system produced * by the extracted parton and the primary parton entering from the other * side. * * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, Energy2 shat, const LorentzMomentum & p, const PVector & prev = PVector()) const; //@} /** * Return true if this remnant handler is able to handle multiple * extractions of partons from the same particle. */ bool multiCapable() const { return isMultiCapable; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * True if this handler can generate remnants also if several * partons have been extracted. */ bool isMultiCapable; private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class with persistent data. */ static AbstractClassDescription initRemnantHandler; /** * Private and non-existent assignment operator. */ RemnantHandler & operator=(const RemnantHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of RemnantHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of RemnantHandler. */ typedef HandlerBase NthBase; }; /** This template specialization informs ThePEG about the name of the * RemnantHandler class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RemnantHandler"; } }; /** @endcond */ } #endif /* ThePEG_RemnantHandler_H */ thepeg-1.8.0.orig/PDF/UnResolvedRemnant.cc0000644000175000017500000001715311747772425016511 0ustar sunsun// -*- C++ -*- // // UnResolvedRemnant.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the UnResolvedRemnant class. // #include "UnResolvedRemnant.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/Direction.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr UnResolvedRemnant::clone() const { return new_ptr(*this); } IBPtr UnResolvedRemnant::fullclone() const { return new_ptr(*this); } UnResolvedRemnant::UnResolvedRemnant() : minX(1.0e-10) {} void UnResolvedRemnant::doinit() { thePhoton = getParticleData(ParticleID::gamma); RemnantHandler::doinit(); } bool UnResolvedRemnant:: canHandle(tcPDPtr particle, const cPDVector & partons) const { for ( cPDVector::const_iterator it = partons.begin(); it != partons.end(); ++it ) { if ( (**it).id() != particle->id() && ( (**it).id() != ParticleID::gamma && (**it).id() != ParticleID::pomeron && (**it).id() != ParticleID::reggeon) ) return false; } return true; } int UnResolvedRemnant::nDim(const PartonBin &, bool) const { return 1; } Lorentz5Momentum UnResolvedRemnant:: generate(PartonBinInstance & pb, const double *r, Energy2 scale, const LorentzMomentum & parent, bool fixedPartonMomentum) const { if ( fixedPartonMomentum ) { throw Exception() << "missing implementation in UnResolvedRemnant::generate(...)" << Exception::abortnow; } // photon into hard process and lepton remnant if ( pb.particleData() != pb.partonData()) { scale = abs(scale); Energy ppl = pb.xi()*(abs(parent.z())+parent.t()); Energy2 qt2 = pb.eps()*scale-sqr(pb.xi()*parent.m()); if(qt2produceParticle(prem, pb.particleData()->mass()); pb.remnants(PVector(1, rem)); return pgam; } else { if ( pb.eps() < minX ) { pb.remnants(PVector()); return parent; } LorentzMomentum p(ZERO, ZERO, parent.rho(), parent.e()); TransverseMomentum qt; Energy2 qt2 = ZERO; if ( scale >= ZERO ) { qt2 = pb.eps()*(pb.xi()*parent.m2() + scale); double phi = r[0]*Constants::twopi; qt = TransverseMomentum(sqrt(qt2)*cos(phi), sqrt(qt2)*sin(phi)); } Energy pl = p.plus()*pb.eps(); LorentzMomentum prem = lightCone(pl, qt2/pl, qt); prem.rotateY(parent.theta()); prem.rotateZ(parent.phi()); PPtr rem = thePhoton->produceParticle(prem, ZERO); pb.remnants(PVector(1, rem)); return parent - rem->momentum(); } } Lorentz5Momentum UnResolvedRemnant:: generate(PartonBinInstance & pb, const double *r, Energy2 scale, Energy2, const LorentzMomentum & parent, bool fixedPartonMomentum) const { if ( fixedPartonMomentum ) { throw Exception() << "missing implementation in UnResolvedRemnant::generate(...)" << Exception::abortnow; } // photon into hard process and lepton remnant if ( pb.particleData() != pb.partonData()) { scale = abs(scale); Energy ppl = pb.xi()*(abs(parent.z())+parent.t()); Energy2 qt2 = pb.eps()*scale-sqr(pb.xi()*parent.m()); if(qt2produceParticle(prem, pb.particleData()->mass()); pb.remnants(PVector(1, rem)); return pgam; } else { if ( pb.eps() < minX ) { pb.remnants(PVector()); return parent; } LorentzMomentum p(ZERO, ZERO, parent.rho(), parent.e()); TransverseMomentum qt; Energy2 qt2 = ZERO; if ( scale >= ZERO ) { qt2 = pb.eps()*(pb.xi()*parent.m2() + scale); double phi = r[0]*Constants::twopi; qt = TransverseMomentum(sqrt(qt2)*cos(phi), sqrt(qt2)*sin(phi)); } Energy pl = p.plus()*pb.eps(); LorentzMomentum prem = lightCone(pl, qt2/pl, qt); prem.rotateY(parent.theta()); prem.rotateZ(parent.phi()); PPtr rem = thePhoton->produceParticle(prem, ZERO); pb.remnants(PVector(1, rem)); return parent - rem->momentum(); } } void UnResolvedRemnant::persistentOutput(PersistentOStream & os) const { os << minX << thePhoton; } void UnResolvedRemnant::persistentInput(PersistentIStream & is, int) { is >> minX >> thePhoton; } ClassDescription UnResolvedRemnant::initUnResolvedRemnant; void UnResolvedRemnant::Init() { static ClassDocumentation documentation ("UnResolvedRemnant inherits from the RemnantHandler and implements" "the generation of either the incoming particle as the remnant" "with the emission of a photon, pomeron or reggeon, or" "a photon remnant for the particle entering the hard process."); static Parameter interfaceMinX ("MinX", "The minimum energy fraction allowed for a photon remnant. " "If less than this no remnant will be emitted.", &UnResolvedRemnant::minX, 1.0e-10, 0.0, 1.0, true, false, true); interfaceMinX.rank(10); } bool UnResolvedRemnant:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double, Energy2 scale, const LorentzMomentum & p, const PVector & prev) const { if ( !oldp || !prev.empty() ) return false; // get the same random number used for the azimuth last time Lorentz5Momentum pgam=oldp->momentum(); pgam.rotateZ(-p.phi()); pgam.rotateY(-p.theta()); double test = atan2(pgam.y(),pgam.x())/Constants::twopi; if(test<0.) test+=1.; vector rv; int rd = pb.bin()->remDim(); for ( int i = 0; i < rd; ++i) rv.push_back(test); // compute the momentum newp->set5Momentum(generate(pb, pb.bin()->remDim()? &rv[0]: 0, scale, p)); boostRemnants(pb); return true; } bool UnResolvedRemnant:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double, Energy2 scale, Energy2 shat, const LorentzMomentum & p, const PVector & prev) const { if ( !oldp || !prev.empty() ) return false; // get the same random number used for the azimuth last time Lorentz5Momentum pgam=oldp->momentum(); pgam.rotateZ(-p.phi()); pgam.rotateY(-p.theta()); double test = atan2(pgam.y(),pgam.x())/Constants::twopi; if(test<0.) test+=1.; vector rv; int rd = pb.bin()->remDim(); for ( int i = 0; i < rd; ++i) rv.push_back(test); // compute the momentum newp->set5Momentum(generate(pb, rd > 0? &rv[0]: 0, scale, shat, p)); boostRemnants(pb); return true; } thepeg-1.8.0.orig/PDF/PDFCuts.cc0000644000175000017500000000436711747772425014351 0ustar sunsun// -*- C++ -*- // // PDFCuts.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PDFCuts class. // #include "PDFCuts.h" #include "ThePEG/Cuts/Cuts.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE // #include "PDFCuts.tcc" #endif using namespace ThePEG; PDFCuts:: PDFCuts(const Cuts & kc, bool first, const SInterval & S, const SInterval & sHatIn) { SInterval sHat(max(sHatIn.lower(), kc.sHatMin()), min(sHatIn.upper(), kc.sHatMax())); double xmin = sqrt(sHat.lower()/S.upper()); double xmax = sqrt(sHat.upper()/S.lower()); theScale = SInterval(kc.scaleMin(), kc.scaleMax()); double x1max = min(xmax*exp( 2.*kc.yHatMax()), kc.x1Max()); double x2max = min(xmax*exp(-2.*kc.yHatMin()), kc.x2Max()); x1max = min(xmax,x1max); x2max = min(xmax,x2max); if ( first ) { double x1min = max(xmin*exp(2.*kc.yHatMin()), kc.x1Min()); x1min = max(sqr(xmin),x1min); theSMax = x2max*S.upper(); theL = Interval(log(1.0/x1max), log(1.0/x1min)); } else { double x2min = max(xmin*exp(-2.*kc.yHatMax()), kc.x2Min()); x2min = max(sqr(xmin),x2min); theSMax = x1max*S.upper(); theL = Interval(-log(x2max), -log(x2min)); } } PDFCuts:: PDFCuts(const Cuts & kc, bool first, Energy maxEnergy) { SInterval sHat(kc.sHatMin(), kc.sHatMax()); double xmin = sqrt(sHat.lower())/maxEnergy; double xmax = 1.0; theScale = SInterval(kc.scaleMin(), kc.scaleMax()); double x1max = min(xmax*exp( 2.*kc.yHatMax()), kc.x1Max()); double x2max = min(xmax*exp(-2.*kc.yHatMin()), kc.x2Max()); x1max = min(xmax,x1max); x2max = min(xmax,x2max); if ( first ) { double x1min = max(xmin*exp(2.*kc.yHatMin()), kc.x1Min()); x1min = max(sqr(xmin),x1min); theSMax = x2max*sqr(maxEnergy); theL = Interval(-log(x1max), -log(x1min)); } else { double x2min = max(xmin*exp(-2.*kc.yHatMax()), kc.x2Min()); x2min = max(sqr(xmin),x2min); theSMax = x1max*sqr(maxEnergy); theL = Interval(-log(x2max), -log(x2min)); } } thepeg-1.8.0.orig/PDF/PDFBase.cc0000644000175000017500000001327111747772425014277 0ustar sunsun// -*- C++ -*- // // PDFBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PDFBase class. // #include "PDFBase.h" #include "ThePEG/PDF/RemnantHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/StandardMatchers.h" using namespace ThePEG; PDFBase::PDFBase() : rangeException(rangeZero) {} PDFBase::PDFBase(const PDFBase & x) : HandlerBase(x), theRemnantHandler(x.theRemnantHandler), rangeException(x.rangeException) {} PDFBase::~PDFBase() {} bool PDFBase::canHandle(tcPDPtr particle) const { return canHandleParticle(particle) && remnantHandler() && remnantHandler()->canHandle(particle, partons(particle)); } bool PDFBase::hasPoleIn1(tcPDPtr, tcPDPtr) const { return false; } double PDFBase:: xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps, Energy2 particleScale) const { using Math::log1m; return xfl(particle, parton, partonScale, (x < 0.5 || eps <= 0.0)? -log(x): -log1m(eps), particleScale); } double PDFBase:: xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { using Math::exp1m; return xfx(particle, parton, partonScale, exp(-l), exp1m(-l), particleScale); } double PDFBase:: xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps, Energy2 particleScale) const { if ( !QuarkMatcher::Check(*parton) ) return 0.0; return max(0.0, xfx(particle, parton, partonScale, x, eps, particleScale) - xfx(particle, parton->CC(), partonScale, x, eps, particleScale)); } double PDFBase:: xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { if ( !QuarkMatcher::Check(*parton) ) return 0.0; return max(0.0, xfl(particle, parton, partonScale, l, particleScale) - xfl(particle, parton->CC(), partonScale, l, particleScale)); } double PDFBase:: xfsx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps, Energy2 particleScale) const { return max(0., xfx(particle,parton,partonScale,x,eps,particleScale)- xfvx(particle,parton,partonScale,x,eps,particleScale)); } double PDFBase:: xfsl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { return max(0., xfl(particle,parton,partonScale,l,particleScale)- xfvl(particle,parton,partonScale,l,particleScale)); } double PDFBase::flattenL(tcPDPtr, tcPDPtr, const PDFCuts & c, double z, double & jacobian) const { jacobian *= c.lMax() - c.lMin(); return c.lMin() + z*(c.lMax() - c.lMin()); } double PDFBase:: flattenScale(tcPDPtr, tcPDPtr, const PDFCuts & c, double l, double z, double & jacobian) const { if ( c.scaleMin() > ZERO ) { double r = c.scaleMaxL(l)/c.scaleMin(); double ret = pow(r, z - 1.0); jacobian *= log(r)*ret; return ret; } else { return z; } } void PDFBase::doinit() { HandlerBase::doinit(); } void PDFBase::persistentOutput(PersistentOStream & os) const { os << theRemnantHandler << oenum(rangeException); } void PDFBase::persistentInput(PersistentIStream & is, int) { is >> theRemnantHandler >> ienum(rangeException); } AbstractClassDescription PDFBase::initPDFBase; void PDFBase::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::PDFBase class"); static Reference interfaceRemnantHandler ("RemnantHandler", "A remnant handler capable of generating remnants for the partons " "which can be extracted with this PDF.", &PDFBase::theRemnantHandler, false, false, true, false); static Switch interfaceRangeException ("RangeException", "How to handle cases when momentum fractions or scales are " "outside of limits. Note that this switch may be ignored in sub-classes.", &PDFBase::rangeException, rangeZero, true, false); static SwitchOption interfaceRangeExceptionFreeze (interfaceRangeException, "Freeze", "Values are frozen outside the given ranges.", rangeFreeze); static SwitchOption interfaceRangeExceptionZero (interfaceRangeException, "Zero", "Values are zero outside the given ranges.", rangeZero); static SwitchOption interfaceRangeExceptionThrow (interfaceRangeException, "Throw", "An exception is thrown outside the given ranges.", rangeThrow); } RemnantHandlerCantHandle::RemnantHandlerCantHandle(string pdf, string rh) { theMessage << "Cannot assign '" << rh << "' as remnant handler for the " << "parton density object '" << pdf << "' because the remnant handler does not feel up to the job."; severity(warning); } PDFWrongParticle::PDFWrongParticle(string p, string pdf, string mess) { theMessage << "Cannot assign particle '" << p << "' to be handled by the " << "parton density object '" << pdf << "'. " << mess; severity(warning); } PDFRange::PDFRange(string pdf, string var, double val, double lim) { theMessage << "In parton density function '" << pdf << "': the value of " << var << ", " << val << ", was out of range (" << lim << ")."; severity(eventerror); } thepeg-1.8.0.orig/PDF/LHAPDF.cc0000644000175000017500000006137311747772425014037 0ustar sunsun// -*- C++ -*- // // LHAPDF.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LHAPDF class. // // macros are passed in from -D compile flag #ifndef THEPEG_PKGDATADIR #error Makefile.am needs to define THEPEG_PKGDATADIR #endif #ifndef LHAPDF_PKGDATADIR #error Makefile.am needs to define LHAPDF_PKGDATADIR #endif #include "LHAPDF.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Utilities/Throw.h" #include "config.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #ifdef ThePEG_HAS_FPU_CONTROL #include #endif #ifdef ThePEG_HAS_FENV #include #endif using namespace ThePEG; typedef double F77ThePEGDouble; typedef int F77ThePEGInteger; extern "C" { void setlhaparm_(const char *, F77ThePEGInteger); void initpdfsetbynamem_(F77ThePEGInteger &, const char *, F77ThePEGInteger); void initpdfm_(F77ThePEGInteger &,F77ThePEGInteger &); void evolvepdfm_(F77ThePEGInteger &, F77ThePEGDouble &, F77ThePEGDouble &, F77ThePEGDouble *); void evolvepdfphotonm_(F77ThePEGInteger &, F77ThePEGDouble &, F77ThePEGDouble &, F77ThePEGDouble *, F77ThePEGDouble &); void evolvepdfpm_(F77ThePEGInteger &, F77ThePEGDouble &, F77ThePEGDouble &, F77ThePEGDouble &, F77ThePEGInteger &, F77ThePEGDouble *); void numberpdfm_(F77ThePEGInteger &, F77ThePEGInteger &); void getnfm_(F77ThePEGInteger &, F77ThePEGInteger &); void lhaprint_(F77ThePEGInteger &); } struct TmpMaskFpuDenorm { #ifdef ThePEG_HAS_FPU_CONTROL_NEVER fpu_control_t oldcw; TmpMaskFpuDenorm() { volatile fpu_control_t cw; _FPU_GETCW(cw); oldcw = cw; cw |= (_FPU_MASK_DM); if ( cw != oldcw ) _FPU_SETCW(cw); } ~TmpMaskFpuDenorm() { volatile fpu_control_t cw; _FPU_GETCW(cw); if ( cw != oldcw ) { cw = oldcw; _FPU_SETCW(cw); } } #else #ifdef ThePEG_HAS_FENV int oldexcept; TmpMaskFpuDenorm() { oldexcept = fegetexcept(); fedisableexcept(FE_INEXACT); } ~TmpMaskFpuDenorm() { feenableexcept(oldexcept); } #else TmpMaskFpuDenorm() { Debug::maskFpuDenorm(); } #endif #endif }; #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" LHAPDF::LHAPDF() : thePType(nucleonType), thePDFName("cteq6ll.LHpdf"), theMember(0), thePhotonOption(7), enablePartonicGamma(false), theVerboseLevel(0), theMaxFlav(5), nset(-1), lastQ2(-1.0*GeV2), lastX(-1.0), lastP2(-1.0*GeV2), xMin(0.0), xMax(1.0), Q2Min(ZERO), Q2Max(Constants::MaxEnergy2) {} LHAPDF::LHAPDF(const LHAPDF & x) : PDFBase(x), thePType(x.thePType), thePDFName(x.thePDFName), theMember(x.theMember), thePhotonOption(x.thePhotonOption), enablePartonicGamma(x.enablePartonicGamma), theVerboseLevel(x.theVerboseLevel), theMaxFlav(x.theMaxFlav), nset(x.nset), lastQ2(-1.0*GeV2), lastX(-1.0), lastP2(-1.0*GeV2), xMin(x.xMin), xMax(x.xMax), Q2Min(x.Q2Min), Q2Max(x.Q2Max) {} IBPtr LHAPDF::clone() const { return new_ptr(*this); } IBPtr LHAPDF::fullclone() const { return new_ptr(*this); } void LHAPDF::doinit() { PDFBase::doinit(); setMinMax(); checkInit(); } void LHAPDF::dofinish() { PDFBase::dofinish(); } void LHAPDF::doinitrun() { PDFBase::doinitrun(); checkInit(); } void LHAPDF::throwNotInstalled() { throw LHAPDF::NotInstalled() << "Tried to initialize a LHAPDF object, " << "but the LHAPDF library was not installed" << Exception::runerror; } void LHAPDF::initpdfsetm() const { TmpMaskFpuDenorm fpumask; F77ThePEGInteger iset = nset + 1; initpdfsetbynamem_(iset, PDFName().c_str(), PDFName().length()); lastNames[nset] = PDFName(); } void LHAPDF::initpdfm() const { TmpMaskFpuDenorm fpumask; F77ThePEGInteger iset = nset + 1; F77ThePEGInteger mem = member(); initpdfm_(iset, mem); lastMem[nset] = member(); lastReset(); } void LHAPDF::lastReset() const { lastQ2 = -1.0*GeV2; lastX = -1.0; lastP2 = -1.0*GeV2; } void LHAPDF::setnset() const { TmpMaskFpuDenorm fpumask; F77ThePEGInteger i = !theVerboseLevel; lhaprint_(i); if ( nset < 0 || nset >= MaxNSet) { // First check if any other nset-value is using 'our' pdf set. for ( nset = 0; nset < min(lastNSet, MaxNSet); ++nset ) if ( lastMem[nset] == member() && lastNames[nset] == PDFName() ) return; // Otherwise book a new nset. nset = (lastNSet++)%MaxNSet; } } int LHAPDF::getMaxMember() const { TmpMaskFpuDenorm fpumask; checkInit(); F77ThePEGInteger iset = nset + 1; F77ThePEGInteger maxmem = 1; numberpdfm_(iset, maxmem); return maxmem; } int LHAPDF::getMaxFlav() const { TmpMaskFpuDenorm fpumask; checkInit(); F77ThePEGInteger iset = nset + 1; F77ThePEGInteger maxflav = 1; getnfm_(iset, maxflav); return maxflav>=0 ? min(maxflav, maxFlav()) : maxFlav(); } void LHAPDF::setMaxNSet(int n) { MaxNSet = n; lastNames.resize(MaxNSet); lastMem.resize(MaxNSet); } int LHAPDF::getMaxNSet() const { return MaxNSet; } void LHAPDF::checkInit() const { setlhaparm_("SILENT", 6); if ( nset < 0 || nset >= MaxNSet) { setnset(); initpdfsetm(); initpdfm(); } else if ( PDFName() != lastNames[nset] ) { initpdfsetm(); initpdfm(); } else if ( member() != lastMem[nset] ) { initpdfm(); } } std::string LHAPDF::getIndexPath() { // macro is passed in from -D compile flag return std::string(LHAPDF_PKGDATADIR) + "/PDFsets.index"; } bool LHAPDF::openLHAIndex(ifstream & is) { if ( is.is_open() ) is.close(); is.open( getIndexPath().c_str() ); if ( is ) return true; is.clear(); string instpath = std::string(THEPEG_PKGDATADIR) + "/PDFsets.index"; is.open( instpath.c_str() ); if ( is ) return true; is.clear(); is.open("../PDF/PDFsets.index"); if ( is ) return true; is.clear(); is.open("../../ThePEG/PDF/PDFsets.index"); if ( is ) return true; is.clear(); is.open("./PDFsets.index"); if ( is ) return true; is.clear(); return false; } bool LHAPDF::indexLine(istream & is, int & set, int & mem, string & file, int & pdftyp, int & pdfgup, int & pdfsup, double & xmin, double & xmax, double & q2min, double & q2max) const { string dummy; is >> set >> pdftyp >> pdfgup >> pdfsup >> file >> mem >> q2min >> q2max >> xmin >> xmax; return getline(is,dummy); } void LHAPDF::setMinMax() { ifstream is; if ( !openLHAIndex(is) ) Throw() << "Could not open the LHAPDF index file so min/max values of " << "x and Q^2 could not be found." << Exception::warning; int set = 0; int mem = 0; string file; double xmin = 0.0; double xmax = 0.0; double q2min = 0.0; double q2max = 0.0; int pdftyp = 0; int pdfgup = 0; int pdfsup = 0; while ( indexLine(is, set, mem, file, pdftyp, pdfgup, pdfsup, xmin, xmax, q2min, q2max) ) { if ( file == thePDFName && mem >= theMember ) { xMin = xmin; xMax = xmax; Q2Min = q2min*GeV2; Q2Max = q2max*GeV2; return; } } } void LHAPDF::setPDFNumber(int n) { ifstream is; if ( !openLHAIndex(is) ) Throw() << "Could not open the LHAPDF index file. The PDF set and member is " << "left unchanged." << Exception::warning; int set = 0; int mem = 0; string file; double xmin = 0.0; double xmax = 0.0; double q2min = 0.0; double q2max = 0.0; int pdftyp = 0; int pdfgup = 0; int pdfsup = 0; while ( indexLine(is, set, mem, file, pdftyp, pdfgup, pdfsup, xmin, xmax, q2min, q2max) ) { if ( n == set ) { thePDFName = file; theMember = mem; return; } } } int LHAPDF::getPDFNumber() const { ifstream is; if ( !openLHAIndex(is) ) Throw() << "Could not open the LHAPDF index file. The PDF set and member is " << "left unchanged." << Exception::warning; int set = 0; int mem = 0; string file; double xmin = 0.0; double xmax = 0.0; double q2min = 0.0; double q2max = 0.0; int pdftyp = 0; int pdfgup = 0; int pdfsup = 0; while ( indexLine(is, set, mem, file, pdftyp, pdfgup, pdfsup, xmin, xmax, q2min, q2max) ) if ( thePDFName == file && theMember >= mem ) return set; return 0; } void LHAPDF::setPDFLIBNumbers(int group, int num) { ifstream is; if ( !openLHAIndex(is) ) Throw() << "Could not open the LHAPDF index file. The PDF set and member is " << "left unchanged." << Exception::warning; int set = 0; int mem = 0; string file; double xmin = 0.0; double xmax = 0.0; double q2min = 0.0; double q2max = 0.0; int pdftyp = 0; int pdfgup = 0; int pdfsup = 0; while ( indexLine(is, set, mem, file, pdftyp, pdfgup, pdfsup, xmin, xmax, q2min, q2max) ) { if ( pdftyp == thePType && pdfgup == group && pdfsup == num ) { thePDFName = file; theMember = mem; return; } } } string LHAPDF::setPDFLIBNumbers(string cmd) { istringstream is(cmd); int pdfgup = 0; int pdfsup = 0; is >> pdfgup >> pdfsup; setPDFLIBNumbers(pdfgup, pdfsup); return ""; } pair LHAPDF::getPDFLIBNumbers() const { ifstream is; if ( !openLHAIndex(is) ) Throw() << "Could not open the LHAPDF index file. The PDF set and member is " << "left unchanged." << Exception::warning; int set = 0; int mem = 0; string file; double xmin = 0.0; double xmax = 0.0; double q2min = 0.0; double q2max = 0.0; int pdftyp = 0; int pdfgup = 0; int pdfsup = 0; while ( indexLine(is, set, mem, file, pdftyp, pdfgup, pdfsup, xmin, xmax, q2min, q2max) ) if ( thePDFName == file && theMember >= mem ) return make_pair(pdfgup, pdfsup); return make_pair(0, 0); } void LHAPDF::setPDFMember(int n) { theMember = n; } void LHAPDF::setPDFName(string name) { thePDFName = name; } string LHAPDF::doTest(string input) { double x = 0; Energy2 Q2 = ZERO; Energy2 P2 = ZERO; istringstream is(input); is >> x >> iunit(Q2, GeV2) >> iunit(P2, GeV2); checkUpdate(x, Q2, P2); ostringstream os; for ( int i = 0; i < 13; ++i ) os << " " << lastXF[i]; return os.str(); } void LHAPDF::checkUpdate(double x, Energy2 Q2, Energy2 P2) const { TmpMaskFpuDenorm fpumask; checkInit(); if ( x == lastX && Q2 == lastQ2 && P2 == lastP2 ) return; lastX = x; lastQ2 = Q2; lastP2 = P2; vector res(13); if ( x < xMin || x > xMax || Q2 < Q2Min || Q2 > Q2Max ) { switch ( rangeException ) { case rangeThrow: Throw() << "Momentum fraction (x=" << x << ") or scale (Q2=" << double(Q2/GeV2) << " GeV^2) was outside of limits in PDF " << name() << "." << Exception::eventerror; case rangeZero: lastXF = vector(res.begin(), res.end()); return; case rangeFreeze: lastX = x = min(max(x, xMin), xMax); lastQ2 = Q2 = min(max(Q2, Q2Min), Q2Max); } } F77ThePEGInteger iset = nset + 1; F77ThePEGDouble Q = sqrt(Q2/GeV2); F77ThePEGDouble xx = x; if ( ptype() == photonType ) { F77ThePEGDouble PP2 = P2/GeV2; F77ThePEGInteger IP2 = thePhotonOption; evolvepdfpm_(iset, xx, Q, PP2, IP2, &res[0]); } else { if(!enablePartonicGamma) evolvepdfm_(iset, xx, Q, &res[0]); else { double gamma(0.); evolvepdfphotonm_(iset, xx, Q, &res[0],gamma); res.push_back(gamma); } } lastXF = vector(res.begin(), res.end()); } bool LHAPDF::canHandleParticle(tcPDPtr particle) const { using namespace ParticleID; switch ( ptype() ) { case nucleonType: return abs(particle->id()) == pplus || abs(particle->id()) == n0; case pionType: return particle->id() == pi0 || particle->id() == ParticleID::gamma; case photonType: return particle->id() == ParticleID::gamma; default: return false; } } cPDVector LHAPDF::partons(tcPDPtr particle) const { // We assume that all standard partons can be extracted. cPDVector ret; if ( canHandleParticle(particle) ) { ret.push_back(getParticleData(ParticleID::g)); for ( int i = 1, N = getMaxFlav(); i <= N; ++i ) { ret.push_back(getParticleData(i)); ret.push_back(getParticleData(-i)); } // special if needed add photon if(enablePartonicGamma) ret.push_back(getParticleData(ParticleID::gamma)); } return ret; } namespace LHAPDFIndex { enum VectorIndices { topb = 0, botb = 1, chab = 2, strb = 3, upb = 4, dowb = 5, glu = 6, dow = 7, up = 8, str = 9, cha = 10, bot = 11, top = 12, photon = 13 }; } double LHAPDF::xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double, Energy2 particleScale) const { // Here we should return the actual density. using namespace ThePEG::ParticleID; using namespace LHAPDFIndex; checkUpdate(x, partonScale, particleScale); switch ( parton->id() ) { case t: return maxFlav() < 6? 0.0: lastXF[top]; case tbar: return maxFlav() < 6? 0.0: lastXF[topb]; case b: return maxFlav() < 5? 0.0: lastXF[bot]; case bbar: return maxFlav() < 5? 0.0: lastXF[botb]; case c: return maxFlav() < 4? 0.0: lastXF[cha]; case cbar: return maxFlav() < 4? 0.0: lastXF[chab]; case ParticleID::s: return lastXF[str]; case sbar: return lastXF[strb]; case u: switch ( particle->id() ) { case n0: return lastXF[dow]; case pbarminus: return lastXF[upb]; case nbar0: return lastXF[dowb]; case pplus: default: return lastXF[up]; } case ubar: switch ( particle->id() ) { case n0: return lastXF[dowb]; case pbarminus: return lastXF[up]; case nbar0: return lastXF[dow]; case pplus: default: return lastXF[upb]; } case d: switch ( particle->id() ) { case n0: return lastXF[up]; case pbarminus: return lastXF[dowb]; case nbar0: return lastXF[upb]; case pplus: default: return lastXF[dow]; } case dbar: switch ( particle->id() ) { case n0: return lastXF[upb]; case pbarminus: return lastXF[dow]; case nbar0: return lastXF[up]; case pplus: default: return lastXF[dowb]; } case ParticleID::g: return lastXF[glu]; case ParticleID::gamma: return enablePartonicGamma ? lastXF[photon] : 0.; } return 0.0; } double LHAPDF::xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { using Math::exp1m; return xfvx(particle, parton, partonScale, exp(-l), exp1m(-l), particleScale); } double LHAPDF::xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double, Energy2 particleScale) const { // Here we should return the actual valence density. This will only // work properly for nucleons using namespace ThePEG::ParticleID; using namespace LHAPDFIndex; checkUpdate(x, partonScale, particleScale); switch ( parton->id() ) { case t: case tbar: case b: case bbar: case c: case cbar: case ParticleID::s: case sbar: case ParticleID::gamma: return 0.0; case u: switch ( particle->id() ) { case n0: return lastXF[dow] - lastXF[dowb]; case pbarminus: return 0.0; case nbar0: return 0.0; case pplus: return lastXF[up] - lastXF[upb]; default: return 0.0; } case ubar: switch ( particle->id() ) { case n0: return 0.0; case pbarminus: return lastXF[up] - lastXF[upb]; case nbar0: return lastXF[dow] - lastXF[dowb]; case pplus: default: return 0.0; } case d: switch ( particle->id() ) { case n0: return lastXF[up] - lastXF[upb]; case pbarminus: return 0.0; case nbar0: return 0.0; case pplus: return lastXF[dow] - lastXF[dowb]; default: return 0.0; } case dbar: switch ( particle->id() ) { case n0: return 0.0; case pbarminus: return lastXF[dow] - lastXF[dowb]; case nbar0: return lastXF[up] - lastXF[upb]; case pplus: default: return 0.0; } case ParticleID::g: return 0.0; } return 0.0; } double LHAPDF::xfsx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double, Energy2 particleScale) const { // Here we should return the actual density. using namespace ThePEG::ParticleID; using namespace LHAPDFIndex; checkUpdate(x, partonScale, particleScale); switch ( parton->id() ) { case t: return maxFlav() < 6? 0.0: lastXF[top]; case tbar: return maxFlav() < 6? 0.0: lastXF[topb]; case b: return maxFlav() < 5? 0.0: lastXF[bot]; case bbar: return maxFlav() < 5? 0.0: lastXF[botb]; case c: return maxFlav() < 4? 0.0: lastXF[cha]; case cbar: return maxFlav() < 4? 0.0: lastXF[chab]; case ParticleID::s: return lastXF[str]; case sbar: return lastXF[strb]; case u: switch ( particle->id() ) { case n0: return lastXF[dowb]; case pbarminus: return lastXF[upb]; case nbar0: return lastXF[dowb]; case pplus: return lastXF[upb]; default: return lastXF[up]; } case ubar: switch ( particle->id() ) { case n0: return lastXF[dowb]; case pbarminus: return lastXF[upb]; case nbar0: return lastXF[dowb]; case pplus: return lastXF[upb]; default: return lastXF[upb]; } case d: switch ( particle->id() ) { case n0: return lastXF[upb]; case pbarminus: return lastXF[dowb]; case nbar0: return lastXF[upb]; case pplus: return lastXF[dowb]; default: return lastXF[dow]; } case dbar: switch ( particle->id() ) { case n0: return lastXF[upb]; case pbarminus: return lastXF[dowb]; case nbar0: return lastXF[upb]; case pplus: return lastXF[dowb]; default: return lastXF[dowb]; } case ParticleID::g: return lastXF[glu]; case ParticleID::gamma: return enablePartonicGamma ? lastXF[photon] : 0.; } return 0.0; } void LHAPDF::persistentOutput(PersistentOStream & os) const { os << oenum(thePType) << thePDFName << theMember << thePhotonOption << enablePartonicGamma << theVerboseLevel << theMaxFlav << xMin << xMax << ounit(Q2Min, GeV2) << ounit(Q2Max, GeV2); } void LHAPDF::persistentInput(PersistentIStream & is, int) { is >> ienum(thePType) >> thePDFName >> theMember >> thePhotonOption >> enablePartonicGamma >> theVerboseLevel >> theMaxFlav >> xMin >> xMax >> iunit(Q2Min, GeV2) >> iunit(Q2Max, GeV2); nset = -1; lastReset(); } ClassDescription LHAPDF::initLHAPDF; // Definition of the static class description member. int LHAPDF::MaxNSet = 3; int LHAPDF::lastNSet = 0; vector LHAPDF::lastNames = vector(3); vector LHAPDF::lastMem = vector(3); void LHAPDF::Init() { static ClassDocumentation documentation ("The LHAPDF class inherits from PDFBase and implements an interface " "to the LHAPDF library of parton density function parameterizations. " "This class is available even if LHAPDF was not properly installed " "when ThePEG was installed, but will then produce an error in the " "initialization. Note that the valence densities from the xfvx() and " "xfvl() function will only work properly for nucleons. All other " "particles will have zero valence densities."); static Switch interfacePType ("PType", "The type of incoming particles which can be handled by this PDF.", &LHAPDF::thePType, nucleonType, true, false); static SwitchOption interfacePTypeNucleon (interfacePType, "Nucleon", "Nucleon densities.", nucleonType); static SwitchOption interfacePTypePionOrVMD (interfacePType, "PionOrVMD", "Pion densities (can also be used for VMD photons).", pionType); static SwitchOption interfacePTypePhoton (interfacePType, "Photon", "Photon densities.", photonType); interfacePType.setHasDefault(false); static Parameter interfacePDFName ("PDFName", "The name if the PDF set to be used. Should be the full name including " "the .LHpdf or .LHgrid suffix.", &LHAPDF::thePDFName, "cteq6ll.LHpdf", true, false, &LHAPDF::setPDFName); interfacePDFName.setHasDefault(false); static Parameter interfacePDFNumber ("PDFNumber", "The number of the PDF set and member to be used.", 0, 10042, 1, 0, true, false, Interface::lowerlim, &LHAPDF::setPDFNumber, &LHAPDF::getPDFNumber, (int(LHAPDF::*)()const)(0), (int(LHAPDF::*)()const)(0), (int(LHAPDF::*)()const)(0)); interfacePDFNumber.setHasDefault(false); static Parameter interfaceMember ("Member", "The chosen member of the selected PDF set.", &LHAPDF::theMember, 0, 0, Constants::MaxInt, true, false, Interface::limited, &LHAPDF::setPDFMember, (int(LHAPDF::*)()const)(0), (int(LHAPDF::*)()const)(0), &LHAPDF::getMaxMember, (int(LHAPDF::*)()const)(0)); interfaceMember.setHasDefault(false); static Command interfacePDFLIBNumbers ("PDFLIBNumbers", "Set the PDF set and member to be used by specifying the old PDFLIB " "group and set number.", &LHAPDF::setPDFLIBNumbers, true); static Switch interfaceEnablePartonicGamma ("EnablePartonicGamma", "Enable the option of having photons as partons inside a hadron", &LHAPDF::enablePartonicGamma, false, false, false); static SwitchOption interfaceEnablePartonicGammaYes (interfaceEnablePartonicGamma, "Yes", "Include partonic photons", true); static SwitchOption interfaceEnablePartonicGammaNo (interfaceEnablePartonicGamma, "No", "Don't include them", false); static Switch interfacePhotonOption ("PhotonOption", "Different options for handling off-shell photon distributions.", &LHAPDF::thePhotonOption, 7, true, false); static SwitchOption interfacePhotonOptionDipoleDampening (interfacePhotonOption, "DipoleDampening", "Dipole dampening by integration (very time consuming).", 1); static SwitchOption interfacePhotonOptionMaxScales (interfacePhotonOption, "MaxScales", "\\f$P_0^2=\\max(Q_0^2,P^2)\\f$", 2); static SwitchOption interfacePhotonOptionAddScales (interfacePhotonOption, "AddScales", "\\f$P_0^{'2}=Q_0^2+p^2\\f$", 3); static SwitchOption interfacePhotonOptionPeffPreserve (interfacePhotonOption, "PeffPreserve", "\\f$P_{eff}\\f$ preserving momentum sum.", 4); static SwitchOption interfacePhotonOptionPintPreserve (interfacePhotonOption, "PintPreserve", "\\f$P_{int}\\f$ preserving momentum sum and average evolution range.", 5); static SwitchOption interfacePhotonOptionPeffMatch (interfacePhotonOption, "PeffMatch", "\\f$P_{eff}\\f$ matched to \\f$P_0\\f$ in \\f$P^2\\rightarrow Q^2\\f$ " "limit.", 6); static SwitchOption interfacePhotonOptionPintMatch (interfacePhotonOption, "PintMatch", "\\f$P_{int}\\f$ matched to \\f$P_0\\f$ in \\f$P^2\\rightarrow Q^2\\f$ " "limit.", 7); static Parameter interfaceMaxNSet ("MaxNSet", "The maximum number of simultaneous pdfs that can be used in LHAPDF. " "Should be set to the parameter nmxset in the " "parmsetup.inc file compiled into the installed LHAPDF " "library you are using (by default this is set to 3)", 0, 3, 1, 0, true, false, Interface::lowerlim, &LHAPDF::setMaxNSet, &LHAPDF::getMaxNSet, (int(LHAPDF::*)()const)(0), (int(LHAPDF::*)()const)(0), (int(LHAPDF::*)()const)(0)); static Command interfaceTest ("Test", "Write out the values of the chosen PDF set using the x, Q2 and P2 " "parameters supplied.", &LHAPDF::doTest, true); static Switch interfaceVerboseLevel ("VerboseLevel", "The verbosity of the output from the LHAPDF library.", &LHAPDF::theVerboseLevel, 0, true, false); static SwitchOption interfaceVerboseLevelSilent (interfaceVerboseLevel, "Silent", "Trying to inhibit all output from the LHAPDF library " "(unfortunately not always possible).", 0); static SwitchOption interfaceVerboseLevelNormal (interfaceVerboseLevel, "Normal", "Normal output from the LHAPDF library " "(unfortunately to the standard output).", 1); interfaceVerboseLevel.setHasDefault(false); static Parameter interfaceMaxFlav ("MaxFlav", "The maximum number of flavours for which non-zero densities are " "reported. The actual number of flavours may be less depending on " "the chosen PDF set.", &LHAPDF::theMaxFlav, 5, 3, 0, true, false, Interface::lowerlim); interfacePType.rank(10); interfacePDFName.rank(9); interfaceMember.rank(8); } thepeg-1.8.0.orig/PDF/SoftRemnantHandler.cc0000644000175000017500000001054511747772425016632 0ustar sunsun// -*- C++ -*- // // SoftRemnantHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SoftRemnantHandler class. // #include "SoftRemnantHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/Direction.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/RemnantDecayer.h" #include "ThePEG/PDT/RemnantData.h" #include "ThePEG/EventRecord/RemnantParticle.h" using namespace ThePEG; IBPtr SoftRemnantHandler::clone() const { return new_ptr(*this); } IBPtr SoftRemnantHandler::fullclone() const { return new_ptr(*this); } bool SoftRemnantHandler:: canHandle(tcPDPtr particle, const cPDVector & partons) const { if ( !remdec ) return false; for ( int i = 0, N = partons.size(); i < N; ++i ) if ( !remdec->canHandle(particle, partons[i]) ) return false; return true; } Lorentz5Momentum SoftRemnantHandler:: generate(PartonBinInstance & pb, const double *, Energy2, const LorentzMomentum & parent, bool fixedPartonMomentum) const { if ( !fixedPartonMomentum ) { LorentzMomentum p = lightCone((parent.rho() + parent.e())*pb.xi(), Energy()); p.rotateY(parent.theta()); p.rotateZ(parent.phi()); pb.parton()->setMomentum(p); } RemPPtr rem = new_ptr(RemnantParticle(*pb.particle(), remdec, pb.parton())); if ( rem->extracted().empty() ) pb.remnantWeight(0.0); pb.remnants(PVector(1, rem)); return pb.parton()->momentum(); } bool SoftRemnantHandler:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double, Energy2, const LorentzMomentum &, const PVector &) const { // First find the old remnant. RemPPtr rem; for ( int i = 0, N = pb.particle()->children().size(); i < N; ++i ) if ( dynamic_ptr_cast(pb.particle()->children()[i]) ) rem = dynamic_ptr_cast(pb.particle()->children()[i]); if ( !rem ) return false; // LorentzMomentum p(0.0, 0.0, parent.rho(), parent.e()); // pb.parton()->setMomentum // (lightCone(p.plus()*pb.x(), ZERO, ZERO, ZERO)); // pb.parton()->rotateY(parent.theta()); // pb.parton()->rotateZ(parent.phi()); rem = new_ptr(*rem); if ( !rem->reextract(oldp, newp) ) return false; pb.remnants(PVector(1, rem)); return true; } Lorentz5Momentum SoftRemnantHandler:: generate(PartonBinInstance & pb, const double *, Energy2, Energy2, const LorentzMomentum & parent, bool fixedPartonMomentum) const { return generate(pb, 0, ZERO, parent, fixedPartonMomentum); } bool SoftRemnantHandler:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double l, Energy2 scale, Energy2, const LorentzMomentum & p, const PVector & prev) const { return recreateRemnants(pb, oldp, newp, l, scale, p, prev); } void SoftRemnantHandler::persistentOutput(PersistentOStream & os) const { os << remdec; } void SoftRemnantHandler::persistentInput(PersistentIStream & is, int) { is >> remdec; } void SoftRemnantHandler::setDecayer(RemDecPtr rd) { remdec = rd; isMultiCapable = rd->multiCapable(); } ClassDescription SoftRemnantHandler::initSoftRemnantHandler; void SoftRemnantHandler::Init() { static ClassDocumentation documentation ("SoftRemnantHandler inherits from the RemnantHandler and implements " "the generation of a single collinear RemnantParticle when anything " "is extracted from anything else. Such a RemnantParticle needs to be " "decayed by a special RemnantDecayer and the SoftRemnantHandler " "needs to be assign such a decayer to work properly."); static Reference interfaceRemnantDecayer ("RemnantDecayer", "A RemnantDecayer object which is able to decay the produced " "RemnantParticle objects.", &SoftRemnantHandler::remdec, false, false, true, false, true, &SoftRemnantHandler::setDecayer); } thepeg-1.8.0.orig/PDF/PartonExtractor.xh0000644000175000017500000000150011747772425016254 0ustar sunsun// -*- C++ -*- // // PartonExtractor.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PartonExtractor_XH #define ThePEG_PartonExtractor_XH // // This is the declarations of the exception classes used by the // PartonExtractor class. // #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by PartonExtractor if the colour connections to the remnants fails. */ struct RemColException: public Exception { /** Standard constructor. */ RemColException(const PartonExtractor &); }; /** @endcond */ } #endif /* ThePEG_PartonExtractor_XH */ thepeg-1.8.0.orig/PDF/NoPDF.h0000644000175000017500000000570511747772425013646 0ustar sunsun// -*- C++ -*- // // NoPDF.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_NoPDF_H #define ThePEG_NoPDF_H // This is the declaration of the NoPDF class. #include "ThePEG/PDF/PDFBase.h" // #include "NoPDF.fh" // #include "NoPDF.xh" namespace ThePEG { /** * NoPDF inherits from PDFBase and represents particles without * sub-structure. The only parton which can be extracted is the * incoming particle itself with a momentum distribution which is a * delta-function at \f$x=1\f$ (\f$l=0\f$). * * @see PDFBase * @see NoRemnants * */ class NoPDF: public PDFBase { public: /** @name Virtual functions mandated by the PDFBase base class. */ //@{ /** * Return true because we can handle any particle. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return true if canHandleParticle() and if the corresponding * method for remnantHandler() returns true. */ virtual bool canHandle(tcPDPtr particle) const; /** * Return true if this PDF has a pole at $x=1$ for the given \a * particle and \a parton. This default version of the function * returns true if \a particle and \a parton is the same. */ virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const; /** * Simply return the particle. */ virtual cPDVector partons(tcPDPtr p) const; /** * The delta function. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initNoPDF; /** * Private and non-existent assignment operator. */ NoPDF & operator=(const NoPDF &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of NoPDF. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of NoPDF. */ typedef PDFBase NthBase; }; /** This template specialization informs ThePEG about the name of the * NoPDF class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::NoPDF"; } }; /** @endcond */ } #endif /* ThePEG_NoPDF_H */ thepeg-1.8.0.orig/PDF/PartonBinInstance.cc0000644000175000017500000001147111747772425016454 0ustar sunsun// -*- C++ -*- // // PartonBinInstance.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PartonBinInstance class. // #include "PartonBinInstance.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; PartonBinInstance::PartonBinInstance() : theJacobian(1.0), theXi(-1.0), theEps(-1.0), theLi(-1.0), theX(-1.0), theL(-1.0), theScale(ZERO), theRemnantWeight(0.0) {} PartonBinInstance::PartonBinInstance(const PartonBinInstance & x) : Base(x), theBin(x.theBin), theBins(x.theBins), theIncoming(x.theIncoming), theJacobian(x.theJacobian), theParticle(x.theParticle), theParton(x.theParton), thePartons(x.thePartons), theXi(x.theXi), theEps(x.theEps), theLi(x.theLi), theX(x.theX), theL(x.theL), theScale(x.theScale), theKT(x.theKT), theRemnantWeight(x.theRemnantWeight), theRemnants(x.theRemnants), theRemInfo(x.theRemInfo) {} PartonBinInstance::PartonBinInstance(tcPBPtr pb, tPBIPtr pbi) : theBin(pb), theJacobian(1.0), theXi(-1.0), theEps(-1.0), theLi(-1.0), theX(-1.0), theL(-1.0), theScale(ZERO), theRemnantWeight(0.0) { if ( pbi ) theIncoming = pbi; else if ( bin()->incoming() ) theIncoming = new_ptr(PartonBinInstance(bin()->incoming())); } PartonBinInstance::PartonBinInstance(tPPtr part, tcPBPtr pb, Energy2 scale) : theBin(pb), theJacobian(1.0), theParton(part), theXi(1.0), theEps(0.0), theLi(0.0), theX(1.0), theL(0.0), theScale(scale), theRemnantWeight(1.0) { if ( !pb->incoming() || part->parents().empty() ) return; particle(parton()->parents()[0]); Energy2 P2 = max(-particle()->momentum().m2(), ZERO); theXi = parton()->momentum().dirPlus()/particle()->momentum().dirPlus(); theLi = -log(xi()); theIncoming = new_ptr(PartonBinInstance(particle(), pb->incoming(), P2)); theX = xi()*incoming()->x(); theL = li() + incoming()->li(); theEps = Math::exp1m(-li()); } PartonBinInstance::PartonBinInstance(tPPtr Part, tPPtr part, tcPBPtr pb, Energy2 scale) : theBin(pb), theJacobian(1.0), theParton(part), theXi(1.0), theEps(0.0), theLi(0.0), theX(1.0), theL(0.0), theScale(scale), theRemnantWeight(1.0) { if ( !pb->incoming() ) return; particle(Part); Energy2 P2 = max(-particle()->momentum().m2(), ZERO); theXi = parton()->momentum().dirPlus()/particle()->momentum().dirPlus(); theLi = -log(xi()); theIncoming = new_ptr(PartonBinInstance(particle(), pb->incoming(), P2)); theX = xi()*incoming()->x(); theL = li() + incoming()->li(); theEps = Math::exp1m(-li()); } PartonBinInstance::~PartonBinInstance() {} tPBIPtr PartonBinInstance::getFirst() { return incoming()? incoming()->getFirst(): tPBIPtr(this); } // TAKE AWAY ? void PartonBinInstance::reset(double lx, Energy2 Q2) { l(lx); li(lx); scale(Q2); particle(tPPtr()); parton(tPPtr()); theRemnants.clear(); thePartons.clear(); remnantWeight(1.0); } void PartonBinInstance::prepare() { li(-1.0); l(0.0); if ( !incoming() ) return; // li(-1.0); // l(-1.0); reset(-1.0, ZERO); incoming()->prepare(); } bool PartonBinInstance::hasPoleIn1() const { return ( !incoming() || incoming()->hasPoleIn1()) && (!pdf() || pdf()->hasPoleIn1(particleData(), partonData()) ); } // TAKE AWAY ? void PartonBinInstance::generate(const double * r) { scale(ZERO); if ( !incoming() ) return; if ( li() >= 0 ) return; li(0.0); jacobian(1.0); remnantWeight(1.0); if ( bin()->pdfDim() ) li(pdf()->flattenL(particleData(), partonData(), bin()->cuts(), *r++, theJacobian)); if ( bin()->pdfDim() > 1 ) scale(pdf()->flattenScale(particleData(), partonData(), bin()->cuts(), li(), *r++, theJacobian) *bin()->cuts().scaleMaxL(li())); incoming()->generate(r); l(li() + incoming()->l()); } void PartonBinInstance::persistentOutput(PersistentOStream & os) const { os << theBin << theBins << theIncoming << theJacobian << theParticle << theParton << thePartons << theXi << theEps << theLi << theX << theL << ounit(theScale, GeV2) << ounit(theKT, GeV) << theRemnantWeight << theRemnants; } void PartonBinInstance::persistentInput(PersistentIStream & is, int) { is >> theBin >> theBins >> theIncoming >> theJacobian >> theParticle >> theParton >> thePartons >> theXi >> theEps >> theLi >> theX >> theL >> iunit(theScale, GeV2) >> iunit(theKT, GeV) >> theRemnantWeight >> theRemnants; theRemInfo = RemIPtr(); } ClassDescription PartonBinInstance::initPartonBinInstance; // Definition of the static class description member. void PartonBinInstance::Init() { } thepeg-1.8.0.orig/PDF/WeizsackerWilliamsPDF.cc0000644000175000017500000000732511747772425017241 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the WeizsackerWilliamsPDF class. // #include "WeizsackerWilliamsPDF.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Repository/EventGenerator.h" using namespace ThePEG; WeizsackerWilliamsPDF::WeizsackerWilliamsPDF() : _q2min(ZERO), _q2max(4.*GeV2), _a(0.8) {} bool WeizsackerWilliamsPDF::canHandleParticle(tcPDPtr particle) const { return ( abs(particle->id()) == ParticleID::eminus || abs(particle->id()) == ParticleID::muminus ); } cPDVector WeizsackerWilliamsPDF::partons(tcPDPtr) const { // only photon return cPDVector(1,getParticleData(ParticleID::gamma)); } double WeizsackerWilliamsPDF::xfl(tcPDPtr, tcPDPtr parton, Energy2, double l, Energy2 ) const { if(parton->id()!=ParticleID::gamma) return 0.; double x(exp(-l)); // remember this is x fx so no x in the denominator!! return 0.5*SM().alphaEM()/Constants::pi*(1.+sqr(1.-x)); } double WeizsackerWilliamsPDF::xfvl(tcPDPtr, tcPDPtr, Energy2, double, Energy2) const { // valence density is zero return 0.0; } ClassDescription WeizsackerWilliamsPDF::initWeizsackerWilliamsPDF; // Definition of the static class description member. void WeizsackerWilliamsPDF::Init() { static ClassDocumentation documentation ("The WeizsackerWilliamsPDF provides the PDF for a photon inside" " an incoming lepton in the Weisszacker-Williams approximation"); static Parameter interfaceQ2Min ("Q2Min", "Minimum value of the magnitude of Q^2 for the photon", &WeizsackerWilliamsPDF::_q2min, GeV2, ZERO, ZERO, 100.0*GeV2, false, false, Interface::limited); static Parameter interfaceQ2Max ("Q2Max", "Maximum value of the magnitude of Q^2 for the photon", &WeizsackerWilliamsPDF::_q2max, GeV2, 4.0*GeV2, ZERO, 100.0*GeV2, false, false, Interface::limited); static Parameter interfaceJacobianParameter ("JacobianParameter", "Relative contribution for the 1/x and flat term in sampling x ", &WeizsackerWilliamsPDF::_a, 0.8, 0.0, 1.0, false, false, Interface::limited); } double WeizsackerWilliamsPDF:: flattenScale(tcPDPtr a, tcPDPtr, const PDFCuts & c, double l, double z, double & jacobian) const { double x = exp(-l); Energy2 qqmax = min(_q2max,0.25*sqr(x)*c.sMax()); Energy2 qqmin = max(_q2min,sqr(x*a->mass())/(1.-x)); if(qqmin>=qqmax) { jacobian = 0.; return 0.; } double low = log(qqmin/c.scaleMaxL(l)); double upp = log(qqmax/c.scaleMaxL(l)); double ret = exp(low+z*(upp-low)); // jacobian factor jacobian *= log(qqmax/qqmin); return ret; } double WeizsackerWilliamsPDF::flattenL(tcPDPtr, tcPDPtr, const PDFCuts & c, double z, double & jacobian) const { double xmin = exp(-c.lMax()); double xmax = exp(-c.lMin()); double x; if(z<=_a) { z /=_a; x = exp(-(c.lMin() + z*(c.lMax() - c.lMin()))); } else { z = (z-_a)/(1.-_a); x = xmin+z*(xmax-xmin); } jacobian /= _a/(c.lMax() - c.lMin()) + (1.-_a)*x/(xmax-xmin); return -log(x); } void WeizsackerWilliamsPDF::persistentOutput(PersistentOStream & os) const { os << ounit(_q2min,GeV2) << ounit(_q2max,GeV2) << _a; } void WeizsackerWilliamsPDF::persistentInput(PersistentIStream & is, int) { is >> iunit(_q2min,GeV2) >> iunit(_q2max,GeV2) >> _a; } thepeg-1.8.0.orig/PDF/PartonExtractor.cc0000644000175000017500000005324311747772425016235 0ustar sunsun// -*- C++ -*- // // PartonExtractor.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PartonExtractor class. // #include "PartonExtractor.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/NoPDF.h" #include "ThePEG/PDF/RemnantHandler.h" #include "ThePEG/PDF/BeamParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/PDT/EnumParticles.h" using namespace ThePEG; PartonExtractor::PartonExtractor() : theMaxTries(100), flatSHatY(false) {} PartonExtractor::~PartonExtractor() {} IBPtr PartonExtractor::clone() const { return new_ptr(*this); } IBPtr PartonExtractor::fullclone() const { return new_ptr(*this); } PartonPairVec PartonExtractor:: getPartons(Energy maxEnergy, const cPDPair & incoming, const Cuts & kc) const { PartonPairVec result; PartonVector first; PDFCuts cuts1(kc, true, maxEnergy); PBPtr p1 = new_ptr(PartonBin(PDPtr(), PBPtr(), incoming.first, PDFPtr(), cuts1)); addPartons(p1, cuts1, theFirstPDF, first); PartonVector second; PDFCuts cuts2(kc, false, maxEnergy); PBPtr p2 = new_ptr(PartonBin(PDPtr(), PBPtr(), incoming.second, PDFPtr(), cuts2)); addPartons(p2, cuts2, theSecondPDF, second); for ( PartonVector::iterator it1 = first.begin(); it1 != first.end(); ++it1 ) for ( PartonVector::iterator it2 = second.begin(); it2 != second.end(); ++it2 ) result.push_back(PBPair(*it1, *it2)); // We add the original parton bins as well to avoid them being // deleted. result.push_back(PBPair(p1, p2)); return result; } void PartonExtractor:: addPartons(tPBPtr incoming, const PDFCuts & cuts, tcPDFPtr pdf, PartonVector & pbins) const { if(!pdf) pdf = getPDF(incoming->parton()); if ( dynamic_ptr_cast::tcp>(pdf) || incoming->parton() == incoming->particle() ) { pbins.push_back(incoming); return; } cPDVector partons = pdf->partons(incoming->parton()); for ( int i = 0, N = partons.size(); i < N; ++i ) { PBPtr pb = new_ptr(PartonBin(incoming->parton(), incoming, partons[i], pdf, cuts)); incoming->addOutgoing(pb); addPartons(pb, cuts, PDFPtr(), pbins); } } tcPDFPtr PartonExtractor::getPDF(tcPDPtr particle) const { for ( vector::const_iterator it = theSpecialDensities.begin(); it != theSpecialDensities.end(); ++it ) if ( (**it).canHandle(particle) ) return *it; Ptr::tcp p = dynamic_ptr_cast::tcp>(particle); if ( !p || !p->pdf() ) return noPDF(); return p->pdf(); } void PartonExtractor::select(tXCombPtr newXComb) { theLastXComb = newXComb; } tPBIPtr PartonExtractor::partonBinInstance(tcPPtr p) const { PartonBinInstanceMap::const_iterator it = partonBinInstances.find(p); return it == partonBinInstances.end()? PBIPtr(): it->second; } void PartonExtractor:: colourConnect(tPPtr particle, tPPtr parton, const tPVector & remnants) const { // Sorry cannot handle coloured resolved particles. if ( particle->coloured() ) throw RemColException(*this); // First connect the loose colour line from the extacted parton. if ( parton->hasColour() ) findConnect(parton->colourLine(), parton, true, remnants.rbegin(), remnants.rend()); // First connect the loose anti-colour line from the extacted parton. if ( parton->hasAntiColour() ) findConnect(parton->antiColourLine(), parton, false, remnants.begin(), remnants.end()); // Go through the rest of the remnants and create new colour lines // if needed. Go through it forwards and backwards to catch possible // inconsistencies. for ( tPVector::const_iterator it = remnants.begin(); it != remnants.end(); ++it ) { if ( (**it).hasAntiColour() && !(**it).antiColourLine() ) findConnect(ColourLine::create(*it, true), *it, false, it + 1, remnants.end()); } for ( tPVector::const_reverse_iterator it = remnants.rbegin(); it != remnants.rend(); ++it ) { if ( (**it).hasColour() && !(**it).colourLine() ) findConnect(ColourLine::create(*it), *it, true, it + 1, remnants.rend()); } } Energy2 PartonExtractor::newScale() { return lastScale(); } pair PartonExtractor::nDims(const PBPair & pbins) { // if photon from a lepton or proton generate scale bool genscale[2]={false,false}; for(unsigned int ix=0;ix<2;++ix) { PBPtr bin = ix==0 ? pbins.first : pbins.second; if (!bin || !bin->particle() || !bin->parton()) continue; if(bin->pdf()->partons(bin->particle()).size()==1 && bin->particle()->id()!=bin->parton()->id()) genscale[ix]=true; } return make_pair(pbins.first ->nDim(genscale[0]), pbins.second->nDim(genscale[1])); } void PartonExtractor::prepare(const PBIPair & pbins) { partonBinInstances.clear(); pbins.first->prepare(); pbins.second->prepare(); } bool PartonExtractor:: generateL(const PBIPair & pbins, const double * r1, const double * r2) { Direction<0> dir(true); generateL(*pbins.first, r1); dir.reverse(); generateL(*pbins.second, r2); if ( !flatSHatY || pbins.first->hasPoleIn1() || pbins.second->hasPoleIn1() ) return true; Energy2 shmax = lastCuts().sHatMax(); Energy2 shmin = lastCuts().sHatMin(); Energy2 sh = shmin*pow(shmax/shmin, *r1); double ymax = lastCuts().yHatMax(); double ymin = lastCuts().yHatMin(); double km = log(shmax/shmin); ymax = min(ymax, log(lastCuts().x1Max()*sqrt(lastS()/sh))); ymin = max(ymin, -log(lastCuts().x2Max()*sqrt(lastS()/sh))); double y = ymin + (*r2)*(ymax - ymin); double l1 = 0.5*log(lastS()/sh) - y; double l2 = 0.5*log(lastS()/sh) + y; pbins.first->li(l1 - pbins.first->l() + pbins.first->li()); pbins.first->l(l1); pbins.first->jacobian(km*(ymax - ymin)); pbins.second->li(l2 - pbins.second->l() + pbins.second->li()); pbins.second->l(l2); pbins.second->jacobian(1.0); return ( pbins.first->li() >= 0.0 && pbins.second->li() >= 0.0 ); } Energy2 PartonExtractor:: generateSHat(Energy2, const PBIPair & pbins, const double * r1, const double * r2, bool haveMEPartons) { Direction<0> dir(true); if(pbins.first->bin()->pdfDim()<=1) pbins.first->scale(-lastScale()); if ( !generate(*pbins.first, r1, lastSHat(), pbins.first->getFirst()->parton()->momentum(), haveMEPartons) ) return -1.0*GeV2; dir.reverse(); if(pbins.second->bin()->pdfDim()<=1) pbins.second->scale(-lastScale()); if ( !generate(*pbins.second, r2, lastSHat(), pbins.second->getFirst()->parton()->momentum(), haveMEPartons) ) return -1.0*GeV2; return (pbins.first->parton()->momentum() + pbins.second->parton()->momentum()).m2(); } void PartonExtractor:: generateL(PartonBinInstance & pb, const double * r) { if ( !pb.incoming() ) return; pb.parton(pb.partonData()->produceParticle(Lorentz5Momentum())); generateL(*pb.incoming(), r + pb.bin()->pdfDim() + pb.bin()->remDim()); pb.particle(pb.incoming()->parton()); if ( pb.li() >= 0 ) return; double jac = 1.0; if ( pb.bin()->pdfDim() ) pb.li(pb.pdf()->flattenL(pb.particleData(), pb.partonData(), pb.bin()->cuts(), *r++, jac)); pb.scale(-1.0*GeV2); if ( pb.bin()->pdfDim() > 1 ) pb.scale(pb.pdf()->flattenScale(pb.particleData(), pb.partonData(), pb.bin()->cuts(), pb.li(), *r++, jac) *pb.bin()->cuts().scaleMaxL(pb.li())); pb.jacobian(jac); pb.l(pb.incoming()->l() + pb.li()); } bool PartonExtractor:: generate(PartonBinInstance & pb, const double * r, Energy2 shat, const Lorentz5Momentum & first, bool haveMEPartons) { if ( !pb.incoming() ) return true; if ( !generate(*pb.incoming(), r + pb.bin()->pdfDim() + pb.bin()->remDim(), shat/pb.xi(), first) ) return false; pb.remnantWeight(1.0); pb.parton()->setMomentum (pb.remnantHandler()->generate(pb, r + pb.bin()->pdfDim(), pb.scale(), shat, pb.particle()->momentum(),haveMEPartons)); if ( pb.remnantWeight() <= 0.0 ) return false; partonBinInstances[pb.parton()] = &pb; return true; } void PartonExtractor:: constructRemnants(const PBIPair & pbins, tSubProPtr sub, tStepPtr step) const { partonBinInstances.clear(); LorentzMomentum k1 = pbins.first->parton()->momentum(); LorentzMomentum k2 = pbins.second->parton()->momentum(); LorentzMomentum Ph = k1 + k2; LorentzMomentum Phold = Ph; LorentzRotation Rh = Utilities::getBoostToCM(make_pair(k1, k2)); bool pickside = rndbool(); if ( pickside && pbins.first->incoming() ) { Direction<0> dir(true); constructRemnants(*pbins.first, Ph, k2); construct(*pbins.first, step, false); } if ( pbins.second->incoming() ) { Direction<0> dir(false); constructRemnants(*pbins.second, Ph, pbins.first->parton()->momentum()); construct(*pbins.second, step, false); } if ( (!pickside) && pbins.first->incoming() ) { Direction<0> dir(true); constructRemnants(*pbins.first, Ph, pbins.second->parton()->momentum()); construct(*pbins.first, step, false); } // LorentzRotation rot = Utilities::transformToMomentum(Phold, Ph); k1 = pbins.first->parton()->momentum(); k2 = pbins.second->parton()->momentum(); LorentzRotation rot = Utilities::getBoostFromCM(make_pair(k1, k2))*Rh; Utilities::transform(sub->outgoing(), rot); Utilities::transform(sub->intermediates(), rot); Ph = k1 + k2; if ( abs(Ph.m2() - Phold.m2())/Phold.m2() > 0.000001 ) cerr << Ph.m2()/GeV2 << " was (" << Phold.m2()/GeV2 << ")" << endl; } void PartonExtractor:: constructRemnants(PartonBinInstance & pb, LorentzMomentum & Ph, const LorentzMomentum & k) const { LorentzMomentum P = pb.particle()->momentum(); DVector r = UseRandom::rndvec(pb.bin()->remDim()); if ( r.empty() ) r.push_back(0.0); pb.parton()->setMomentum(pb.remnantHandler()-> generate(pb, &r[0], pb.scale(), Ph.m2(), P)); if ( pb.remnantWeight() <= 0.0 ) throw Veto(); pb.remnantHandler()->boostRemnants(pb); LorentzMomentum Pr = Utilities::sumMomentum(pb.remnants()); transformRemnants(Ph, Pr, k, pb.particle()->momentum()); pb.parton()->setMomentum(pb.particle()->momentum() - Pr); try { Utilities::setMomentum(pb.remnants().begin(), pb.remnants().end(), static_cast(Pr)); } catch ( ThePEG::Exception & e) { throw e; } catch ( ThePEG::Veto ) { throw; } catch ( std::exception & e ) { throw Exception() << "Caught non-ThePEG exception " << e.what() << "in " << "PartonExtractor::constructRemnants" << Exception::eventerror; } partonBinInstances[pb.parton()] = &pb; if ( !pb.incoming()->incoming() ) return; // We get here if we need to construct remnants recursively. LorentzMomentum Phnew = Ph + Pr; constructRemnants(*pb.incoming(), Phnew, k); LorentzRotation rot = Utilities::transformToMomentum(Ph + Pr, Phnew); Utilities::transform(pb.remnants(), rot); Ph.transform(rot); } LorentzRotation PartonExtractor:: boostRemnants(PBIPair & bins, LorentzMomentum k1, LorentzMomentum k2, bool side1, bool side2) const { if ( !side1 && !side2 ) return LorentzRotation(); LorentzMomentum P1 = bins.first? LorentzMomentum(bins.first->parton()->momentum()): k1; LorentzMomentum Pr1; if ( side1 ) { P1 = bins.first->particle()->momentum(); Pr1 = Utilities::sumMomentum(bins.first->remnants()); } LorentzMomentum P2 = bins.second? LorentzMomentum(bins.second->parton()->momentum()): k2; LorentzMomentum Pr2; if ( side2 ) { P2 = bins.second->particle()->momentum(); Pr2 = Utilities::sumMomentum(bins.second->remnants()); } LorentzRotation Rh = Utilities::getBoostToCM(make_pair(k1, k2)); LorentzMomentum Ph = k1 + k2; // LorentzMomentum Phold = Ph; bool otherside = rndbool(); if ( otherside && side2 ){ Direction<0> dir(false); transformRemnants(Ph, Pr2, k1, P2); k2 = P2 - Pr2; } if ( side1 ){ Direction<0> dir(true); transformRemnants(Ph, Pr1, k2, P1); k1 = P1 - Pr1; } if ( side2 && !otherside ) { Direction<0> dir(false); transformRemnants(Ph, Pr2, k1, P2); k2 = P2 - Pr2; } if ( bins.first ) { if ( bins.first->remnants().size() == 1 ) bins.first->remnants()[0]->setMomentum(Pr1); else Utilities::setMomentum(bins.first->remnants().begin(), bins.first->remnants().end(), static_cast(Pr1)); bins.first->parton()->setMomentum(k1); } if ( bins.second ) { if ( bins.second->remnants().size() == 1 ) bins.second->remnants()[0]->setMomentum(Pr2); else Utilities::setMomentum(bins.second->remnants().begin(), bins.second->remnants().end(), static_cast(Pr2)); bins.second->parton()->setMomentum(k2); } Rh.transform(Utilities::getBoostFromCM(make_pair(k1, k2))); // LorentzMomentum phh = Rh*Phold; return Rh; // return Utilities::transformToMomentum(Phold, Ph); } void PartonExtractor:: transformRemnants(LorentzMomentum & Ph, LorentzMomentum & Pr, const LorentzMomentum & k, const LorentzMomentum & P) const { // don't do this for very soft remnants, as // we may run into numerical troubles; threshold // needs to become a parameter at some point if ( Pr.vect().mag2()/k.vect().mag2() < 1e-10 && sqr(Pr.e()/k.e()) < 1e-10 ) return; TransverseMomentum pt = Pr; try { if ( Direction<0>::pos() ) SimplePhaseSpace::CMS(Pr, Ph, (P + k).m2(), 1.0, 0.0); else SimplePhaseSpace::CMS(Ph, Pr, (k + P).m2(), 1.0, 0.0); LorentzRotation rpt; if ( sqr(Pr.z()) > ZERO ) rpt.rotateY(asin(pt.pt()/Pr.z())); rpt.rotateZ(pt.phi()); rpt = Direction<0>::pos()? Utilities::getBoostFromCM(make_pair(P, k))*rpt: Utilities::getBoostFromCM(make_pair(k, P))*rpt; Ph.transform(rpt); Pr.transform(rpt); } catch ( ImpossibleKinematics ) {} } double PartonExtractor::fullFn(const PBIPair & pbins, Energy2 scale, pair noLastPDF) { if(pbins.first->bin()->pdfDim()<=1) pbins.first->scale(scale); if(pbins.second->bin()->pdfDim()<=1) pbins.second->scale(scale); return fullFn(*pbins.first,noLastPDF.first)*fullFn(*pbins.second,noLastPDF.second); } double PartonExtractor::fullFn(const PartonBinInstance & pb, bool noLastPDF) { if ( !pb.incoming() ) return 1.0; if (noLastPDF) return fullFn(*pb.incoming(),false) * pb.jacobian() * pb.remnantWeight() * exp(-pb.li()); return fullFn(*pb.incoming(),false) * pb.jacobian() * pb.remnantWeight() * pb.pdf()->xfl(pb.particleData(), pb.partonData(), pb.scale(), pb.li(), pb.incoming()->scale()); } void PartonExtractor:: construct(const PBIPair & pbins, tStepPtr step) const { // if a long chain we need to break some mother/child relationships if(pbins.first->incoming()) { if(pbins.first->incoming()->incoming()) { if(!pbins.first->parton()->parents().empty()) { tParticleVector parents=pbins.first->parton()->parents(); tPPtr parton = pbins.first->parton(); for(unsigned int ix=0;ixabandonChild(parton); } } } if(pbins.second->incoming()) { if(pbins.second->incoming()->incoming()) { if(!pbins.second->parton()->parents().empty()) { tParticleVector parents=pbins.second->parton()->parents(); tPPtr parton = pbins.second->parton(); for(unsigned int ix=0;ixabandonChild(parton); } } } Direction<0> dir(true); construct(*pbins.first, step); dir.reverse(); construct(*pbins.second, step); } void PartonExtractor:: construct(PartonBinInstance & pb, tStepPtr step, bool boost) const { if ( !pb.incoming() ) return; if ( boost ) pb.remnantHandler()->boostRemnants(pb); if ( pb.incoming()->incoming() ) { step->insertIntermediate(pb.particle(),pb.incoming()->particle(),pb.parton()); } tPVector rem(pb.remnants().begin(), pb.remnants().end()); if ( !step->addDecayProduct(pb.particle(), rem.begin(), rem.end(), false) ) {} colourConnect(pb.particle(), pb.parton(), rem); construct(*pb.incoming(), step); } PBIPair PartonExtractor::newRemnants(tPPair oldp, tPPair newp, tStepPtr step) { PBIPair pb; Direction<0> dir(true); pb.first = newRemnants(partonBinInstance(oldp.first), newp.first, newp.second->momentum()); dir.reverse(); pb.second = newRemnants(partonBinInstance(oldp.second), newp.second, newp.first->momentum()); addNewRemnants(partonBinInstance(oldp.first), pb.first, step); addNewRemnants(partonBinInstance(oldp.second), pb.second, step); return pb; } PBIPtr PartonExtractor:: newRemnants(tPBIPtr oldpb, tPPtr newp, const LorentzMomentum & k) { if ( ! oldpb || !oldpb->incoming() ) return oldpb; Energy2 shat = (k + newp->momentum()).m2(); // Loop over all possible PartonBin sisters to find the one // corresponding to the newly extracted parton. const PartonBin::PBVector & sisters = oldpb->incoming()->bin()->outgoing(); for ( int i = 0, N = sisters.size(); i < N; ++i ) if ( sisters[i]->parton() == newp->dataPtr() ) { // Setup necessary info in new PartonBinInstance object. PBIPtr newpb = new_ptr(PartonBinInstance(sisters[i], oldpb->incoming())); newpb->particle(oldpb->particle()); newpb->parton(newp); newpb->li(log(oldpb->particle()->momentum().dirPlus()/ newp->momentum().dirPlus())); newpb->l(oldpb->l() - oldpb->li() + newpb->li()); Energy2 sc = -newp->scale(); newpb->scale(newp->scale()); if ( oldpb->incoming()->incoming() ) sc = -newpb->particle()->momentum().m2(); // Now we can construct the new remnants. newpb->remnantWeight(1.0); if ( !newpb->remnantHandler()-> recreateRemnants(*newpb, oldpb->parton(), newp, newpb->li(), sc, shat, newpb->particle()->momentum()) ) throw Veto(); if ( newpb->remnantWeight() <= 0.0 ) throw Veto(); return newpb; } throw Veto(); } void PartonExtractor:: addNewRemnants(tPBIPtr oldpb, tPBIPtr newpb, tStepPtr step) { if ( oldpb == newpb ) return; if ( oldpb->parton() != newpb->parton() ) { step->removeDecayProduct(newpb->particle(), oldpb->parton()); if ( !step->addDecayProduct(newpb->particle(), newpb->parton()) ) throw Veto(); } tPVector rem(newpb->remnants().begin(), newpb->remnants().end()); colourConnect(newpb->particle(), newpb->parton(), rem); partonBinInstances[newpb->parton()] = newpb; if ( !step->addDecayProduct(oldpb->remnants().begin(), oldpb->remnants().end(), rem.begin(), rem.end()) ) throw Veto(); } void PartonExtractor::persistentOutput(PersistentOStream & os) const { os << theLastXComb << theSpecialDensities << theNoPDF << theMaxTries << flatSHatY << theFirstPDF << theSecondPDF; } void PartonExtractor::persistentInput(PersistentIStream & is, int) { is >> theLastXComb >> theSpecialDensities >> theNoPDF >> theMaxTries >> flatSHatY >> theFirstPDF >> theSecondPDF; } ClassDescription PartonExtractor::initPartonExtractor; void PartonExtractor::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::PartonExtractor class"); static RefVector interfaceSpecialDensities ("SpecialDensities", "A list of parton density objects to be used for incoming particles " "overriding possible densities given for particles of the " "BeamParticleData class.", &PartonExtractor::theSpecialDensities, 0, false, false, true, false); static Reference interfaceNoPDF ("NoPDF", "A fixed reference to a NoPDF object to be used for particles without " "substructure.", &PartonExtractor::theNoPDF, true, true, true, false); static Parameter interfaceMaxTries ("MaxTries", "The maximum number of attempts allowed when trying to generate " "remnants.", &PartonExtractor::theMaxTries, 100, 1, 1000, false, false, true); static Switch interfaceFlatSHatY ("FlatSHatY", "The possibility to override the l-generation in the PDFs and generate " "a flat distribution in \\f$\\log(\\hat{s})\\f$ and \\f$y\\f$. This only " "applies if the parton densities do not have poles in \\f$x=1\\f$.", &PartonExtractor::flatSHatY, false, false, false); static SwitchOption interfaceFlatSHatY0 (interfaceFlatSHatY, "Off", "Use the l-generation defined by the PDFs", false); static SwitchOption interfaceFlatSHatY1 (interfaceFlatSHatY, "On", "Generate flat rapidity and \\f$\\log(\\hat{s})\\f$", true); static Reference interfaceFirstPDF ("FirstPDF", "PDF to override the default PDF for the first beam particle", &PartonExtractor::theFirstPDF, false, false, true, true, false); static Reference interfaceSecondPDF ("SecondPDF", "PDF to override the default PDF for the second beam particle", &PartonExtractor::theSecondPDF, false, false, true, true, false); } RemColException::RemColException(const PartonExtractor & pe) { theMessage << "Parton extractor '" << pe.name() << "' failed to connect " << "the colours of the outgoing partons and the remnants."; severity(maybeabort); } void PartonExtractor::dofinish() { partonBinInstances.clear(); HandlerBase::dofinish(); } thepeg-1.8.0.orig/PDF/PDFBase.h0000644000175000017500000002167511747772425014150 0ustar sunsun// -*- C++ -*- // // PDFBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PDFBase_H #define ThePEG_PDFBase_H // This is the declaration of the PDFBase class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/PDF/PDFCuts.h" #include "PDFBase.xh" namespace ThePEG { /** * PDFBase is the base class for implementing parton density functions * for particles with sub-structure. A number of of virtual methods * are defined which should be overridden by sub-classes. * * It is essential that either xfx or xfl is overidden to avoid * infinite recursive function calls. * * A PDFBase object can be assigned to a BeamParticleData object * and/or to a PartonExtractor object. A PDFBase has a pointer to a * RemnantHandler object which should be capable of generating * remnants for all partons which may be extracted by the PDF. * * @see \ref PDFBaseInterfaces "The interfaces" * defined for PDFBase. * @see BeamParticleData * @see PartonExtractor * @see RemnantHandler * @see PDFCuts */ class PDFBase: public HandlerBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ PDFBase(); /** * Copy-constructor. */ PDFBase(const PDFBase &); /** * Destructor. */ virtual ~PDFBase(); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this PDF can handle the extraction of partons from * the given \a particle. */ virtual bool canHandleParticle(tcPDPtr particle) const = 0; /** * Return true if canHandleParticle() and if the corresponding * method for remnantHandler() returns true for the given \a * particle. */ virtual bool canHandle(tcPDPtr particle) const; /** * Return true if this PDF has a pole at $x=1$ for the given \a * particle and \a parton. This default version of the function * returns false. */ virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const; /** * Return the partons which this PDF may extract from the given * \a particle. */ virtual cPDVector partons(tcPDPtr particle) const = 0; /** * The density. Return the pdf for the given \a parton inside the * given \a particle for the virtuality \a partonScale and * logarithmic momentum fraction \a l \f$(l=\log(1/x)\f$. The \a * particle is assumed to have a virtuality \a particleScale. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The density. Return the pdf for the given \a parton inside the * given \a particle for the virtuality \a partonScale and momentum * fraction \a x. The \a particle is assumed to have a virtuality \a * particleScale. */ virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and logarithmic momentum fraction \a l * \f$(l=\log(1/x)\f$. The \a particle is assumed to have a * virtuality \a particleScale. If not overidden by a sub class this * implementation will assume that the difference between a quark * and anti-quark distribution is due do valense quarks, but return * zero for anything else. */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and momentum fraction \a x. The \a particle is * assumed to have a virtuality \a particleScale. If not overidden * by a sub class this implementation will assume that the * difference between a quark and anti-quark distribution is due do * valense quarks, but return zero for anything else. */ virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; /** * The sea density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and logarithmic momentum fraction \a l * \f$(l=\log(1/x)\f$. The \a particle is assumed to have a * virtuality \a particleScale. If not overidden by a sub class this * implementation will assume that the difference between a quark * and anti-quark distribution is due do valense quarks. */ virtual double xfsl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The sea density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and momentum fraction \a x. The \a particle is * assumed to have a virtuality \a particleScale. If not overidden * by a sub class this implementation will assume that the * difference between a quark and anti-quark distribution is due do * valense quarks. */ virtual double xfsx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; /** * Generate a momentum fraction. If the PDF contains strange peaks * which can be difficult to handle, this function may be * overwritten to return an appropriate \f$l=\log(1/x)\f$ for a \a z * uniformly distributed in ]0,1[. Also the jacobobian of the * \f$l\rightarrow z\f$ variable transformation must in the function * multiply the \a jacobian argument. The default version will * simply use the function \f$l(z) = l_{\min} + * z*(l_{\max}-l_{\min})\f$ (where the limits are set by \a cut). */ virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &cut, double z, double & jacobian) const; /** * Generate scale (as a fraction of the maximum scale). If the PDF * contains strange peaks which can be difficult to handle, this * function may be overwritten to return an appropriate scale * \f$Q^2/Q^2_{\max}\f$ for a \a z uniformly distributed in * ]0,1[. Also the jacobobian of the \f$Q^2/Q^2_{\max}\rightarrow * z\f$ variable transformation must multiply the \a jacobian * argument. The default version will simply use the function * \f$Q^2/Q^2_{\max} = (Q^2_{\max}/Q^2_{\min})^(z-1)\f$ or, if * \f$Q^2_{\min}\f$ is zero, \f$Q^2/Q^2_{\max} = z\f$ (where the * limits are set by \a cut). */ virtual double flattenScale(tcPDPtr particle, tcPDPtr parton, const PDFCuts & cut, double l, double z, double & jacobian) const; //@} /** * Pointer to the remnant handler to handle remnant when extracting * partons according to these densities. */ tcRemHPtr remnantHandler() const { return theRemnantHandler; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); protected: /** * A remnant handler which can generate remnants for the parton * extracted withfor this PDF */ RemHPtr theRemnantHandler; protected: /** * Indicate how to deal with x and Q2 which are out of range. */ enum RangeException { rangeFreeze, /**> Freeze the value of the PDF outside the limits. */ rangeZero, /**> Set the PDF to zero outside the limits. */ rangeThrow /**> Throw an exception if outside the limits. */ }; /** * Indicate to subclasses how to deal with x and Q2 which are out of * range. */ RangeException rangeException; private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class with persistent data. */ static AbstractClassDescription initPDFBase; /** * Private and non-existent assignment operator. */ PDFBase & operator=(const PDFBase &); }; ThePEG_DECLARE_CLASS_TRAITS(PDFBase,HandlerBase); } #endif /* ThePEG_PDFBase_H */ thepeg-1.8.0.orig/PDF/PolarizedBeamParticleData.cc0000644000175000017500000000477511747772425020100 0ustar sunsun// -*- C++ -*- // // PolarizedBeamParticleData.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PolarizedBeamParticleData class. // #include "PolarizedBeamParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; PolarizedBeamParticleData::PolarizedBeamParticleData(long newId, string newPDGName) : BeamParticleData(newId, newPDGName), theLongPolarization(0.0) {} PDPtr PolarizedBeamParticleData:: Create(long newId, string newPDGName) { return new_ptr(PolarizedBeamParticleData(newId, newPDGName)); } PDPair PolarizedBeamParticleData:: Create(long newId, string newPDGName, string newAntiPDGName) { PDPair pap; pap.first = new_ptr(PolarizedBeamParticleData(newId, newPDGName)); pap.second = new_ptr(PolarizedBeamParticleData(-newId, newAntiPDGName)); antiSetup(pap); return pap; } PDPtr PolarizedBeamParticleData::pdclone() const { return new_ptr(*this); } void PolarizedBeamParticleData::persistentOutput(PersistentOStream & os) const { os << theLongPolarization; } void PolarizedBeamParticleData::persistentInput(PersistentIStream & is, int) { is >> theLongPolarization; } ClassDescription PolarizedBeamParticleData::initPolarizedBeamParticleData; void PolarizedBeamParticleData::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::PolarizedBeamParticleData class"); static Parameter interfaceLongitudinalPolarization ("LongitudinalPolarization", "The longitudinal polarization", &PolarizedBeamParticleData::theLongPolarization, 0.0, -1.0, 1.0, false, false, Interface::limited); interfaceLongitudinalPolarization.rank(15); } RhoDMatrix PolarizedBeamParticleData::rhoMatrix() const { if(iSpin()!=PDT::Spin1Half) { throw Exception() << "Polarized Beams are currently only available for fermions\n" << Exception::runerror; } RhoDMatrix output(PDT::Spin1Half); output(0,0) = 0.5*(1.-theLongPolarization); output(1,1) = 0.5*(1.+theLongPolarization); return output; } thepeg-1.8.0.orig/PDF/PDF.h0000644000175000017500000001164711747772425013353 0ustar sunsun// -*- C++ -*- // // PDF.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PDF_H #define ThePEG_PDF_H // This is the declaration of the PDF class. #include "ThePEG/PDF/PartonBinInstance.h" namespace ThePEG { /** * PDF is a simple wrapper class with normal copy-semantics which * holds a PDFBase object and a ParticleData object for which to * determine parton densities. */ class PDF { public: /** @name Standard constructors, assignment and destructors. */ //@{ /** * Default constructor. */ PDF() {} /** * Constructor from a given PartonBinInstance. */ PDF(tcPBIPtr pb) { if ( !pb ) return; thePDF = pb->pdf(); theParticle = pb->particleData(); } /** * Constructor from a given PDFBase and ParticleData object. */ PDF(tcPDFPtr pdf, tcPDPtr pd) : thePDF(pdf), theParticle(pd) {} //@} public: /** @name Access the parton densities. */ //@{ /** * Return the density for the given \a parton, for a given \a * partonScale and logarithmic momentum fraction \a l assuming the * particle has a virtuality \a particleScale. */ double xfl(tcPPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const { return xfl(parton->dataPtr(), partonScale, l, particleScale); } /** * Return the density for the given \a parton, for a given \a * partonScale and momentum fraction \a x assuming the * particle has a virtuality \a particleScale. */ double xfx(tcPPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const { return xfx(parton->dataPtr(), partonScale, x, eps, particleScale); } /** * Return the valence density for the given \a parton, for a given * \a partonScale and logarithmic momentum fraction \a l assuming * the particle has a virtuality \a particleScale. */ double xfvl(tcPPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const { return xfvl(parton->dataPtr(), partonScale, l, particleScale); } /** * Return the valence density for the given \a parton, for a given * \a partonScale and momentum fraction \a x assuming the particle * has a virtuality \a particleScale. */ double xfvx(tcPPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const { return xfvx(parton->dataPtr(), partonScale, x, eps, particleScale); } /** * Return the density for the given \a parton, for a given \a * partonScale and logarithmic momentum fraction \a l assuming the * particle has a virtuality \a particleScale. */ double xfl(tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const { return thePDF? thePDF->xfl(theParticle, parton, partonScale, l, particleScale): 0.0; } /** * Return the density for the given \a parton, for a given \a * partonScale and momentum fraction \a x assuming the * particle has a virtuality \a particleScale. */ double xfx(tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const { return thePDF? thePDF->xfx(theParticle, parton, partonScale, x, eps, particleScale): 0.0; } /** * Return the valence density for the given \a parton, for a given * \a partonScale and logarithmic momentum fraction \a l assuming * the particle has a virtuality \a particleScale. */ double xfvl(tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const { return thePDF? thePDF->xfvl(theParticle, parton, partonScale, l, particleScale): 0.0; } /** * Return the valence density for the given \a parton, for a given * \a partonScale and momentum fraction \a x assuming the particle * has a virtuality \a particleScale. */ double xfvx(tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const { return thePDF? thePDF->xfvx(theParticle, parton, partonScale, x, eps, particleScale): 0.0; } //@} /** * The parton density object. */ tcPDFPtr pdf() const { return thePDF; } /** * The particle for which the parton density is used. */ tcPDPtr particle() const { return theParticle; } /** * Compare for equality. */ bool operator==(const PDF& x) const { return pdf() == x.pdf() && particle() == x.particle(); } /** * Compare for ordering. */ bool operator<(const PDF& x) const { return pdf() == x.pdf() ? particle() < x.particle() : pdf() < x.pdf(); } private: /** * The parton density object. */ tcPDFPtr thePDF; /** * The particle for which the parton density is used. */ tcPDPtr theParticle; }; } #endif /* ThePEG_PDF_H */ thepeg-1.8.0.orig/PDF/LHAPDF.h0000644000175000017500000003236211747772425013675 0ustar sunsun// -*- C++ -*- // // LHAPDF.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LHAPDF_H #define THEPEG_LHAPDF_H // // This is the declaration of the LHAPDF class. // #include "ThePEG/PDF/PDFBase.h" namespace ThePEG { /** * The LHAPDF class inherits from PDFBase and implements an interface * to the LHAPDF library of parton density function * parameterizations. This class is available even if LHAPDF was not * properly installed when ThePEG was installed, but will then produce * an error in the initialization. * * Note that the valence densities from the xfvx() and xfvl() function * will only work properly for nucleons. All other particles will have * zero valence densities. * * @see \ref LHAPDFInterfaces "The interfaces" * defined for LHAPDF. */ class LHAPDF: public PDFBase { public: /** Enumerate the allowed particle types. */ enum PType { nucleonType = 1, /**< (Anti-) proton or neutron. */ pionType = 2, /**< Pion */ photonType = 3 /** Photon possible with anomalous component. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ LHAPDF(); /** * The copy constructor. */ LHAPDF(const LHAPDF &); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this PDF can handle the extraction of partons from * the given \a particle. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return the partons which this PDF may extract from the given * \a particle. */ virtual cPDVector partons(tcPDPtr particle) const; /** * The density. Return the pdf for the given \a parton inside the * given \a particle for the virtuality \a partonScale and momentum * fraction \a x (with x = 1-\a eps). The \a particle is assumed to * have a virtuality \a particleScale. */ virtual double xfx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and logarithmic momentum fraction \a l. The \a * particle is assumed to have a virtuality \a particleScale. This * will only work properly for nucleons. All other particles will * have zero valence densities */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and momentum fraction \a x (with x = 1-\a eps). The * \a particle is assumed to have a virtuality \a * particleScale. This will only work properly for nucleons. All * other particles will have zero valence densities */ virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; /** * The sea density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and momentum fraction \a x. The \a particle is * assumed to have a virtuality \a particleScale. If not overidden * by a sub class this implementation will assume that the * difference between a quark and anti-quark distribution is due do * valense quarks. */ virtual double xfsx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps = 0.0, Energy2 particleScale = ZERO) const; //@} /** @name Simple access function. */ //@{ /** * The particle type. 1=nucleon, 2=pion, 3=photon. No checking is * done to see if the selected PDF set in LHAPDF actually can handle * this type */ PType ptype() const { return thePType; } /** * The name if the PDF set to be used. The full name including the * .LHpdf or .LHgrid suffix. */ const string & PDFName() const { return thePDFName; } /** * The chosen member of the selected PDF set. */ int member() const { return theMember; } /** * The maximum number of flavours for which non-zero densities are * reported. The actual number of flavours may be less depending on * the chosen PDF set. */ int maxFlav() const { return theMaxFlav; } //@} protected: /** @name Internal helper functions. */ //@{ /** * Read a line from the index file */ bool indexLine(istream & is, int & set, int & mem, string & file, int & pdftyp, int & pdfgup, int & pdfsup, double & xmin, double & xmax, double & q2min, double & q2max) const; /** * Call the Fortran InitPDFSetM function. */ void initpdfsetm() const; /** * Call the Fortran InitPDFSetM function. */ void initpdfm() const; /** * Reset the saved values from the last call to xfx(), etc. */ void lastReset() const; /** * Acquire a new nset number. */ void setnset() const; /** * Retrieve the number of members in the chosen PDF. */ int getMaxMember() const; /** * Get the maximum number of flavours available in the chosen PDF. */ int getMaxFlav() const; /** * Initialize the LHAPDF library for the chosen PDF set if it has * not been done before. */ void checkInit() const; /** * Retrieve new PDF values for the given parameters if they were * changed since the last call. */ void checkUpdate(double x, Energy2 Q2, Energy2 P2) const; /** * Set the maximum number of simultaneous pdfs that can be used in * LHAPDF. Should be set to the parameter nmxset in the * parmsetup.inc in the installed LHAPDF library. (By * default this is set to 3.) */ void setMaxNSet(int); /** * Get the maximum number of simultaneous pdfs that can be used in * LHAPDF. */ int getMaxNSet() const; /** * Deduce the min/max values of \f$x\f$ and \f$Q^2\f$ for the * selected set. */ void setMinMax(); /** * Used by the interface to select a set and member according to a number. */ void setPDFNumber(int n); /** * Used by the interface to select a get the index number of the * currently chosen set and member. */ int getPDFNumber() const; /** * Used by the interface to select a set and member according to the * old PDFLIB numbers. */ void setPDFLIBNumbers(int group, int num); /** * Used by the interface to select a set and member according to the * old PDFLIB numbers. */ string setPDFLIBNumbers(string); /** * Used by the interface to select a get the old PDFLIB numbers of the * currently chosen set and member. */ pair getPDFLIBNumbers() const; /** * Used by the interface to select a set according to a file name. */ void setPDFName(string name); /** * Used by the interface to select a member in the current set. */ void setPDFMember(int n); /** * Try to determine the path to where the LHAPDF index file is located. */ static std::string getIndexPath(); /** * Try to find a LHAPDF index file, open it in the given file stream. */ static bool openLHAIndex(ifstream & is); /** * Interface for simple tests. */ string doTest(string input); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} public: /** @cond EXCEPTIONCLASSES */ /** Exception class used if the LHAPDF library was not installed. */ class NotInstalled: public Exception {}; /** Function to throw a NotInstalled exception. */ static void throwNotInstalled(); /** @endcond */ // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The particle type. 1=nucleon, 2=pion, 3=photon. No checking is * done to see if the selected PDF set in LHAPDF actually can handle * this type */ PType thePType; /** * The name if the PDF set to be used. Should be the full name * including the .LHpdf or .LHgrid suffix. */ string thePDFName; /** * The chosen member of the selected PDF set. */ int theMember; /** * If this is a photon PDF, this describes the option for how to * treat the anomalous component. */ int thePhotonOption; /** * If this PDF allows partonic photons inside a hadron, enable this */ bool enablePartonicGamma; /** * The verbosity of the output from the LHAPDF library. */ int theVerboseLevel; /** * The maximum number of flavours for which non-zero densities are * reported. The actual number of flavours may be less depending on * the chosen PDF set. */ int theMaxFlav; /** * The LHAPDF nset number (minus one) to be used by this object. If * below zero, the object has not been initialized. */ mutable int nset; /** * Save the last \f$Q^2\f$ value used to avoid recalculation. */ mutable Energy2 lastQ2; /** * Save the last \f$x\f$ value used to avoid recalculation. */ mutable double lastX; /** * Save the last \f$P^2\f$ value used for off-shell photon to avoid * recalculation. */ mutable Energy2 lastP2; /** * Save the last function values returned from the LHAPDF library. */ mutable vector lastXF; /** * The maximum number of simultaneous pdfs that can be used in * LHAPDF. Should be set to the parameter nmxset in the * parmsetup.inc in the installed LHAPDF library. (By * default this is set to 3.) */ static int MaxNSet; /** * The last nset number used by an LHAPDF object. */ static int lastNSet; /** * The last names used in the initialization of a given nset number. */ static vector lastNames; /** * The last mem used in the initialization of a given nset number. */ static vector lastMem; /** * The minimum \f$x\f$-value for the current PDF set. */ double xMin; /** * The maximum \f$x\f$-value for the current PDF set. */ double xMax; /** * The minimum \f$Q^2\f$-value for the current PDF set. */ Energy2 Q2Min; /** * The maximum \f$Q^2\f$-value for the current PDF set. */ Energy2 Q2Max; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initLHAPDF; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ LHAPDF & operator=(const LHAPDF &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of LHAPDF. */ template <> struct BaseClassTrait { /** Typedef of the first base class of LHAPDF. */ typedef PDFBase NthBase; }; /** This template specialization informs ThePEG about the name of * the LHAPDF class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::LHAPDF"; } /** Return the name of the shared library be loaded to get access to * the LeptonLeptonPDF class and every other class it uses (except * the base class). */ static string library() { return "ThePEGLHAPDF.so"; } }; /** @endcond */ } #endif /* THEPEG_LHAPDF_H */ thepeg-1.8.0.orig/PDF/GRV94M.cc0000644000175000017500000000554311747772425014026 0ustar sunsun// -*- C++ -*- // // GRV94M.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the GRV94M class. // #include "GRV94M.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr GRV94M::clone() const { return new_ptr(*this); } IBPtr GRV94M::fullclone() const { return new_ptr(*this); } void GRV94M::setup(double l, Energy2 scale) const { GRVBase::setup(l, scale, mu2(), lam2()); } double GRV94M::uv() const { return valens(1.304 + 0.863*S(), 0.558 - 0.020*S(), 0.183*S(), -0.113 + 0.283*S() - 0.321*S2(), 6.843 - 5.089*S() + 2.647*S2() - 0.527*S3(), 7.771 - 10.09*S() + 2.630*S2(), 3.315 + 1.145*S() - 0.583*S2() + 0.154*S3()); } double GRV94M::dv() const { return valens(0.102 - 0.017*S() + 0.005*S2(), 0.270 - 0.019*S(), 0.260, 2.393 + 6.228*S() - 0.881*S2(), 46.06 + 4.673*S() - 14.98*S2() + 1.331*S3(), 17.83 - 53.47*S() + 21.24*S2(), 4.081 + 0.976*S() - 0.485*S2() + 0.152*S3()); } double GRV94M::del() const { return 0.5*valens(0.070 + 0.042*S() - 0.011*S2() + 0.004*S3(), 0.409 - 0.007*S(), 0.782 + 0.082*S(), -29.65 + 26.49*S() + 5.429*S2(), 90.20 - 74.97*S() + 4.526*S2(), 0.0, 8.122 + 2.120*S() - 1.088*S2() + 0.231*S3()); } double GRV94M::udb() const { return 0.5*lightsea(0.877, 0.561, 0.275, 0.0, 0.997, 3.210 - 1.866*S(), 7.300, 9.010 + 0.896*rootS() + 0.222*S2(), 3.077 + 1.446*S(), 3.173 - 2.445*rootS() + 2.207*S()); } double GRV94M::sb() const { return heavysea(0.0, 0.756, 0.216, 1.690 + 0.650*rootS() - 0.922*S(), -4.329 + 1.131*S(), 9.568 - 1.744*S(), 9.377 + 1.088*rootS() - 1.320*S() + 0.130*S2(), 3.031 + 1.639*S(), 5.837 + 0.815*S()); } double GRV94M::cb() const { return heavysea(0.820, 0.98, 0.0, -0.625 - 0.523*S(), 0.0, 1.896 + 1.616*S(), 4.12 + 0.683*S(), 4.36 + 1.328*S(), 0.677 + 0.679*S()); } double GRV94M::bb() const { return heavysea(1.297, 0.99, 0.0, - 0.193*S(), 0.0, 0.0, 3.447 + 0.927*S(), 4.68 + 1.259*S(), 1.892 + 2.199*S()); } double GRV94M::gl() const { return lightsea(1.014, 1.738, 1.724 + 0.157*S(), 0.800 + 1.016*S(), 7.517 - 2.547*S(), 34.09 - 52.21*rootS() + 17.47*S(), 4.039 + 1.491*S(), 3.404 + 0.830*S(), -1.112 + 3.438*S() - 0.302*S2(), 3.256 - 0.436*S()); } NoPIOClassDescription GRV94M::initGRV94M; void GRV94M::Init() { static ClassDocumentation documentation ("Implements the GRV94M PDF parameterization."); } thepeg-1.8.0.orig/PDF/PolarizedBeamParticleData.fh0000644000175000017500000000055411747772425020077 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the PolarizedBeamParticleData class. // #ifndef THEPEG_PolarizedBeamParticleData_FH #define THEPEG_PolarizedBeamParticleData_FH #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class PolarizedBeamParticleData; ThePEG_DECLARE_POINTERS(ThePEG::PolarizedBeamParticleData,PolarizedBeamPDPtr); } #endif thepeg-1.8.0.orig/PDF/RemnantHandler.xh0000644000175000017500000000154211747772425016025 0ustar sunsun// -*- C++ -*- // // RemnantHandler.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RemnantHandler_XH #define ThePEG_RemnantHandler_XH // // This is the declarations of the exception classes used by the // RemnantHandler class. // // #include "RemnantHandler.fh" #include "ThePEG/Utilities/Exception.h" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by RemnantHandler if something goes wrong. */ struct RemnantHandlerException: public Exception { /** Standard constructor. */ RemnantHandlerException(string p0, string p, string r, string mess); }; /** @endcond */ } #endif /* ThePEG_RemnantHandler_XH */ thepeg-1.8.0.orig/PDF/GRV94L.h0000644000175000017500000000724611747772425013671 0ustar sunsun// -*- C++ -*- // // GRV94L.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_GRV94L_H #define ThePEG_GRV94L_H // This is the declaration of the GRV94L class. #include "ThePEG/PDF/GRVBase.h" namespace ThePEG { /** * GRV94L inherits from PDFBase via the GRVBase class and implements * the GRV94L parton densities for (anti) protons and neutrons. * * @see \ref GRV94LInterfaces "The interfaces" * defined for GRV94L. */ class GRV94L: public GRVBase { /** * Return the cutoff scale. */ Energy2 mu2() const { return 0.23*GeV2; } /** * Return the square of \f$\Lambda_{QCD}\f$ used. */ Energy2 lam2() const { return sqr(0.2322*GeV); } protected: /** * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used * in the following call to uv(), dv)=, etc. */ virtual void setup(double l, Energy2 scale) const; /** * Return the value of the u valens density for the values previously given * by setup(). */ virtual double uv() const; /** * Return the value of the d valens density for the values previously given * by setup(). */ virtual double dv() const; /** * Return the value of the difference between the u and d sea * densities for the values previously given by setup(). */ virtual double del() const; /** * Return the value of the average u and d sea densities for the * values previously given by setup(). */ virtual double udb() const; /** * Return the value of the s density for the values previously given by * setup(). */ virtual double sb() const; /** * Return the value of the c density for the values previously given by * setup(). */ virtual double cb() const; /** * Return the value of the b density for the values previously given by * setup(). */ virtual double bb() const; /** * Return the value of the gluon densities for the values previously * given by setup(). */ virtual double gl() const; public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initGRV94L; /** * Private and non-existent assignment operator. */ GRV94L & operator=(const GRV94L &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of GRV94L. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of GRV94L. */ typedef GRVBase NthBase; }; /** This template specialization informs ThePEG about the name of the * GRV94L class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::GRV94L"; } /** Return the name of the shared library be loaded to get access to * the GRV94L class and every other class it uses (except * the base class). */ static string library() { return "GRV94L.so"; } }; /** @endcond */ } #endif /* ThePEG_GRV94L_H */ thepeg-1.8.0.orig/PDF/WeizsackerWilliamsPDF.h0000644000175000017500000001432611747772425017102 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_WeizsackerWilliamsPDF_H #define THEPEG_WeizsackerWilliamsPDF_H // // This is the declaration of the WeizsackerWilliamsPDF class. // #include "ThePEG/PDF/PDFBase.h" namespace ThePEG { using namespace ThePEG; /** * Here is the documentation of the WeizsackerWilliamsPDF class. * * @see \ref WeizsackerWilliamsPDFInterfaces "The interfaces" * defined for WeizsackerWilliamsPDF. */ class WeizsackerWilliamsPDF: public PDFBase { public: /** * Default constructor */ WeizsackerWilliamsPDF(); /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this PDF can handle the extraction of partons from * the given \a particle. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return the partons which this PDF may extract from the given * \a particle. */ virtual cPDVector partons(tcPDPtr particle) const; /** * The density. Return the pdf for the given \a parton inside the * given \a particle for the virtuality \a partonScale and * logarithmic momentum fraction \a l \f$(l=\log(1/x)\f$. The \a * particle is assumed to have a virtuality \a particleScale. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and logarithmic momentum fraction \a l * \f$(l=\log(1/x)\f$. The \a particle is assumed to have a * virtuality \a particleScale. If not overidden by a sub class this * will return zero. */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * Generate scale (as a fraction of the maximum scale). If the PDF * contains strange peaks which can be difficult to handle, this * function may be overwritten to return an appropriate scale * \f$Q^2/Q^2_{\max}\f$ for a \a z uniformly distributed in * ]0,1[. Also the jacobobian of the \f$Q^2/Q^2_{\max}\rightarrow * z\f$ variable transformation must multiply the \a jacobian * argument. The default version will simply use the function * \f$Q^2/Q^2_{\max} = (Q^2_{\max}/Q^2_{\min})^(z-1)\f$ or, if * \f$Q^2_{\min}\f$ is zero, \f$Q^2/Q^2_{\max} = z\f$ (where the * limits are set by \a cut). */ virtual double flattenScale(tcPDPtr particle, tcPDPtr parton, const PDFCuts & cut, double l, double z, double & jacobian) const; /** * Generate a momentum fraction. If the PDF contains strange peaks * which can be difficult to handle, this function may be * overwritten to return an appropriate \f$l=\log(1/x)\f$ for a \a z * uniformly distributed in ]0,1[. Also the jacobobian of the * \f$l\rightarrow z\f$ variable transformation must in the function * multiply the \a jacobian argument. The default version will * simply use the function \f$l(z) = l_{\min} + * z*(l_{\max}-l_{\min})\f$ (where the limits are set by \a cut). */ virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &cut, double z, double & jacobian) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is an concrete class without persistent data. */ static ClassDescription initWeizsackerWilliamsPDF; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ WeizsackerWilliamsPDF & operator=(const WeizsackerWilliamsPDF &); private: /** * Minimum \f$Q^2\f$ for the photon */ Energy2 _q2min; /** * Maximum \f$Q^2\f$ for the photon */ Energy2 _q2max; /** * Parameter for the jacobian mapping of \f$z\f$ */ double _a; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of WeizsackerWilliamsPDF. */ template <> struct BaseClassTrait { /** Typedef of the first base class of WeizsackerWilliamsPDF. */ typedef PDFBase NthBase; }; /** This template specialization informs ThePEG about the name of * the WeizsackerWilliamsPDF class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::WeizsackerWilliamsPDF"; } /** * The name of a file containing the dynamic library where the class * WeizsackerWilliamsPDF is implemented. It may also include several, space-separated, * libraries if the class WeizsackerWilliamsPDF depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "WeizsackerWilliamsPDF.so"; } }; /** @endcond */ } #endif /* THEPEG_WeizsackerWilliamsPDF_H */ thepeg-1.8.0.orig/PDF/PartonBin.h0000644000175000017500000001504211747772425014627 0ustar sunsun// -*- C++ -*- // // PartonBin.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PartonBin_H #define ThePEG_PartonBin_H // This is the declaration of the PartonBin class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/ClassDescription.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/PDF/PDFBase.h" #include "ThePEG/PDF/PDFCuts.h" #include "ThePEG/Vectors/Transverse.h" #include "ThePEG/EventRecord/Particle.h" #include "PartonBin.fh" namespace ThePEG { /** * The PartonBin class is used by the PartonExtractor class to store * information about the extraction of a parton from a * particle. Several PartonBin objects can be used to specify a whole * chain of partons extracted from particles extracted from other * particles. A PartonBin without an incoming() PartonBin represents * the incoming particle itself and is used to stop recursion. * * After the extraction of a parton, the kinematical variables of that * extraction is stored in a orresponding PartonBinInfo object. * * @see PartonExtractor * */ class PartonBin: public Base { public: /** A vector of pointers to PartonBin objects. */ typedef vector PBVector; public: /** @name Standard constructors, assignment and destructors. */ //@{ /** * Standard constructor. * @param p the incoming particle type. Possibly null if this bin * represents the incoming particle itself. * @param prev the PartonBin of the incoming particle. Possibly null * if this bin represents the incoming particle itself. * @param pi the parton to be extracted. * @param pdf the density function to be used. Possibly null if this * bin represents the incoming particle itself. * @param newCuts the kinematical cuts on the extraction. */ PartonBin(tcPDPtr p, tPBPtr prev, tcPDPtr pi, tcPDFPtr pdf, const PDFCuts & newCuts); /** * Default constructor. */ PartonBin(); /** * Destructor. */ virtual ~PartonBin(); //@} public: /** @name Access the information in this ParticleBin. */ //@{ /** * The incoming particle type. */ tcPDPtr particle() const { return theParticle; } /** * In the case the incoming particle in turn is extracted from * another particle, return the PartonBin for that extraction. */ tPBPtr incoming() const { return theIncomingBin; } /** * The parton bins corresponding to the extracted parton if it in * turn can be extracted from. */ const PBVector & outgoing() const { return theOutgoing; } /** * Add a parton bin corresponding to the extracted parton if it in * turn can be extracted from. */ void addOutgoing(tPBPtr pb) { theOutgoing.push_back(pb); } /** * The extracted parton type. */ tcPDPtr parton() const { return theParton; } /** * The PDFBase object describing the momentum distribution of the * parton within the particle in this PartonBin. */ tcPDFPtr pdf() const { return thePDF; } /** * The remnant handler associated with the pdf(). */ tcRemHPtr remnantHandler() const { return theRemnantHandler; } /** * Detemine the number of degrees of freedom needed to generate the * phase space of this and parent partons. If doscale is true this * bin is expected to generate the scale in addition to the momentum * fraction. */ int nDim(bool doscale); /** * Return the number of degrees of freedom used by the parton * density and remnant handler. */ int pdfDim() const { return thePDFDim; } /** * Return the number of degrees of freedom used by the parton * density and remnant handler. */ int remDim() const { return theRemDim; } //@} /** @name Functions used in the generation. */ //@{ /** * Return the cuts specified for this bin. */ const PDFCuts & cuts() const { return theCuts; } /** * Return the parton bin corresponding to the first incoming particle. */ tPBPtr getFirst(); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The incoming particle type. */ cPDPtr theParticle; /** * In the case the incoming particle in turn is extracted from * another particle, return the PartonBin for that extraction. */ tPBPtr theIncomingBin; /** * The parton bins corresponding to the extracted parton if it * itself can be extracted from. */ PBVector theOutgoing; /** * The extracted parton type. */ cPDPtr theParton; /** * The PDFBase object describing the momentum distribution of the * parton within the particle in this PartonBin. */ cPDFPtr thePDF; /** * The remnant handler associated with the pdf(). */ cRemHPtr theRemnantHandler; /** * The number of degrees of freedom needed to generate the phase * space for this parton for the parton density. */ int thePDFDim; /** * The number of degrees of freedom needed to generate the phase * space for this parton for the remnant handler. */ int theRemDim; /** * The cuts specified for this bin. */ PDFCuts theCuts; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initPartonBin; /** * Private and non-existent assignment operator. */ PartonBin & operator=(const PartonBin &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of PartonBin. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of PartonBin. */ typedef Base NthBase; }; /** This template specialization informs ThePEG about the name of the * PartonBin class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::PartonBin"; } }; /** @endcond */ } #endif /* ThePEG_PartonBin_H */ thepeg-1.8.0.orig/PDF/GRVBase.h0000644000175000017500000002117211747772425014165 0ustar sunsun// -*- C++ -*- // // GRVBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_GRVBase_H #define ThePEG_GRVBase_H // This is the declaration of the GRVBase class. #include "ThePEG/PDF/PDFBase.h" namespace ThePEG { /** * GRVBase inherits from PDFBase and is used as a base class for all * GRV parton densities. * * @see \ref GRVBaseInterfaces "The interfaces" * defined for GRVBase. */ class GRVBase: public PDFBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ GRVBase(); /** * Destructor. */ virtual ~GRVBase(); //@} public: /** @name Virtual functions required by the PDFBase class. */ //@{ /** * Return true if this PDF can handle the extraction of parton from the * given particle, ie. if the particle is a proton or neutron. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return the parton types which are described by these parton * densities. */ virtual cPDVector partons(tcPDPtr p) const; /** * Return the value of the density of parton at the given a scale * and log fractional momentum l (the optional virtuality of the * incoming particle is not used). */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const; /** * Return the valaens partof the density of parton at the given a * scale and log fractional momentum l (the optional virtuality of * the incoming particle is not used). */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const; //@} public: /** @name Access derived kinematical quantities. */ //@{ /** * Return last selected * \f$S\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$ */ double S() const { return theS; } /** * Return last selected * \f$S^2\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$ */ double S2() const { return theS2; } /** * Return last selected * \f$S^3\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$ */ double S3() const { return theS3; } /** * Return last selected * \f$\sqrt{S}\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$ */ double rootS() const { return theRootS; } /** * Return last selected momentum fraction, \f$x\f$. */ double x() const { return thex; } /** * Return last selected logarithmic momentum fraction * \f$l=\log(1/x)\f$. */ double lx() const { return theLx; } /** * Return one minus the last selected momentum fraction, eps\f$=1-x\f$. */ double eps() const { return theEps; } /** * Return the square root of the last selected momentum fraction, * \f$x\f$. */ double rootx() const { return theRootx; } //@} protected: /** * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used * in the following call to uv(), dv)=, etc. */ virtual void setup(double l, Energy2 scale) const = 0; /** * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used * in the following call to uv(), dv)=, etc. */ void setup(double l, Energy2 scale, Energy2 mu2, Energy2 lam2) const; /** * The form of the valens density functions. */ double valens(double N, double ak, double bk, double a, double b, double c, double d) const; /** * The form of the light sea and gluon density * functions. */ double lightsea(double al, double be, double ak, double bk, double a, double b, double c, double d, double e, double es) const; /** * The form of the heavy sea density functions. */ double heavysea(double sth, double al, double be, double ak, double ag, double b, double d, double e, double es) const; /** * Return the value of the u valens density for the values previously given * by setup(). */ virtual double uv() const = 0; /** * Return the value of the d valens density for the values previously given * by setup(). */ virtual double dv() const = 0; /** * Return the value of the difference between the u and d sea * densities for the values previously given by setup(). */ virtual double del() const = 0; /** * Return the value of the average u and d sea densities for the * values previously given by setup(). */ virtual double udb() const = 0; /** * Return the value of the s density for the values previously given by * setup(). */ virtual double sb() const = 0; /** * Return the value of the c density for the values previously given by * setup(). */ virtual double cb() const = 0; /** * Return the value of the b density for the values previously given by * setup(). */ virtual double bb() const = 0; /** * Return the value of the gluon densities for the values previously * given by setup(). */ virtual double gl() const = 0; /** * fuv() returns the saved values from the quv() functions if * present. Otherwise uv() is called, saved and returned. */ double fuv() const { return uvSave >= 0.0? uvSave: ( uvSave = uv() ); } /** * fdv() returns the saved values from the dv() functions if * present. Otherwise dv() is called, saved and returned. */ double fdv() const { return dvSave >= 0.0? dvSave: ( dvSave = dv() ); } /** * fdel() returns the saved values from the del() functions if * present. Otherwise del() is called, saved and returned. */ double fdel() const { return delSave >= 0.0? delSave: ( delSave = del() ); } /** * fudb() returns the saved values from the udb() functions if * present. Otherwise udb() is called, saved and returned. */ double fudb() const { return udbSave >= 0.0? udbSave: ( udbSave = udb() ); } /** * fsb() returns the saved values from the sb() functions if * present. Otherwise sb() is called, saved and returned. */ double fsb() const { return sbSave >= 0.0? sbSave: ( sbSave = sb() ); } /** * fcb() returns the saved values from the cb() functions if * present. Otherwise cb() is called, saved and returned. */ double fcb() const { return cbSave >= 0.0? cbSave: ( cbSave = cb() ); } /** * fbb() returns the saved values from the bb() functions if * present. Otherwise bb() is called, saved and returned. */ double fbb() const { return bbSave >= 0.0? bbSave: ( bbSave = bb() ); } /** * fgl() returns the saved values from the gl() functions if * present. Otherwise gl() is called, saved and returned. */ double fgl() const { return glSave >= 0.0? glSave: ( glSave = gl() ); } public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The last selected logarithmic momentum fraction * \f$l=\log(1/x)\f$. */ mutable double theLx; /** * THe last selected momentum fraction, \f$x\f$. */ mutable double thex; /** * One minus the last selected momentum fraction, eps\f$=1-x\f$. */ mutable double theEps; /** * The square root of the last selected momentum fraction, \f$x\f$. */ mutable double theRootx; /** * The last selected scale. */ mutable Energy2 Q2; /** * The last used \f$\Lambda_{QCD}^2\f$. */ mutable Energy2 theLam2; /** * The last used \f$\mu^2\f$. */ mutable Energy2 theMu2; /** * The last selected * \f$S\f$. \f$S=\log(\log(Q^2/\mu^2)/\log(Q^2/\Lambda_{QCD}^2))\f$ */ mutable double theS; /** * Return last selected \f$S^2\f$. */ mutable double theS2; /** * Return last selected \f$S^3\f$. */ mutable double theS3; /** * Return last selected \f$\sqrt{S}\f$. */ mutable double theRootS; /** * Saved values from the different functions. */ mutable double uvSave; /** * Saved values from the different functions. */ mutable double dvSave; /** * Saved values from the different functions. */ mutable double delSave; /** * Saved values from the different functions. */ mutable double udbSave; /** * Saved values from the different functions. */ mutable double sbSave; /** * Saved values from the different functions. */ mutable double cbSave; /** * Saved values from the different functions. */ mutable double bbSave; /** * Saved values from the different functions. */ mutable double glSave; private: /** * Private and non-existent assignment operator. */ GRVBase & operator=(const GRVBase &); }; } #endif /* ThePEG_GRVBase_H */ thepeg-1.8.0.orig/PDF/PartonBin.fh0000644000175000017500000000115211747772425014772 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the PartonBin class. // #ifndef ThePEG_PartonBin_FH #define ThePEG_PartonBin_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class PartonBin; ThePEG_DECLARE_POINTERS(PartonBin,PBPtr); /** A vector of pointers to PartonBin objects. */ typedef vector PartonVector; /** A pair of pointers to ParicleBin objects. */ typedef pair PBPair; /** A pair of pointers to ParicleBin objects. */ typedef pair tcPBPair; /** A vector of pairs of pointers to PartonBins. */ typedef vector PartonPairVec; } #endif thepeg-1.8.0.orig/PDF/NoPDF.cc0000644000175000017500000000241711747772425014001 0ustar sunsun// -*- C++ -*- // // NoPDF.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the NoPDF class. // #include "NoPDF.h" #include "ThePEG/Utilities/Interval.h" #include "ThePEG/PDF/RemnantHandler.h" #include "ThePEG/PDT/ParticleData.h" using namespace ThePEG; IBPtr NoPDF::clone() const { return new_ptr(*this); } IBPtr NoPDF::fullclone() const { return new_ptr(*this); } bool NoPDF::canHandleParticle(tcPDPtr) const { return true; } bool NoPDF::canHandle(tcPDPtr particle) const { return canHandleParticle(particle) && remnantHandler() && remnantHandler()->canHandle(particle, cPDVector()); } bool NoPDF::hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const { return particle == parton; } cPDVector NoPDF::partons(tcPDPtr p) const { return cPDVector(1, p); } double NoPDF:: xfl(tcPDPtr particle, tcPDPtr parton, Energy2, double l, Energy2) const { return ( l == 0 && particle == parton )? 1.0: 0.0; } NoPIOClassDescription NoPDF::initNoPDF; void NoPDF::Init() {} thepeg-1.8.0.orig/PDF/PDFCuts.h0000644000175000017500000000557511747772425014215 0ustar sunsun// -*- C++ -*- // // PDFCuts.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PDFCuts_H #define ThePEG_PDFCuts_H // This is the declaration of the PDFCuts class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/Interval.h" #include "ThePEG/Cuts/Cuts.fh" namespace ThePEG { /** * The PDFCuts class is used to specify cuts on scale and momentum * fractions for which a PDFBase object is expected to give parton * densities. It is used to estimate upper limits on the parton * densities to be generated by a PDFBase object. * * @see PDFBase */ class PDFCuts { public: /** @name Standard constructors, assignment and destructors. */ //@{ /** * Default constructor. */ PDFCuts() : theSMax() {} /** * Construction from members. */ PDFCuts(const Interval & newL, const SInterval & newScale, const Energy2 & newSMax) : theL(newL), theScale(newScale), theSMax(newSMax) {} /** * Construction from a Cuts object, using the values for * the first incoming parton (or not). */ PDFCuts(const Cuts &, bool first, const SInterval & S, const SInterval & sHat); /** * Construction from a Cuts object, using the values for * the first incoming parton (or not). */ PDFCuts(const Cuts &, bool first, Energy maxEnergy); //@} public: /** @name Access the individual limits. */ //@{ /** * The minimum value of \f$\log(1/x)\f$. */ double lMin() const { return theL.lower(); } /** * The maximum value of \f$\log(1/x)\f$. */ double lMax() const { return theL.upper(); } /** * The minimum value of x. */ double xMin() const { return exp(-lMax()); } /** * The maximum value of x. */ double xMax() const { return exp(-lMin()); } /** * The lower limit on the scale to be used. */ Energy2 scaleMin() const { return theScale.lower(); } /** * The upper limit on the scale to be used. */ Energy2 scaleMax() const { return theScale.upper(); } /** * The maximum scale for a given momentum fraction. */ Energy2 scaleMax(double x) const { return min(scaleMax(), sMax()*x); } /** * The maximum scale for a given logarithmic momentum fraction. */ Energy2 scaleMaxL(double l) const { return scaleMax(exp(-l)); } /** * The maximum invariant mass squared of the colliding particles. */ Energy2 sMax() const { return theSMax; } //@} private: /** * The minimum and maximum values of \f$\log(1/x)\f$. */ Interval theL; /** * The limits on the scale to be used. */ SInterval theScale; /** * The maximum invariant mass squared of the colliding particles. */ Energy2 theSMax; }; } #endif /* ThePEG_PDFCuts_H */ thepeg-1.8.0.orig/PDF/LeptonLeptonPDF.h0000644000175000017500000001066611747772425015717 0ustar sunsun// -*- C++ -*- // // LeptonLeptonPDF.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LeptonLeptonPDF_H #define ThePEG_LeptonLeptonPDF_H // This is the declaration of the LeptonLeptonPDF class. #include "ThePEG/PDF/PDFBase.h" namespace ThePEG { /** * LeptonLeptonPDF inherits from PDFBase and encodes the distribution * of leptons within leptons, ie. the energy loss of leptons due to * radiation of soft photons. * * @see \ref LeptonLeptonPDFInterfaces "The interfaces" * defined for LeptonLeptonPDF. */ class LeptonLeptonPDF: public PDFBase { public: /** @name Virtual functions required by the PDFBase class. */ //@{ /** * Return true if this PDF can handle the extraction of parton from the * given particle ie. if the particle is a lepton. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return true if this PDF has a pole at $x=1$ for the given \a * particle and \a parton. Returns true if \a parton and \a particle * are the same. */ virtual bool hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const; /** * Return a vector of partons handled by this PDF (always the same * lepton as the incoming particle). */ virtual cPDVector partons(tcPDPtr p) const; /** * Return the value of the density function at a given * l\f$=\log(1/x)\f$ and scale for the given parton. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * Return the the valens part of the true pdf for the given * parameters, with the momentum fraction given as * l\f$=\log(1/x)\f$. This version simply returns the full pdf. */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * Return the the valens part of the true pdf for the given * parameters, with the momentum fraction given as x. This version * simply returns the full pdf. */ virtual double xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps, Energy2 particleScale) const; /** * If the PDF contains strange peaks which can be difficult to * handle, this function may be overwritten to return an appropriate * l\f$=\log(1/x)\f$ for a z given by a flat distribution in * ]0,1[. Also the jacobobian of the l(z) function must be * returned. The default version will simly use the function l(z) = * lmin + z*(lmax-lmin). */ virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &, double z, double & jacobian) const; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initLeptonLeptonPDF; /** * Private and non-existent assignment operator. */ LeptonLeptonPDF & operator=(const LeptonLeptonPDF &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of LeptonLeptonPDF. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of LeptonLeptonPDF. */ typedef PDFBase NthBase; }; /** This template specialization informs ThePEG about the name of the * LeptonLeptonPDF class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::LeptonLeptonPDF"; } /** Return the name of the shared library be loaded to get access to * the LeptonLeptonPDF class and every other class it uses (except * the base class). */ static string library() { return "LeptonLeptonPDF.so"; } }; /** @endcond */ } #endif /* ThePEG_LeptonLeptonPDF_H */ thepeg-1.8.0.orig/PDF/PartonBinInstance.h0000644000175000017500000002706011747772425016317 0ustar sunsun// -*- C++ -*- // // PartonBinInstance.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_PartonBinInstance_H #define THEPEG_PartonBinInstance_H // This is the declaration of the PartonBinInstance class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/PDF/PartonBin.h" namespace ThePEG { ThePEG_DECLARE_CLASS_POINTERS(PartonBinInstance,PBIPtr); /** A pair of pointers to PartonBinInstance objects. */ typedef pair PBIPair; ThePEG_DECLARE_CLASS_POINTERS(RemInfoBase,RemIPtr); /** * PartonBinInstance is used to store information about the generation * of a given parton extraction for a corresponding PartonBin object. */ class PartonBinInstance: public PersistentBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ PartonBinInstance(); /** * Copy-constructor. */ PartonBinInstance(const PartonBinInstance &); /** * Destructor. */ virtual ~PartonBinInstance(); /** * Constructor taking a PartonBin as argument. The second argument * should be used if the incoming bin is already known and exists. */ PartonBinInstance(tcPBPtr, tPBIPtr = tPBIPtr()); /** * Constructor using an already prepared extracted parton. This will * also initialize the x, and scale values. To calculate the * momentum fractions, a Direction<0> object must have been properly * initialized. * * @param parton the extracted parton which must have its first * parent set to define the particle extracted from. * * @param pb the PartonBin object corresponding to the extracted \a * parton. If the particle extracted from in turn has been * extracted, the incoming() member of the PartonBin must point to * the corresponding PartonBin. * * @param scale the resolution scale at which the \a parton was * extracted. */ PartonBinInstance(tPPtr parton, tcPBPtr pb, Energy2 scale = ZERO); /** * Constructor using a parton which is to be extracted from the * given particle, but no mother-child relations exist, yet. This * will also initialize the x, and scale values. To calculate the * momentum fractions, a Direction<0> object must have been properly * initialized. */ PartonBinInstance(tPPtr particle, tPPtr parton, tcPBPtr pb, Energy2 scale = ZERO); //@} public: /** @name Access information about the corresponding PartonBin object. */ //@{ /** * Return a pointer to the PartonBin this instance refer to. */ tcPBPtr bin() const { return theBin; } /** * Return pointers to the bins this instance refer to in case more * than one parton has been extracted. */ const PartonVector & bins() const { return theBins; } /** * Return a pointer to the data object of the incoming particle. */ tcPDPtr particleData() const { return bin()->particle(); } /** * Return a pointer to the data object of the extracted parton. */ tcPDPtr partonData() const { return bin()->parton(); } /** * In the case the incoming particle in turn is extracted from * another particle, return the PartonBinInstance for that * extraction. */ tPBIPtr incoming() const { return theIncoming; } /** * Return the parton bin instance corresponding to the first * incoming particle for this bin. */ tPBIPtr getFirst(); /** * The PDFBase object describing the momentum distribution of the * parton within the particle in this PartonBin. */ tcPDFPtr pdf() const { return bin()->pdf(); } /** * The remnant handler associated with the pdf(). */ tcRemHPtr remnantHandler() const { return bin()->remnantHandler(); } /** * Return true if the corresponding PDFs has a pole at $x=1$ for the * current particle/parton combination. */ bool hasPoleIn1() const; //@} /** @name Functions used for the generation. */ //@{ /** * Reset the current PartonBin, making room for a new event. */ void reset(double lx = 0, Energy2 Q2 = ZERO); /** * Reset last generated l and Q2 values of this and parent bins. */ void prepare(); /** * Generate l and Q2 of this and parent bins. */ void generate(const double * r); /** * Get the jacobian associated with the phase space point generated. */ double jacobian() const { return theJacobian; } /** * Set the jacobian associated with the phase space point generated. */ void jacobian(double j) { theJacobian = j; } //@} /** @name Access information about the generated extraction. */ //@{ /** * Get the current particle instance. */ tPPtr particle() const { return theParticle; } /** * Set the current particle instance. */ void particle(tPPtr p) { theParticle = p; } /** * Get the current parton instance. */ tPPtr parton() const { return theParton; } /** * Set the current parton instance. */ void parton(tPPtr p) { theParton = p; } /** * The currently extracted partons (in case of multiple * interactions. */ const PVector & partons() const { return thePartons; } /** * Get the momentum fraction of this parton w.r.t. the incoming * particle in this bin. */ double xi() const { if ( theXi < 0.0 ) theXi = exp(-li()); return theXi; } /** * Get one minus the momentum fraction of this parton w.r.t. the * incoming particle in this bin. */ double eps() const { if ( theEps < 0.0 ) theEps = Math::exp1m(-li()); return theEps; } /** * Get the logarithmic momentum fraction of this parton w.r.t. the * incoming particle in this bin. */ double li() const { return theLi; } /** * Set the logarithmic momentum fraction of this parton w.r.t. the * incoming particle in this bin. */ void li(double lx) { theLi = lx; theXi = theEps = -1.0; } /** * Get the momentum fraction of this parton w.r.t. the collidig * particles. */ double x() const { if ( theX < 0.0 ) theX = exp(-l()); return theX; } /** * Get the logarithmic momentum fraction of this parton w.r.t. the * collidig particles. */ double l() const { return theL; } /** * Set the logarithmic momentum fraction of this parton w.r.t. the * collidig particles. */ void l(double lx) { theL = lx; theX = -1.0; } /** * Get the scale at which the current parton was extracted. */ Energy2 scale() const { return theScale; } /** * Set the scale at which the current parton was extracted. */ void scale(Energy2 s) { theScale = s; } /** * Return the transverse momentum of the extracted parton. */ const TransverseMomentum & kT() const { return theKT; } /** * Get the weight associated with the remnant generation. */ double remnantWeight() const { return theRemnantWeight; } /** * Set the weight associated with the remnant generation. */ void remnantWeight(double w) { theRemnantWeight = w; } /** * Get the current remnants. */ const PVector & remnants() const { return theRemnants; } /** * Set the current remnants. */ void remnants(const PVector & rems) { theRemnants = rems; } /** * Get information saved by the remnant handler from the generation, * to be used in the construction of the remnants. (In addition the * remnantWeight and remnants() may be used for this purpose.) */ tRemIPtr remnantInfo() const { return theRemInfo; } /** * Set information saved by the remnant handler from the generation, * to be used in the construction of the remnants. (In addition the * remnantWeight and remnants() may be used for this purpose.) */ void remnantInfo(tRemIPtr ri) { theRemInfo = ri; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); private: /** * Pointer to the main bin this instance refer to. */ cPBPtr theBin; /** * Pointer to the main bin (and secondary in case several partons * have been extracted this instance refer to. */ PartonVector theBins; /** * In the case the incoming particle in turn is extracted from * another particle, this is the PartonBinInstance for that * extraction. */ PBIPtr theIncoming; /** * The jacobian associated with the phase space point generated. */ double theJacobian; /** * The current particle instance. */ PPtr theParticle; /** * The current parton instance. */ PPtr theParton; /** * The currently extracted partons (in case of multiple * interactions. */ PVector thePartons; /** * The momentum fraction (xi, li=log(xi), eps=1-xi), of this * parton w.r.t. the incoming particle in this * bin. */ mutable double theXi; /** * The momentum fraction (xi, li=log(xi), eps=1-xi), of this * parton w.r.t. the incoming particle in this * bin. */ mutable double theEps; /** * The momentum fraction (xi, li=log(xi), eps=1-xi), of this * parton w.r.t. the incoming particle in this * bin. */ double theLi; /** * The momentum fraction (x, l=log(x)) of this parton * w.r.t. the collidig particles. */ mutable double theX; /** * The momentum fraction (x, l=log(x)) of this parton * w.r.t. the collidig particles. */ double theL; /** * The scale at which the current parton was extracted. */ Energy2 theScale; /** * The transverse momentum of the extracted parton. */ TransverseMomentum theKT; /** * The weight associated with the remnant generation. */ double theRemnantWeight; /** * The current remnants. */ PVector theRemnants; /** * The information saved by the remnant handler from the generation, * to be used in the construction of the remnants. (In addition the * remnantWeight and lastRemnants() may be used for this purpose.) */ RemIPtr theRemInfo; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initPartonBinInstance; /** * Private and non-existent assignment operator. */ PartonBinInstance & operator=(const PartonBinInstance &); }; /** Empty base class. A RemnantHandler may use sub-classes to store information about the generation of remnants. */ class RemInfoBase: public Base { public: /** The descructor. */ virtual ~RemInfoBase() {} }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of PartonBinInstance. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of PartonBinInstance. */ typedef Base NthBase; }; /** This template specialization informs ThePEG about the name of the * PartonBinInstance class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::PartonBinInstance"; } }; /** @endcond */ } #endif /* THEPEG_PartonBinInstance_H */ thepeg-1.8.0.orig/PDF/BeamParticleData.h0000644000175000017500000000721211747772425016055 0ustar sunsun// -*- C++ -*- // // BeamParticleData.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BeamParticleData_H #define ThePEG_BeamParticleData_H // This is the declaration of the BeamParticleData class. #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDF/PDFBase.h" #include "BeamParticleData.xh" namespace ThePEG { /** * BeamParticleData inherits from the ParticleData class and is used * for particles which have information about their sub-structure * implemented as a pointer to a PDFBase object. * * @see \ref BeamParticleDataInterfaces "The interfaces" * defined for BeamParticleData. * @see ParticleData * @see PDFBase */ class BeamParticleData: public virtual ParticleData { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ BeamParticleData() {} //@} /** @name The Create methods are special interfaces for ParticleData classes. */ //@{ /** * Create a Particle which is its own anti-particle. */ static PDPtr Create(long newId, string newPDGName); /** * Create a particle - anti particle pair. Note that setting the * parton density object on this particle does not change the parton * density of the anti particle iven if synchronized() is true. */ static PDPair Create(long newId, string newPDGName, string newAntiPDGName); //@} public: /** * Return a pointer to the parton density object describing the * sub-structure of this particle type. */ tcPDFPtr pdf() const { return thePDF; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Protected constructor only to be used by subclasses or by the * Create method. */ BeamParticleData(long newId, string newPDGName); /** * ParticleData clone method */ virtual PDPtr pdclone() const; private: /** * Set the parton density object. */ void setPDF(PDFPtr); private: /** * The pointer to the parton density object. */ PDFPtr thePDF; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initBeamParticleData; /** * Private and non-existent assignment operator. */ BeamParticleData & operator=(const BeamParticleData &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of BeamParticleData. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of BeamParticleData. */ typedef ParticleData NthBase; }; /** This template specialization informs ThePEG about the name of the * BeamParticleData class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::BeamParticleData"; } }; /** @endcond */ } #endif /* ThePEG_BeamParticleData_H */ thepeg-1.8.0.orig/PDF/PartonExtractor.h0000644000175000017500000003263011747772425016074 0ustar sunsun// -*- C++ -*- // // PartonExtractor.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PartonExtractor_H #define ThePEG_PartonExtractor_H // This is the declaration of the PartonExtractor class. #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/Handlers/LastXCombInfo.h" #include "ThePEG/PDF/PartonBin.h" #include "ThePEG/PDF/PartonBinInstance.h" #include "ThePEG/PDF/PDFBase.h" #include "ThePEG/PDT/ParticleData.h" #include "PartonExtractor.xh" namespace ThePEG { /** * The PartonExtractor is a base class defining the interface to * objects responsible for extracting partons from particles. It is * used by a SubProcessHandler which combines one PartonExtractor with * a number of MEBase objects which are the used in an XComb in a * StandardEventHandler to generate hard sub-processes. * * PartonExtractor inherits from the general HandlerBase class and * from the LastXCombInfo class to have easy acces to information * about the currently chosen hard sub-process. * * @see \ref PartonExtractorInterfaces "The interfaces" * defined for PartonExtractor. * @see SubProcessHandler * @see MEBase * @see EventHandler * @see StandardEventHandler * @see XComb * @see HandlerBase * */ class PartonExtractor: public HandlerBase, public LastXCombInfo<> { /** XComb is a friend. */ friend class XComb; public: /** A map of PartonBinInstance objects indexed by the extracted parton. */ typedef map PartonBinInstanceMap; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ PartonExtractor(); /** * Destructor. */ virtual ~PartonExtractor(); //@} public: /** @name Virtual functions which may be overridden in sub-classes. */ //@{ /** * Return true if this parton extractor can handle the given types * of incoming particles. */ virtual bool canHandle(const cPDPair &) { return true; } /** * Return a vector of possible pairs of parton bins which can be * produced within a given maximum total particle-particle * invariant mass squared, \a maxEnergy sBin. */ virtual PartonPairVec getPartons(Energy maxEnergy, const cPDPair &, const Cuts &) const; /** * May be overriden by sub-classes which have their own oppinion * about what scale to use in a hard subprocess. The default version * simply returns the previously selected scale. */ virtual Energy2 newScale(); /** * Connect the remnants with the colour lines of the extracted * parton. */ virtual void colourConnect(tPPtr particle, tPPtr parton, const tPVector & remnants) const; /** * If remnants has already been created for the given parton, remove * them from the given step and generate new remnants corresponding * to the parton newp and add them to the step. The new parton bins * are returned. * @throws Veto if remnant generation failed for whatever reason. */ virtual PBIPair newRemnants(tPPair oldp, tPPair newp, tStepPtr step); /** * Determine the number of random numbers needed to calculate * \f$\hat{s}\f$ and the product of all densitiy functions. */ virtual pair nDims(const PBPair & pbins); /** * Prepare the given parton bin instances for generating a new * event. */ virtual void prepare(const PBIPair & pbins); /** * Generate \f$l=\log(1/x)\f$ for all parton extractions. */ virtual bool generateL(const PBIPair & pbins, const double * r1, const double * r2); /** * Used by generateL() for each of the final parton * bins. Direction<0> is set to positive(negative) for the * first(second) final bin. */ virtual void generateL(PartonBinInstance & pb, const double * r); /** * Generate the rest of the degrees of freedom to calculate * \f$\hat{s}\f$ and the product of all densitiy functions. */ virtual Energy2 generateSHat(Energy2 s, const PBIPair & pbins, const double * r1, const double * r2, bool mepartons = false); /** * Return the product of all density functions. If noLastPDF.first * (.second) is true, then the PDF value multiplied by the momentum * fraction for the last extracted parton from the first (second) * incoming particle will be excluded. */ virtual double fullFn(const PBIPair & pbins, Energy2 scale, pair noLastPDF = make_pair(false,false)); /** * Construct remnants and add them to the step. */ virtual void construct(const PBIPair & pbins, tStepPtr step) const; /** * Construct remnants for partons created outside of this * extractor. Information about the incoming partons should be set * in \a pbins and the hard subprocess should be present in \a * sub. Generated remnants will be added to the \a step. * @throws Veto if remnant generation failed for whatever reason. */ virtual void constructRemnants(const PBIPair & pbins, tSubProPtr sub, tStepPtr step) const; /** * Get boost for hard subsystem and boost remnants. To be called * after re-constructing remnants and obtaining new momenta of the * partons entering the hard subsystem, but ignoring detailed energy * and momentum conservation. Perform boosts of the remnants to * conserve energy and momentum and return the boost needed for the * hard subsystem. \a bins contains the current state of the * incoming partons, including the momenta obtained after the * remnant generation. \a k1 and \a k2 contains the momenta of the * incoming partons before the remnant generation. If either side * has no new remnants, \a side1 and/or \a side2 should be false. */ virtual LorentzRotation boostRemnants(PBIPair & bins, LorentzMomentum k1, LorentzMomentum k2, bool side1, bool side2) const; //@} /** @name Access information about the current paron extraction. */ //@{ /** * Return the corresponding parton bin instance for a given * extracted parton. */ tPBIPtr partonBinInstance(tcPPtr) const; /** * Set the XComb object describing the current hard sub-process. */ void select(tXCombPtr newXComb); //@} /** * The maximum number of attempts allowed when trying to generate * remnants. */ int maxTries() const { return theMaxTries; } /** * Return the PDFBase object to be used for the incoming particle * type. If one of theSpecialDensities matches the particle type it * is returned, otherwise if particle is a BeamParticleData use the * PDFBase object specified there. If also this fails, return a * NoPDF object. */ tcPDFPtr getPDF(tcPDPtr particle) const; protected: /** @name Functions used by the main virtual functions. Some of these may be overridden in sub-classes. */ //@{ /** * Used by generateSHat() for each of the final parton * bins. Direction<0> is set to positive(negative) for the * first(second) final bin, \a pb. Should ask the remnant handler to * generate what is needed to construct the extracted parton * momentum. \a r is a pointer to an array of random numbers to be * used and \a shat is the approximate invariant mass squared of the * hard system produced by the extracted parton and the primary * parton from the other side. \a first is the momentum of the * original incoming particle. * * @return false if no remnants could be generated. */ virtual bool generate(PartonBinInstance & pb, const double * r, Energy2 shat, const Lorentz5Momentum & first, bool haveMEPartons = false); /** * Used by the public fullFn() for each of the final parton bins. */ virtual double fullFn(const PartonBinInstance & pb, bool noLastPDF = false); /** * Used by the public construct() for each of the final parton * bins. If boost is false, no boost is necessary to give the * remnants proper momenta. */ virtual void construct(PartonBinInstance & pb, tStepPtr step, bool boost = true) const; /** * Used by the public newRemnants() for each of the parton bins. * @throws Veto if remnant generation failed for whatever reason. */ PBIPtr newRemnants(tPBIPtr oldpb, tPPtr newp, const LorentzMomentum & k); /** * Used by the public newRemnants() for each of the parton bins. */ void addNewRemnants(tPBIPtr oldpb, tPBIPtr newpb, tStepPtr step); /** * Transform remnant momentum. Assuming remnants have been generated * with momentum \a Pr without considering energy-momentum * conservation, shift the momentum, possibly compensating with the * momentum of the hard subsystem, \a Ph. For information the * momentum of the parton entering the hard subsystem from the other * side, \a k, and the momentum of the remnants parent particle , \a * P is given. Note that Direction<0> must be set to determine if * the parent particle is to be assumed to go in the positive or * negative direction. */ virtual void transformRemnants(LorentzMomentum & Ph, LorentzMomentum & Pr, const LorentzMomentum & k, const LorentzMomentum & P) const; /** * Construct remnants recursively for the parton represented by \a * pb. Used by constructRemnants(const PBIPair &, tSubProPtr, tStepPtr). * Shift the momentum, \a Ph, of the hard subsystem to conserve * energy and momentum if necessary. The momentum, \a k, of the * parton coming into the hard subsystem from the other side is * given for information. Note that Direction<0> must be set to * determine if the parent particle is to be assumed to go in the * positive or negative direction. * @throws Veto if remnant generation failed for whatever reason. */ virtual void constructRemnants(PartonBinInstance & pb, LorentzMomentum & Ph, const LorentzMomentum & k) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Add parton bins to pbins for the given incoming particle and the * specified cuts. */ virtual void addPartons(tPBPtr incoming ,const PDFCuts & cuts, tcPDFPtr pdf ,PartonVector & pbins) const; /** * The NoPDF object. */ tcPDFPtr noPDF() const { return theNoPDF; } /** * Connect the first (\a anti) coloured particle in the given range * (not equal to \a parton) and connect it to the colour \a line. */ template void findConnect(tColinePtr line, tPPtr parton, bool anti, Iterator first, Iterator last) const { for ( ; first != last; ++first ) { if ( *first != parton && (**first).hasColour(anti) && !(**first).colourLine(anti) ) { line->addColoured(*first, anti); return; } } throw RemColException(*this); } protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} private: /** * The PartonBinInstance's used mapped to the respective partons. */ mutable PartonBinInstanceMap partonBinInstances; /** * A list of special PDFBase objects to be used. */ vector theSpecialDensities; /** * PDFBase object to override first PDF */ PDFPtr theFirstPDF; /** * PDFBase object to override second PDF */ PDFPtr theSecondPDF; /** * The NoPDF object. */ PDFPtr theNoPDF; /** * The maximum number of tries allowed when trying to produce * remnants. */ int theMaxTries; /** * True if this extractor should override the \f$l\f$-generation in * the PDFs and generate a flat distribution in \f$\log(\hat{s})\f$ * and y. */ bool flatSHatY; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initPartonExtractor; /** * Private and non-existent assignment operator. */ PartonExtractor & operator=(const PartonExtractor &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of PartonExtractor. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of PartonExtractor. */ typedef HandlerBase NthBase; }; /** This template specialization informs ThePEG about the name of the * PartonExtractor class. */ template <> /** Return a platform-independent class name */ struct ClassTraits: public ClassTraitsBase { static string className() { return "ThePEG::PartonExtractor"; } }; /** @endcond */ } #endif /* ThePEG_PartonExtractor_H */ thepeg-1.8.0.orig/PDF/PDFBase.xh0000644000175000017500000000232411747772425014326 0ustar sunsun// -*- C++ -*- // // PDFBase.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PDFBase_XH #define ThePEG_PDFBase_XH // // This is the declarations of the exception classes used by the // PDFBase class. // #include "ThePEG/Interface/InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by RemnantHandler if unable to handle a specified particle. */ struct RemnantHandlerCantHandle: public InterfaceException { /** Standard constructor. */ RemnantHandlerCantHandle(string, string); }; /** Exception class used by PDFBase if unable to handle a specified particle. */ struct PDFWrongParticle: public InterfaceException { /** Standard constructor. */ PDFWrongParticle(string p, string pdf, string mess); }; /** Exception class used by PDFBase if values were outside limits. */ struct PDFRange: public Exception { /** Standard constructor. */ PDFRange(string pdf, string var, double val, double lim); }; /** @endcond */ } #endif /* ThePEG_PDFBase_XH */ thepeg-1.8.0.orig/PDF/GRV94M.h0000644000175000017500000000724311747772425013667 0ustar sunsun// -*- C++ -*- // // GRV94M.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_GRV94M_H #define ThePEG_GRV94M_H // This is the declaration of the GRV94M class. #include "ThePEG/PDF/GRVBase.h" namespace ThePEG { /** * GRV94M iherits from PDFBase via the GRVBase class and implements * the GRV94M parton densities for (anti) protons ad neutrons. * * @see \ref GRV94MInterfaces "The interfaces" * defined for GRV94M. */ class GRV94M: public GRVBase { /** * Return the cutoff scale. */ Energy2 mu2() const { return 0.34*GeV2; } /** * Return the square of \f$\Lambda_{QCD}\f$ used. */ Energy2 lam2() const { return sqr(0.248*GeV); } protected: /** * Setup the \a l\f$=\log{1/x}\f$ and \a scale \f$Q^2\f$ to be used * in the following call to uv(), dv)=, etc. */ virtual void setup(double l, Energy2 scale) const; /** * Return the value of the u valens density for the values previously given * by setup(). */ virtual double uv() const; /** * Return the value of the d valens density for the values previously given * by setup(). */ virtual double dv() const; /** * Return the value of the difference between the u and d sea * densities for the values previously given by setup(). */ virtual double del() const; /** * Return the value of the average u and d sea densities for the * values previously given by setup(). */ virtual double udb() const; /** * Return the value of the s density for the values previously given by * setup(). */ virtual double sb() const; /** * Return the value of the c density for the values previously given by * setup(). */ virtual double cb() const; /** * Return the value of the b density for the values previously given by * setup(). */ virtual double bb() const; /** * Return the value of the gluon densities for the values previously * given by setup(). */ virtual double gl() const; public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initGRV94M; /** * Private and non-existent assignment operator. */ GRV94M & operator=(const GRV94M &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of GRV94M. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of GRV94M. */ typedef GRVBase NthBase; }; /** This template specialization informs ThePEG about the name of the * GRV94M class and the shared object where it is defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::GRV94M"; } /** Return the name of the shared library be loaded to get access to * the GRV94M class and every other class it uses (except * the base class). */ static string library() { return "GRV94M.so"; } }; /** @endcond */ } #endif /* ThePEG_GRV94M_H */ thepeg-1.8.0.orig/PDF/GRV94L.cc0000644000175000017500000000546411747772425014027 0ustar sunsun// -*- C++ -*- // // GRV94L.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the GRV94L class. // #include "GRV94L.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr GRV94L::clone() const { return new_ptr(*this); } IBPtr GRV94L::fullclone() const { return new_ptr(*this); } void GRV94L::setup(double l, Energy2 scale) const { GRVBase::setup(l, scale, mu2(), lam2()); } double GRV94L::uv() const { return valens(2.284 + 0.802*S() + 0.055*S2(), 0.590 - 0.024*S(), 0.131 + 0.063*S(), -0.449 - 0.138*S() - 0.076*S2(), 0.213 + 2.669*S() - 0.728*S2(), 8.854 - 9.135*S() + 1.979*S2(), 2.997 + 0.753*S() - 0.076*S2()); } double GRV94L::dv() const { return valens(0.371 + 0.083*S() + 0.039*S2(), 0.376, 0.486 + 0.062*S(), -0.509 + 3.310*S() - 1.248*S2(), 12.41 - 10.52*S() + 2.267*S2(), 6.373 - 6.208*S() + 1.418*S2(), 3.691 + 0.799*S() - 0.071*S2()); } double GRV94L::del() const { return 0.5*valens(0.082 + 0.014*S() + 0.008*S2(), 0.409 - 0.005*S(), 0.799 + 0.071*S(), -38.07 + 36.13*S() - 0.656*S2(), 90.31 - 74.15*S() + 7.645*S2(), 0.0, 7.486 + 1.217*S() - 0.159*S2()); } double GRV94L::udb() const { return 0.5*lightsea(1.451, 0.271, 0.410 - 0.232*S(), 0.534 - 0.457*S(), 0.890 - 0.140*S(), -0.981, 0.320 + 0.683*S(), 4.752 + 1.164*S() + 0.286*S2(), 4.119 + 1.713*S(), 0.682 + 2.978*S()); } double GRV94L::sb() const { return heavysea(0.0, 0.914, 0.577, 1.798 - 0.596*S(), -5.548 + 3.669*rootS() - 0.616*S(), 18.92 - 16.73*rootS() + 5.168*S(), 6.379 - 0.350*S() + 0.142*S2(), 3.981 + 1.638*S(), 6.402); } double GRV94L::cb() const { return heavysea(0.888, 1.01, 0.37, 0.0, 0.0, 4.24 - 0.804*S(), 3.46 - 1.076*S(), 4.61 + 1.49 *S(), 2.555 + 1.961*S()); } double GRV94L::bb() const { return heavysea(1.351, 1.00, 0.51, 0.0, 0.0, 1.848, 2.929 + 1.396*S(), 4.71 + 1.514*S(), 4.02 + 1.239*S()); } double GRV94L::gl() const { return lightsea(0.524, 1.088, 1.742 - 0.930*S(), - 0.399*S2(), 7.486 - 2.185*S(), 16.69 - 22.74*S() + 5.779*S2(), -25.59 + 29.71*S() - 7.296*S2(), 2.792 + 2.215*S() + 0.422*S2() - 0.104*S3(), 0.807 + 2.005*S(), 3.841 + 0.316*S()); } NoPIOClassDescription GRV94L::initGRV94L; void GRV94L::Init() { static ClassDocumentation documentation ("Implements the GRV94L PDF parameterization."); } thepeg-1.8.0.orig/PDF/GRVBase.cc0000644000175000017500000001226011747772425014321 0ustar sunsun// -*- C++ -*- // // GRVBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the GRVBase class. // #include "GRVBase.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Utilities/DescribeClass.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; GRVBase::GRVBase() : theLx(-1.0), thex(-1.0), theEps(-1.0), theRootx(-1.0), Q2(-GeV2), theLam2(-GeV2), theMu2(-GeV2), theS(-1.0), theS2(-1.0), theS3(-1.0), theRootS(-1.0), uvSave(-1.0), dvSave(-1.0), delSave(-1.0), udbSave(-1.0), sbSave(-1.0), cbSave(-1.0), bbSave(-1.0), glSave(-1.0) {} GRVBase::~GRVBase() {} bool GRVBase::canHandleParticle(tcPDPtr particle) const { return ( abs(particle->id()) == abs(long(ParticleID::pplus)) || abs(particle->id()) == abs(long(ParticleID::n0)) ); } cPDVector GRVBase::partons(tcPDPtr p) const { cPDVector ret; if ( canHandleParticle(p) ) { ret.push_back(getParticleData(ParticleID::g)); for ( int i = 1; i <= 5; ++i ) { ret.push_back(getParticleData(i)); ret.push_back(getParticleData(-i)); } } return ret; } double GRVBase::xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2) const { setup(l, partonScale); if ( S() < 0.0 ) return 0.0; using namespace ParticleID; bool anti = particle->id() < 0; bool neutron = abs(particle->id()) == n0; switch ( parton->id() ) { case b: case bbar: return max(fbb(), 0.0); case c: case cbar: return max(fcb(), 0.0); case s: case sbar: return max(fsb(), 0.0); case u: return max(neutron? (fudb() + fdel() + (anti? 0.0: fdv())): (fudb() - fdel() + (anti? 0.0: fuv())), 0.0); case ubar: return max(neutron? (fudb() + fdel() + (anti? fdv(): 0.0)): (fudb() - fdel() + (anti? fuv(): 0.0)), 0.0); case d: return max(neutron? (fudb() - fdel() + (anti? 0.0: fuv())): (fudb() + fdel() + (anti? 0.0: fdv())), 0.0); case dbar: return max(neutron? (fudb() - fdel() + (anti? fuv(): 0.0)): (fudb() + fdel() + (anti? fdv(): 0.0)), 0.0); case g: return max(fgl(), 0.0); } return 0.0; } double GRVBase::xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2) const { setup(l, partonScale); if ( S() < 0.0 ) return 0.0; using namespace ParticleID; bool anti = particle->id() < 0; bool neutron = abs(particle->id()) == n0; switch ( parton->id() ) { case u: return max(neutron? (anti? 0.0: fdv()): (anti? 0.0: fuv()), 0.0); case ubar: return max(neutron? (anti? fdv(): 0.0): (anti? fuv(): 0.0), 0.0); case d: return max(neutron? (anti? 0.0: fuv()): (anti? 0.0: fdv()), 0.0); case dbar: return max(neutron? (anti? fuv(): 0.0): (anti? fdv(): 0.0), 0.0); } return 0.0; } double GRVBase::valens(double N, double ak, double bk, double a, double b, double c, double d) const { return N*pow(x(), ak)*pow(eps(), d)* (1.0 + a*pow(x(), bk) + x()*(b + c*sqrt(x()))); } double GRVBase:: lightsea(double al, double be, double ak, double bk, double a, double b, double c, double d, double e, double es) const { return (pow(x(), ak)*(a + x()*(b + x()*c))*pow(lx(), bk) + pow(S(), al)*exp(sqrt(es*pow(S(), be)*lx()) - e))*pow(eps(), d); } double GRVBase:: heavysea(double sth, double al, double be, double ak, double ag, double b, double d, double e, double es) const { return S() <= sth? 0.0: pow(S() - sth, al)*(1.0 + rootx()*ag + x()*b)*pow(eps(), d)* exp(sqrt(es*pow(S(), be)*lx()) - e)/pow(lx(),ak); } void GRVBase:: setup(double l, Energy2 scale, Energy2 mu2, Energy2 lam2) const { if ( l == lx() && scale == Q2 && mu2 == theMu2 && lam2 == theLam2 ) return; if ( l != lx() || scale != Q2 || mu2 != theMu2 || lam2 != theLam2 ) { uvSave = dvSave = delSave = udbSave = -1.0; sbSave = cbSave = bbSave = glSave = -1.0; } if ( l != lx() ) { theLx = l; thex = exp(-l); if ( l < 0.0 ) throw PDFRange(name(), "momentum fraction", thex, 1.0); theEps = Math::exp1m(-l); theRootx = sqrt(x()); } if ( scale != Q2 || mu2 != theMu2 || lam2 != theLam2 ) { Q2 = scale; theMu2 = mu2; theLam2 = lam2; if ( scale <= mu2 ) { switch ( rangeException ) { case rangeThrow: throw PDFRange(name(), "scale (in GeV^2)", scale/GeV2, mu2/GeV2); case rangeZero: theS = -1.0; return; case rangeFreeze: theS = 0.0; } } else theS = log(log(scale/lam2)/log(mu2/lam2)); theS2 = sqr(S()); theS3 = S()*S2(); theRootS = sqrt(S()); } } DescribeAbstractNoPIOClass describeGRVBase("ThePEG::GRVBase", "GRVBase.so"); void GRVBase::Init() { static ClassDocumentation documentation ("This is the base class used by different GRV PDF parameterizations."); } thepeg-1.8.0.orig/PDF/BudnevPDF.cc0000644000175000017500000000653311747772425014653 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the BudnevPDF class. // #include "BudnevPDF.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Repository/EventGenerator.h" using namespace ThePEG; BudnevPDF::BudnevPDF() : _q2min(ZERO), _q2max(2.*GeV2),_q02(0.71*GeV2),_mup2(7.78) {} bool BudnevPDF::canHandleParticle(tcPDPtr particle) const { return ( abs(particle->id()) == ParticleID::pplus ); } cPDVector BudnevPDF::partons(tcPDPtr) const { // only photon return cPDVector(1,getParticleData(ParticleID::gamma)); } double BudnevPDF::xfl(tcPDPtr proton, tcPDPtr gamma, Energy2 qq, double l, Energy2 ) const { if(gamma->id()!=ParticleID::gamma) return 0.; double x(exp(-l)); // photon virtuality allowed by kinematics Energy2 qqkinmin = sqr(proton->mass()*x)/(1-x); //electric form factor for proton double fe = (4*sqr(proton->mass())*ge2(qq) + qq*gm2(qq))/(4*sqr(proton->mass()) + qq); //magnetic form factor double fm = gm2(qq); return SM().alphaEM()/Constants::pi*((1.-x)*(1-qqkinmin/qq)*fe + 0.5*sqr(x)*fm); } double BudnevPDF::xfvl(tcPDPtr, tcPDPtr, Energy2, double, Energy2) const { // valence density is zero return 0.0; } ClassDescription BudnevPDF::initBudnevPDF; // Definition of the static class description member. void BudnevPDF::Init() { static ClassDocumentation documentation ("The BudnevPDF provides the PDF for a photon inside" " an incoming lepton in the Weisszacker-Williams approximation"); static Parameter interfaceQ2Min ("Q2Min", "Minimum value of the magnitude of Q^2 for the photon", &BudnevPDF::_q2min, GeV2, ZERO, ZERO, 100.0*GeV2, false, false, Interface::limited); static Parameter interfaceQ2Max ("Q2Max", "Maximum value of the magnitude of Q^2 for the photon", &BudnevPDF::_q2max, GeV2, 4.0*GeV2, ZERO, 100.0*GeV2, false, false, Interface::limited); } double BudnevPDF:: flattenScale(tcPDPtr proton, tcPDPtr, const PDFCuts & c, double l, double z, double & jacobian) const { double x = exp(-l); Energy2 qqmax = min(_q2max,0.25*sqr(x)*c.sMax()); Energy2 qqmin = max(_q2min, sqr(proton->mass()*x)/(1-x)); if(qqmin>=qqmax) { jacobian = 0.; return 0.; } double low(log(qqmin/c.scaleMaxL(l))),upp(log(qqmax/c.scaleMaxL(l))); // jacobian factor jacobian *= log(qqmax/qqmin); return exp(low+z*(upp-low)); } double BudnevPDF::flattenL(tcPDPtr, tcPDPtr, const PDFCuts & c, double z, double & jacobian) const { jacobian *= c.lMax() - c.lMin(); return c.lMin() + z*(c.lMax() - c.lMin()); } void BudnevPDF::persistentOutput(PersistentOStream & os) const { os << ounit(_q2min,GeV2) << ounit(_q2max,GeV2); } void BudnevPDF::persistentInput(PersistentIStream & is, int) { is >> iunit(_q2min,GeV2) >> iunit(_q2max,GeV2); } double BudnevPDF::gm2(Energy2 q2) const { return ge2(q2)*_mup2; } double BudnevPDF::ge2(Energy2 q2) const { return Math::powi((1 + q2/_q02),-4); } thepeg-1.8.0.orig/PDF/UnResolvedRemnant.h0000644000175000017500000001742111747772425016351 0ustar sunsun// -*- C++ -*- // // UnResolvedRemnant.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_UnResolvedRemnant_H #define ThePEG_UnResolvedRemnant_H #include "ThePEG/PDF/RemnantHandler.h" namespace ThePEG { /** * UnResolvedRemnant inherits from the RemnantHandler and implements * the generation of either the incoming particle as the remnant * with the emission of a photon, pomeron or reggeon, or * a photon remnant for the particle entering the hard process. * * @see \ref UnResolvedRemnantInterfaces "The interfaces" * defined for UnResolvedRemnant. * @see UnResolvedPDF */ class UnResolvedRemnant: public RemnantHandler { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ UnResolvedRemnant(); //@} public: /** @name Virtual functions mandated by the RemnantHandler base class. */ //@{ /** * Return true if this remnant handler can handle extracting all * specified \a partons form the given \a particle. */ virtual bool canHandle(tcPDPtr particle, const cPDVector & partons) const; /** * If the generation of remnants is expected to influence the actual * cross section of the hard sub process, the degrees of freedom * generated by this remnant handler may be included in the general * phase space sampling for the subprocess. In this case this * function should be overridden to return the number of degrees of * freedom used in the generation. If \a doScale is false, it means * that the actual virtuality of the extracted parton will be * obtained from another source. */ virtual int nDim(const PartonBin & pb, bool doScale) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, const LorentzMomentum & p, const PVector & prev = PVector()) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. In either case \a shat is * the total invariant mass squared of the hard sub-system produced * by the extracted parton and the primary parton entering from the other * side. * * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, Energy2 shat, const LorentzMomentum & p, const PVector & prev = PVector()) const; /** * Generate momenta. Generates the momenta of the extracted parton * in the particle cms (but with the parton \f$x\f$ still the * positive light-cone fraction) as given by the last argument, \a * p. If the particle is space-like the positive and negative * light-cone momenta are \f$\sqrt{-m^2}\f$ and \f$-sqrt{-m^2}\f$ * respectively. If the \a scale is negative, it means that the \a * doScale in the previous call to nDim() was true, otherwise the * given scale should be the virtuality of the extracted * parton. Generated quantities which are not returned in the * momentum may be saved in the PartonBin, \a pb, for later use. In * particular, if the nDim() random numbers, \a r, are not enough to * generate with weight one, the resulting weight should be stored * with the remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, const LorentzMomentum & p, bool fixedPartonMomentum = false) const; /** * Generate the momentum of the extracted parton with the \a parent * momentum given by the last argument. If the \a scale is negative, * it means that the doScale in the previous call to nDim() was * true, otherwise the given \a scale should be the virtuality of * the extracted parton. \a shat is the total invariant mass squared * of the hard sub-system produced by the extracted parton and the * primary parton entering from the other side. Generated quantities * which are not returned in the momentum may be saved in the * PartonBinInstance, \a pb, for later use. In particular, if the * nDim() random numbers, \a r, are not enough to generate with * weight one, the resulting weight should be stored with the * remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, Energy2 shat, const LorentzMomentum & parent, bool fixedPartonMomentum = false) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** * The minimum energy fraction allowed for a photon remnant. */ double minX; /** * Easy access to a photon data object. */ tPDPtr thePhoton; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initUnResolvedRemnant; /** * Private and non-existent assignment operator. */ UnResolvedRemnant & operator=(const UnResolvedRemnant &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of UnResolvedRemnant. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of UnResolvedRemnant. */ typedef RemnantHandler NthBase; }; /** This template specialization informs ThePEG about the name of the * UnResolvedRemnant class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::UnResolvedRemnant"; } /** Return the name of the shared library be loaded to get access to * the UnResolvedRemnant class and every other class it uses * (except the base class). */ static string library() { return "UnResolvedRemnant.so"; } }; /** @endcond */ } #endif /* ThePEG_UnResolvedRemnant_H */ thepeg-1.8.0.orig/PDF/BudnevPDF.h0000644000175000017500000001445311747772425014515 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_BudnevPDF_H #define THEPEG_BudnevPDF_H // // This is the declaration of the BudnevPDF class. // #include "ThePEG/PDF/PDFBase.h" namespace ThePEG { using namespace ThePEG; /** * Here is the documentation of the BudnevPDF class. * * @see \ref BudnevPDFInterfaces "The interfaces" * defined for BudnevPDF. */ class BudnevPDF: public PDFBase { public: /** * Default constructor */ BudnevPDF(); /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this PDF can handle the extraction of partons from * the given \a particle. */ virtual bool canHandleParticle(tcPDPtr particle) const; /** * Return the partons which this PDF may extract from the given * \a particle. */ virtual cPDVector partons(tcPDPtr particle) const; /** * The density. Return the pdf for the given \a parton inside the * given \a particle for the virtuality \a partonScale and * logarithmic momentum fraction \a l \f$(l=\log(1/x)\f$. The \a * particle is assumed to have a virtuality \a particleScale. */ virtual double xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * The valence density. Return the pdf for the given cvalence \a * parton inside the given \a particle for the virtuality \a * partonScale and logarithmic momentum fraction \a l * \f$(l=\log(1/x)\f$. The \a particle is assumed to have a * virtuality \a particleScale. If not overidden by a sub class this * will return zero. */ virtual double xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale = ZERO) const; /** * Generate scale (as a fraction of the maximum scale). If the PDF * contains strange peaks which can be difficult to handle, this * function may be overwritten to return an appropriate scale * \f$Q^2/Q^2_{\max}\f$ for a \a z uniformly distributed in * ]0,1[. Also the jacobobian of the \f$Q^2/Q^2_{\max}\rightarrow * z\f$ variable transformation must multiply the \a jacobian * argument. The default version will simply use the function * \f$Q^2/Q^2_{\max} = (Q^2_{\max}/Q^2_{\min})^(z-1)\f$ or, if * \f$Q^2_{\min}\f$ is zero, \f$Q^2/Q^2_{\max} = z\f$ (where the * limits are set by \a cut). */ virtual double flattenScale(tcPDPtr particle, tcPDPtr parton, const PDFCuts & cut, double l, double z, double & jacobian) const; /** * Generate a momentum fraction. If the PDF contains strange peaks * which can be difficult to handle, this function may be * overwritten to return an appropriate \f$l=\log(1/x)\f$ for a \a z * uniformly distributed in ]0,1[. Also the jacobobian of the * \f$l\rightarrow z\f$ variable transformation must in the function * multiply the \a jacobian argument. The default version will * simply use the function \f$l(z) = l_{\min} + * z*(l_{\max}-l_{\min})\f$ (where the limits are set by \a cut). */ virtual double flattenL(tcPDPtr particle, tcPDPtr parton, const PDFCuts &cut, double z, double & jacobian) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const {return new_ptr(*this);} /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const {return new_ptr(*this);} //@} private: /** * The static object used to initialize the description of this class. * Indicates that this is an concrete class without persistent data. */ static ClassDescription initBudnevPDF; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ BudnevPDF & operator=(const BudnevPDF &); private: /** * Minimum \f$Q^2\f$ for the photon */ Energy2 _q2min; /** * Maximum \f$Q^2\f$ for the photon */ Energy2 _q2max; /** * Fitted scale \f$Q{_0}{^2}=0.71GeV^2\f$ */ const Energy2 _q02; /** * Magenetic moment of the proton \f$ \mu_{p}^2 = 7.78\f$ */ const double _mup2; /** * Helper function for magnetic a electric form factors in Budnev flux */ double gm2(Energy2 q2) const; /** * Helper function for magnetic a electric form factors in Budnev flux */ double ge2(Energy2 q2) const; }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of BudnevPDF. */ template <> struct BaseClassTrait { /** Typedef of the first base class of BudnevPDF. */ typedef PDFBase NthBase; }; /** This template specialization informs ThePEG about the name of * the BudnevPDF class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::BudnevPDF"; } /** * The name of a file containing the dynamic library where the class * BudnevPDF is implemented. It may also include several, space-separated, * libraries if the class BudnevPDF depends on other classes (base classes * excepted). In this case the listed libraries will be dynamically * linked in the order they are specified. */ static string library() { return "BudnevPDF.so"; } }; /** @endcond */ } #endif /* THEPEG_BudnevPDF_H */ thepeg-1.8.0.orig/PDF/NoRemnants.h0000644000175000017500000000747311747772425015030 0ustar sunsun// -*- C++ -*- // // NoRemnants.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_NoRemnants_H #define ThePEG_NoRemnants_H // This is the declaration of the NoRemnants class. #include "ThePEG/PDF/RemnantHandler.h" // #include "NoRemnants.fh" // #include "NoRemnants.xh" namespace ThePEG { /** * NoRemnants inherits from RemnantHandler but can only handle * particles without sub-structure with the parton density given by a * NoPDF object and will never give any remnants. * * * @see RemnantHandler * @see NoPDF * */ class NoRemnants: public RemnantHandler { public: /** @name Virtual functions mandated by the RemnantHandler base class. */ //@{ /** * Return true if this remnant handler can handle extracting all * specified partons. The NoRemnants will return false if any * partons are given. */ virtual bool canHandle(tcPDPtr, const cPDVector & partons) const { return partons.empty(); } /** * Generate Remnants. Will not generate remnants and will throw a * RemnantHandlerException if the extracted parton is not the * incomining particle with x=1. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, const LorentzMomentum & p, bool fixedPartonMomentum = false) const; /** * Generate the momentum of the extracted parton with the \a parent * momentum given by the last argument. If the \a scale is negative, * it means that the doScale in the previous call to nDim() was * true, otherwise the given \a scale should be the virtuality of * the extracted parton. \a shat is the total invariant mass squared * of the hard sub-system produced by the extracted parton and the * primary parton entering from the other side. Generated quantities * which are not returned in the momentum may be saved in the * PartonBinInstance, \a pb, for later use. In particular, if the * nDim() random numbers, \a r, are not enough to generate with * weight one, the resulting weight should be stored with the * remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, Energy2 shat, const LorentzMomentum & parent, bool fixedPartonMomentum = false) const; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initNoRemnants; /** * Private and non-existent assignment operator. */ NoRemnants & operator=(const NoRemnants &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of NoRemnants. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of NoRemnants. */ typedef RemnantHandler NthBase; }; /** This template specialization informs ThePEG about the name of the * NoRemnants class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::NoRemnants"; } }; /** @endcond */ } #endif /* ThePEG_NoRemnants_H */ thepeg-1.8.0.orig/PDF/PolarizedBeamParticleData.h0000644000175000017500000000742711747772425017737 0ustar sunsun// -*- C++ -*- // // PolarizedBeamParticleData.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PolarizedPolarizedBeamParticleData_H #define ThePEG_PolarizedPolarizedBeamParticleData_H // This is the declaration of the PolarizedBeamParticleData class. #include "BeamParticleData.h" #include "ThePEG/EventRecord/RhoDMatrix.h" #include "PolarizedBeamParticleData.fh" namespace ThePEG { /** * PolarizedBeamParticleData inherits from the BeamParticleData class and is used * for polarized beam particles * * @see \ref PolarizedBeamParticleDataInterfaces "The interfaces" * defined for PolarizedBeamParticleData. * @see BeamParticleData * @see PDFBase */ class PolarizedBeamParticleData: public virtual BeamParticleData { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ PolarizedBeamParticleData() : theLongPolarization(0.0) {} //@} /** @name The Create methods are special interfaces for ParticleData classes. */ //@{ /** * Create a Particle which is its own anti-particle. */ static PDPtr Create(long newId, string newPDGName); /** * Create a particle - anti particle pair. Note that setting the * parton density object on this particle does not change the parton * density of the anti particle iven if synchronized() is true. */ static PDPair Create(long newId, string newPDGName, string newAntiPDGName); //@} /** * Set-up the spin density matrix */ RhoDMatrix rhoMatrix() const; /** * The longitudinal polarization */ double longitudinalPolarization() const {return theLongPolarization;} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Protected constructor only to be used by subclasses or by the * Create method. */ PolarizedBeamParticleData(long newId, string newPDGName); /** * ParticleData clone method */ virtual PDPtr pdclone() const; private: /** * The longitudinal polarization */ double theLongPolarization; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initPolarizedBeamParticleData; /** * Private and non-existent assignment operator. */ PolarizedBeamParticleData & operator=(const PolarizedBeamParticleData &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of PolarizedBeamParticleData. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of PolarizedBeamParticleData. */ typedef BeamParticleData NthBase; }; /** This template specialization informs ThePEG about the name of the * PolarizedBeamParticleData class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::PolarizedBeamParticleData"; } }; /** @endcond */ } #endif /* ThePEG_PolarizedBeamParticleData_H */ thepeg-1.8.0.orig/PDF/BeamParticleData.cc0000644000175000017500000000457411747772425016223 0ustar sunsun// -*- C++ -*- // // BeamParticleData.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the BeamParticleData class. // #include "BeamParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; BeamParticleData::BeamParticleData(long newId, string newPDGName) : ParticleData(newId, newPDGName) {} PDPtr BeamParticleData:: Create(long newId, string newPDGName) { return new_ptr(BeamParticleData(newId, newPDGName)); } PDPair BeamParticleData:: Create(long newId, string newPDGName, string newAntiPDGName) { PDPair pap; pap.first = new_ptr(BeamParticleData(newId, newPDGName)); pap.second = new_ptr(BeamParticleData(-newId, newAntiPDGName)); antiSetup(pap); return pap; } PDPtr BeamParticleData::pdclone() const { return new_ptr(*this); } void BeamParticleData::persistentOutput(PersistentOStream & os) const { os << thePDF; } void BeamParticleData::persistentInput(PersistentIStream & is, int) { is >> thePDF; } ClassDescription BeamParticleData::initBeamParticleData; void BeamParticleData::setPDF(PDFPtr pdf) { if ( pdf && !pdf->canHandle(tcPDPtr(dynamic_cast(this))) ) throw BeamParticleWrongPDF(name(), pdf? pdf->name(): string("")); thePDF = pdf; } void BeamParticleData::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::BeamParticleData class"); static Reference interfacePDF ("PDF", "The parton densities for this beam particle.", &BeamParticleData::thePDF, false, false, true, true, &BeamParticleData::setPDF, 0, 0); interfacePDF.rank(15); } BeamParticleWrongPDF::BeamParticleWrongPDF(string p, string pdf) { theMessage << "The parton density object '" << pdf << "' cannot be used to " << "handle densities of particle '" << p << "'. (Possibly due to " << "the remnant handler assigned to the parton density.)"; severity(warning); } thepeg-1.8.0.orig/PDF/LeptonLeptonPDF.cc0000644000175000017500000000722711747772425016054 0ustar sunsun// -*- C++ -*- // // LeptonLeptonPDF.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LeptonLeptonPDF class. // #include "LeptonLeptonPDF.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr LeptonLeptonPDF::clone() const { return new_ptr(*this); } IBPtr LeptonLeptonPDF::fullclone() const { return new_ptr(*this); } bool LeptonLeptonPDF::canHandleParticle(tcPDPtr particle) const { return ( abs(particle->id()) < 20 || abs(particle->id()) > 10 ); } bool LeptonLeptonPDF::hasPoleIn1(tcPDPtr particle, tcPDPtr parton) const { return particle == parton; } cPDVector LeptonLeptonPDF::partons(tcPDPtr p) const { cPDVector ret; if ( canHandleParticle(p) ) ret.push_back(p); return ret; } double LeptonLeptonPDF:: xfl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2) const { using namespace Constants; static const double gf = 3.0/4.0 - EulerGamma; static const double cut = 1.0e-300; static const double del = 1000.0*cut; if ( parton != particle || l <= cut ) return 0.0; const double x = exp(-l); const double eps = Math::exp1m(-l); const double lx = -l; const double l1x = log(eps); const double beta2 = SM().alphaEM()*(log(partonScale/sqr(particle->mass()))-1.0)/pi; double corr = 0.0; double integral = exp(beta2*gf)*pow(cut,beta2)/Math::gamma(beta2+1.0) - beta2*cut*(4.0 - 3.0*beta2 + 4.0*beta2*log(cut))/4.0; if ( l < cut + del ) corr = integral/del; return x*(exp(l1x*(beta2 - 1.0) + log(beta2) + gf*beta2)/Math::gamma(beta2+1.0) - 0.5*beta2*(1.0+x) + sqr(beta2)*((1.0+x)*(-4.0*l1x+3.0*lx) - 4.0*lx/eps - 5.0 - x)/8.0) + corr; } double LeptonLeptonPDF:: xfvl(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double l, Energy2 particleScale) const { return xfl(particle, parton, partonScale, l, particleScale); } double LeptonLeptonPDF:: xfvx(tcPDPtr particle, tcPDPtr parton, Energy2 partonScale, double x, double eps, Energy2 particleScale) const { using Math::log1m; return xfl(particle, parton, partonScale, (x < 0.5 || eps <= 0.0)? -log(x): -log1m(eps), particleScale); } double LeptonLeptonPDF:: flattenL(tcPDPtr particle, tcPDPtr, const PDFCuts & c, double z, double & jacobian) const { using namespace Constants; using Math::log1m; Energy2 scale = min(c.sMax(), c.scaleMax()); if ( c.scaleMin() > ZERO ) scale = min(scale, c.scaleMin()); double beta2 = SM().alphaEM()*(log(scale/sqr(particle->mass()))-1.0)/pi; // double zpow = pow(z, 1.0/beta2); // jacobian = zpow/(1.0/beta2+1); // return z*zpow; // double l = pow(z, 1.0/beta2); // jacobian = l/(z*beta2); // z = max(z, pow(std::numeric_limits::min()*1.5, beta2)); double eps = pow(z, 1.0/beta2); double l = -log1m(eps); jacobian *= eps/(beta2*z*(1.0 - eps)); return l; } NoPIOClassDescription LeptonLeptonPDF::initLeptonLeptonPDF; void LeptonLeptonPDF::Init() { static ClassDocumentation documentation ("Describes the distribution of leptons within leptons, ie. the energy " "loss of leptons due to radiation of soft photons."); } thepeg-1.8.0.orig/PDF/NoRemnants.cc0000644000175000017500000000300711747772425015153 0ustar sunsun// -*- C++ -*- // // NoRemnants.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the NoRemnants class. // #include "NoRemnants.h" #include "ThePEG/Vectors/LorentzVector.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/EventRecord/Particle.h" using namespace ThePEG; IBPtr NoRemnants::clone() const { return new_ptr(*this); } IBPtr NoRemnants::fullclone() const { return new_ptr(*this); } Lorentz5Momentum NoRemnants:: generate(PartonBinInstance & pb, const double *, Energy2, const LorentzMomentum & p, bool) const { if ( pb.particleData() != pb.partonData() || pb.li() > 0.0 ) throw RemnantHandlerException (pb.particleData()->name(), pb.partonData()->name(), name(), "This remnant handler cannot handle any remnants!"); return p; } Lorentz5Momentum NoRemnants:: generate(PartonBinInstance & pb, const double *, Energy2, Energy2, const LorentzMomentum & p, bool) const { if ( pb.particleData() != pb.partonData() || pb.li() > 0.0 ) throw RemnantHandlerException (pb.particleData()->name(), pb.partonData()->name(), name(), "This remnant handler cannot handle any remnants!"); return p; } NoPIOClassDescription NoRemnants::initNoRemnants; void NoRemnants::Init() {} thepeg-1.8.0.orig/PDF/PDF.fh0000644000175000017500000000026511747772425013513 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_PDF_FH #define ThePEG_PDF_FH // // This is the forward declaration of the PDF class. // namespace ThePEG { class PDF; } #endif /* ThePEG_PDF_FH */ thepeg-1.8.0.orig/PDF/Makefile.in0000644000175000017500000013362511756366734014641 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @USELHAPDF_TRUE@am__append_1 = ThePEGLHAPDF.la DIST_COMMON = $(dist_pkgdata_DATA) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = PDF ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(pkgdatadir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) BudnevPDF_la_LIBADD = am_BudnevPDF_la_OBJECTS = BudnevPDF.lo BudnevPDF_la_OBJECTS = $(am_BudnevPDF_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent BudnevPDF_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(BudnevPDF_la_LDFLAGS) $(LDFLAGS) -o $@ GRV94L_la_LIBADD = am_GRV94L_la_OBJECTS = GRV94L.lo GRV94L_la_OBJECTS = $(am_GRV94L_la_OBJECTS) GRV94L_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(GRV94L_la_LDFLAGS) $(LDFLAGS) -o $@ GRV94M_la_LIBADD = am_GRV94M_la_OBJECTS = GRV94M.lo GRV94M_la_OBJECTS = $(am_GRV94M_la_OBJECTS) GRV94M_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(GRV94M_la_LDFLAGS) $(LDFLAGS) -o $@ GRVBase_la_LIBADD = am_GRVBase_la_OBJECTS = GRVBase.lo GRVBase_la_OBJECTS = $(am_GRVBase_la_OBJECTS) GRVBase_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(GRVBase_la_LDFLAGS) $(LDFLAGS) -o $@ LeptonLeptonPDF_la_LIBADD = am_LeptonLeptonPDF_la_OBJECTS = LeptonLeptonPDF.lo LeptonLeptonPDF_la_OBJECTS = $(am_LeptonLeptonPDF_la_OBJECTS) LeptonLeptonPDF_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(LeptonLeptonPDF_la_LDFLAGS) \ $(LDFLAGS) -o $@ am__DEPENDENCIES_1 = @USELHAPDF_TRUE@ThePEGLHAPDF_la_DEPENDENCIES = $(am__DEPENDENCIES_1) am__ThePEGLHAPDF_la_SOURCES_DIST = LHAPDF.cc LHAPDF.h @USELHAPDF_TRUE@am__objects_1 = ThePEGLHAPDF_la-LHAPDF.lo @USELHAPDF_TRUE@am_ThePEGLHAPDF_la_OBJECTS = $(am__objects_1) ThePEGLHAPDF_la_OBJECTS = $(am_ThePEGLHAPDF_la_OBJECTS) ThePEGLHAPDF_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ThePEGLHAPDF_la_LDFLAGS) \ $(LDFLAGS) -o $@ @USELHAPDF_TRUE@am_ThePEGLHAPDF_la_rpath = -rpath $(pkglibdir) UnResolvedRemnant_la_LIBADD = am_UnResolvedRemnant_la_OBJECTS = UnResolvedRemnant.lo UnResolvedRemnant_la_OBJECTS = $(am_UnResolvedRemnant_la_OBJECTS) UnResolvedRemnant_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(UnResolvedRemnant_la_LDFLAGS) \ $(LDFLAGS) -o $@ WeizsackerWilliamsPDF_la_LIBADD = am_WeizsackerWilliamsPDF_la_OBJECTS = WeizsackerWilliamsPDF.lo WeizsackerWilliamsPDF_la_OBJECTS = \ $(am_WeizsackerWilliamsPDF_la_OBJECTS) WeizsackerWilliamsPDF_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(WeizsackerWilliamsPDF_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGPDF_la_LIBADD = am__objects_2 = libThePEGPDF_la-PartonExtractor.lo \ libThePEGPDF_la-PDFBase.lo libThePEGPDF_la-RemnantHandler.lo \ libThePEGPDF_la-BeamParticleData.lo \ libThePEGPDF_la-PolarizedBeamParticleData.lo \ libThePEGPDF_la-PartonBin.lo libThePEGPDF_la-NoPDF.lo \ libThePEGPDF_la-NoRemnants.lo libThePEGPDF_la-PDFCuts.lo \ libThePEGPDF_la-PartonBinInstance.lo \ libThePEGPDF_la-SoftRemnantHandler.lo am__objects_3 = am__objects_4 = $(am__objects_3) am_libThePEGPDF_la_OBJECTS = $(am__objects_2) $(am__objects_4) libThePEGPDF_la_OBJECTS = $(am_libThePEGPDF_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(BudnevPDF_la_SOURCES) $(GRV94L_la_SOURCES) \ $(GRV94M_la_SOURCES) $(GRVBase_la_SOURCES) \ $(LeptonLeptonPDF_la_SOURCES) $(ThePEGLHAPDF_la_SOURCES) \ $(UnResolvedRemnant_la_SOURCES) \ $(WeizsackerWilliamsPDF_la_SOURCES) $(libThePEGPDF_la_SOURCES) DIST_SOURCES = $(BudnevPDF_la_SOURCES) $(GRV94L_la_SOURCES) \ $(GRV94M_la_SOURCES) $(GRVBase_la_SOURCES) \ $(LeptonLeptonPDF_la_SOURCES) \ $(am__ThePEGLHAPDF_la_SOURCES_DIST) \ $(UnResolvedRemnant_la_SOURCES) \ $(WeizsackerWilliamsPDF_la_SOURCES) $(libThePEGPDF_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(dist_pkgdata_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = PartonExtractor.cc PDFBase.cc RemnantHandler.cc \ BeamParticleData.cc PolarizedBeamParticleData.cc \ PartonBin.cc NoPDF.cc NoRemnants.cc PDFCuts.cc \ PartonBinInstance.cc SoftRemnantHandler.cc DOCFILES = BeamParticleData.h PolarizedBeamParticleData.h \ NoPDF.h NoRemnants.h PDFBase.h PDFCuts.h \ PartonBin.h PartonExtractor.h RemnantHandler.h \ PDF.h PartonBinInstance.h SoftRemnantHandler.h INCLUDEFILES = $(DOCFILES) BeamParticleData.xh \ PDFBase.xh PartonExtractor.fh \ PartonExtractor.xh RemnantHandler.xh \ PDF.fh PartonBin.fh PolarizedBeamParticleData.fh INPUTFILES = PDFsets.index CLEANFILES = done-all-links noinst_LTLIBRARIES = libThePEGPDF.la pkglib_LTLIBRARIES = LeptonLeptonPDF.la UnResolvedRemnant.la \ GRVBase.la GRV94L.la GRV94M.la WeizsackerWilliamsPDF.la \ BudnevPDF.la $(am__append_1) @USELHAPDF_TRUE@LHAPDF_SOURCES = LHAPDF.cc LHAPDF.h @USELHAPDF_TRUE@LHAPDF_CPPFLAGS = \ @USELHAPDF_TRUE@-DLHAPDF_PKGDATADIR="\"$(LHAPDF_PKGDATADIR)\"" \ @USELHAPDF_TRUE@-DTHEPEG_PKGDATADIR="\"$(pkgdatadir)\"" @USELHAPDF_TRUE@ThePEGLHAPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LHAPDF_LDFLAGS) $(LIBTOOLVERSIONINFO) @USELHAPDF_TRUE@ThePEGLHAPDF_la_LIBADD = $(LHAPDF_LIBS) @USELHAPDF_TRUE@ThePEGLHAPDF_la_SOURCES = $(LHAPDF_SOURCES) @USELHAPDF_TRUE@ThePEGLHAPDF_la_CPPFLAGS = $(AM_CPPFLAGS) $(LHAPDF_CPPFLAGS) libThePEGPDF_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGPDF_la_CPPFLAGS = $(AM_CPPFLAGS) # Version info should be updated if any interface or persistent I/O # function is changed LeptonLeptonPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LeptonLeptonPDF_la_SOURCES = LeptonLeptonPDF.cc LeptonLeptonPDF.h # Version info should be updated if any interface or persistent I/O # function is changed WeizsackerWilliamsPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) WeizsackerWilliamsPDF_la_SOURCES = WeizsackerWilliamsPDF.cc WeizsackerWilliamsPDF.h # Version info should be updated if any interface or persistent I/O # function is changed BudnevPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) BudnevPDF_la_SOURCES = BudnevPDF.cc BudnevPDF.h # Version info should be updated if any interface or persistent I/O # function is changed UnResolvedRemnant_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) UnResolvedRemnant_la_SOURCES = UnResolvedRemnant.cc UnResolvedRemnant.h # Version info should be updated if any interface or persistent I/O # function is changed GRVBase_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRVBase_la_SOURCES = GRVBase.cc GRVBase.h # Version info should be updated if any interface or persistent I/O # function is changed GRV94L_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRV94L_la_SOURCES = GRV94L.cc GRV94L.h # Version info should be updated if any interface or persistent I/O # function is changed GRV94M_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRV94M_la_SOURCES = GRV94M.cc GRV94M.h dist_pkgdata_DATA = PDFsets.index all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu PDF/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu PDF/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } BudnevPDF.la: $(BudnevPDF_la_OBJECTS) $(BudnevPDF_la_DEPENDENCIES) $(EXTRA_BudnevPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(BudnevPDF_la_LINK) -rpath $(pkglibdir) $(BudnevPDF_la_OBJECTS) $(BudnevPDF_la_LIBADD) $(LIBS) GRV94L.la: $(GRV94L_la_OBJECTS) $(GRV94L_la_DEPENDENCIES) $(EXTRA_GRV94L_la_DEPENDENCIES) $(AM_V_CXXLD)$(GRV94L_la_LINK) -rpath $(pkglibdir) $(GRV94L_la_OBJECTS) $(GRV94L_la_LIBADD) $(LIBS) GRV94M.la: $(GRV94M_la_OBJECTS) $(GRV94M_la_DEPENDENCIES) $(EXTRA_GRV94M_la_DEPENDENCIES) $(AM_V_CXXLD)$(GRV94M_la_LINK) -rpath $(pkglibdir) $(GRV94M_la_OBJECTS) $(GRV94M_la_LIBADD) $(LIBS) GRVBase.la: $(GRVBase_la_OBJECTS) $(GRVBase_la_DEPENDENCIES) $(EXTRA_GRVBase_la_DEPENDENCIES) $(AM_V_CXXLD)$(GRVBase_la_LINK) -rpath $(pkglibdir) $(GRVBase_la_OBJECTS) $(GRVBase_la_LIBADD) $(LIBS) LeptonLeptonPDF.la: $(LeptonLeptonPDF_la_OBJECTS) $(LeptonLeptonPDF_la_DEPENDENCIES) $(EXTRA_LeptonLeptonPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(LeptonLeptonPDF_la_LINK) -rpath $(pkglibdir) $(LeptonLeptonPDF_la_OBJECTS) $(LeptonLeptonPDF_la_LIBADD) $(LIBS) ThePEGLHAPDF.la: $(ThePEGLHAPDF_la_OBJECTS) $(ThePEGLHAPDF_la_DEPENDENCIES) $(EXTRA_ThePEGLHAPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(ThePEGLHAPDF_la_LINK) $(am_ThePEGLHAPDF_la_rpath) $(ThePEGLHAPDF_la_OBJECTS) $(ThePEGLHAPDF_la_LIBADD) $(LIBS) UnResolvedRemnant.la: $(UnResolvedRemnant_la_OBJECTS) $(UnResolvedRemnant_la_DEPENDENCIES) $(EXTRA_UnResolvedRemnant_la_DEPENDENCIES) $(AM_V_CXXLD)$(UnResolvedRemnant_la_LINK) -rpath $(pkglibdir) $(UnResolvedRemnant_la_OBJECTS) $(UnResolvedRemnant_la_LIBADD) $(LIBS) WeizsackerWilliamsPDF.la: $(WeizsackerWilliamsPDF_la_OBJECTS) $(WeizsackerWilliamsPDF_la_DEPENDENCIES) $(EXTRA_WeizsackerWilliamsPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(WeizsackerWilliamsPDF_la_LINK) -rpath $(pkglibdir) $(WeizsackerWilliamsPDF_la_OBJECTS) $(WeizsackerWilliamsPDF_la_LIBADD) $(LIBS) libThePEGPDF.la: $(libThePEGPDF_la_OBJECTS) $(libThePEGPDF_la_DEPENDENCIES) $(EXTRA_libThePEGPDF_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGPDF_la_OBJECTS) $(libThePEGPDF_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BudnevPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GRV94L.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GRV94M.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/GRVBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LeptonLeptonPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ThePEGLHAPDF_la-LHAPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/UnResolvedRemnant.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WeizsackerWilliamsPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-BeamParticleData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-NoPDF.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-NoRemnants.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PDFBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PDFCuts.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PartonBin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PartonBinInstance.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PartonExtractor.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-PolarizedBeamParticleData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-RemnantHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libThePEGPDF_la-SoftRemnantHandler.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< ThePEGLHAPDF_la-LHAPDF.lo: LHAPDF.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ThePEGLHAPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT ThePEGLHAPDF_la-LHAPDF.lo -MD -MP -MF $(DEPDIR)/ThePEGLHAPDF_la-LHAPDF.Tpo -c -o ThePEGLHAPDF_la-LHAPDF.lo `test -f 'LHAPDF.cc' || echo '$(srcdir)/'`LHAPDF.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ThePEGLHAPDF_la-LHAPDF.Tpo $(DEPDIR)/ThePEGLHAPDF_la-LHAPDF.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='LHAPDF.cc' object='ThePEGLHAPDF_la-LHAPDF.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ThePEGLHAPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o ThePEGLHAPDF_la-LHAPDF.lo `test -f 'LHAPDF.cc' || echo '$(srcdir)/'`LHAPDF.cc libThePEGPDF_la-PartonExtractor.lo: PartonExtractor.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PartonExtractor.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PartonExtractor.Tpo -c -o libThePEGPDF_la-PartonExtractor.lo `test -f 'PartonExtractor.cc' || echo '$(srcdir)/'`PartonExtractor.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PartonExtractor.Tpo $(DEPDIR)/libThePEGPDF_la-PartonExtractor.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartonExtractor.cc' object='libThePEGPDF_la-PartonExtractor.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PartonExtractor.lo `test -f 'PartonExtractor.cc' || echo '$(srcdir)/'`PartonExtractor.cc libThePEGPDF_la-PDFBase.lo: PDFBase.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PDFBase.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PDFBase.Tpo -c -o libThePEGPDF_la-PDFBase.lo `test -f 'PDFBase.cc' || echo '$(srcdir)/'`PDFBase.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PDFBase.Tpo $(DEPDIR)/libThePEGPDF_la-PDFBase.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PDFBase.cc' object='libThePEGPDF_la-PDFBase.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PDFBase.lo `test -f 'PDFBase.cc' || echo '$(srcdir)/'`PDFBase.cc libThePEGPDF_la-RemnantHandler.lo: RemnantHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-RemnantHandler.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-RemnantHandler.Tpo -c -o libThePEGPDF_la-RemnantHandler.lo `test -f 'RemnantHandler.cc' || echo '$(srcdir)/'`RemnantHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-RemnantHandler.Tpo $(DEPDIR)/libThePEGPDF_la-RemnantHandler.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='RemnantHandler.cc' object='libThePEGPDF_la-RemnantHandler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-RemnantHandler.lo `test -f 'RemnantHandler.cc' || echo '$(srcdir)/'`RemnantHandler.cc libThePEGPDF_la-BeamParticleData.lo: BeamParticleData.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-BeamParticleData.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-BeamParticleData.Tpo -c -o libThePEGPDF_la-BeamParticleData.lo `test -f 'BeamParticleData.cc' || echo '$(srcdir)/'`BeamParticleData.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-BeamParticleData.Tpo $(DEPDIR)/libThePEGPDF_la-BeamParticleData.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='BeamParticleData.cc' object='libThePEGPDF_la-BeamParticleData.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-BeamParticleData.lo `test -f 'BeamParticleData.cc' || echo '$(srcdir)/'`BeamParticleData.cc libThePEGPDF_la-PolarizedBeamParticleData.lo: PolarizedBeamParticleData.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PolarizedBeamParticleData.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PolarizedBeamParticleData.Tpo -c -o libThePEGPDF_la-PolarizedBeamParticleData.lo `test -f 'PolarizedBeamParticleData.cc' || echo '$(srcdir)/'`PolarizedBeamParticleData.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PolarizedBeamParticleData.Tpo $(DEPDIR)/libThePEGPDF_la-PolarizedBeamParticleData.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PolarizedBeamParticleData.cc' object='libThePEGPDF_la-PolarizedBeamParticleData.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PolarizedBeamParticleData.lo `test -f 'PolarizedBeamParticleData.cc' || echo '$(srcdir)/'`PolarizedBeamParticleData.cc libThePEGPDF_la-PartonBin.lo: PartonBin.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PartonBin.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PartonBin.Tpo -c -o libThePEGPDF_la-PartonBin.lo `test -f 'PartonBin.cc' || echo '$(srcdir)/'`PartonBin.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PartonBin.Tpo $(DEPDIR)/libThePEGPDF_la-PartonBin.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartonBin.cc' object='libThePEGPDF_la-PartonBin.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PartonBin.lo `test -f 'PartonBin.cc' || echo '$(srcdir)/'`PartonBin.cc libThePEGPDF_la-NoPDF.lo: NoPDF.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-NoPDF.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-NoPDF.Tpo -c -o libThePEGPDF_la-NoPDF.lo `test -f 'NoPDF.cc' || echo '$(srcdir)/'`NoPDF.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-NoPDF.Tpo $(DEPDIR)/libThePEGPDF_la-NoPDF.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NoPDF.cc' object='libThePEGPDF_la-NoPDF.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-NoPDF.lo `test -f 'NoPDF.cc' || echo '$(srcdir)/'`NoPDF.cc libThePEGPDF_la-NoRemnants.lo: NoRemnants.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-NoRemnants.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-NoRemnants.Tpo -c -o libThePEGPDF_la-NoRemnants.lo `test -f 'NoRemnants.cc' || echo '$(srcdir)/'`NoRemnants.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-NoRemnants.Tpo $(DEPDIR)/libThePEGPDF_la-NoRemnants.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='NoRemnants.cc' object='libThePEGPDF_la-NoRemnants.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-NoRemnants.lo `test -f 'NoRemnants.cc' || echo '$(srcdir)/'`NoRemnants.cc libThePEGPDF_la-PDFCuts.lo: PDFCuts.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PDFCuts.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PDFCuts.Tpo -c -o libThePEGPDF_la-PDFCuts.lo `test -f 'PDFCuts.cc' || echo '$(srcdir)/'`PDFCuts.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PDFCuts.Tpo $(DEPDIR)/libThePEGPDF_la-PDFCuts.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PDFCuts.cc' object='libThePEGPDF_la-PDFCuts.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PDFCuts.lo `test -f 'PDFCuts.cc' || echo '$(srcdir)/'`PDFCuts.cc libThePEGPDF_la-PartonBinInstance.lo: PartonBinInstance.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-PartonBinInstance.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-PartonBinInstance.Tpo -c -o libThePEGPDF_la-PartonBinInstance.lo `test -f 'PartonBinInstance.cc' || echo '$(srcdir)/'`PartonBinInstance.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-PartonBinInstance.Tpo $(DEPDIR)/libThePEGPDF_la-PartonBinInstance.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='PartonBinInstance.cc' object='libThePEGPDF_la-PartonBinInstance.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-PartonBinInstance.lo `test -f 'PartonBinInstance.cc' || echo '$(srcdir)/'`PartonBinInstance.cc libThePEGPDF_la-SoftRemnantHandler.lo: SoftRemnantHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT libThePEGPDF_la-SoftRemnantHandler.lo -MD -MP -MF $(DEPDIR)/libThePEGPDF_la-SoftRemnantHandler.Tpo -c -o libThePEGPDF_la-SoftRemnantHandler.lo `test -f 'SoftRemnantHandler.cc' || echo '$(srcdir)/'`SoftRemnantHandler.cc @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libThePEGPDF_la-SoftRemnantHandler.Tpo $(DEPDIR)/libThePEGPDF_la-SoftRemnantHandler.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='SoftRemnantHandler.cc' object='libThePEGPDF_la-SoftRemnantHandler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libThePEGPDF_la_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o libThePEGPDF_la-SoftRemnantHandler.lo `test -f 'SoftRemnantHandler.cc' || echo '$(srcdir)/'`SoftRemnantHandler.cc mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(DATA) all-local installdirs: for dir in "$(DESTDIR)$(pkglibdir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_pkgdataDATA uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am all-local check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES cscopelist ctags distclean \ distclean-compile distclean-generic distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-pkglibLTLIBRARIES install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-dist_pkgdataDATA \ uninstall-pkglibLTLIBRARIES all-local: done-all-links done-all-links: @EMPTY@ifdef SHOWCOMMAND for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "sym-linking input files files..." @for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done @echo "stamp" > done-all-links @EMPTY@endif debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/PDF/PDFsets.index0000644000175000017500000104274111747772425015132 0ustar sunsun 211 2 1 1 OWPI.LHgrid 1 4. 2000. 0.005 0.9998 OW-P(LO) 212 2 1 2 OWPI.LHgrid 2 4. 2000. 0.005 0.9998 OW-P(LO) 230 2 3 1 SMRSPI.LHgrid 1 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) 230 2 3 2 SMRSPI.LHgrid 2 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) 230 2 3 3 SMRSPI.LHgrid 3 5. 1310000. 1.E-05 0.9998 SMRS-P(NLO) 251 2 5 1 GRVPI1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-P(NLO) 252 2 5 2 GRVPI0.LHgrid 2 0.25 1000000. 1.E-05 0.9998 GRV-P(LO) 261 2 6 1 ABFKWPI.LHgrid 1 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) 262 2 6 2 ABFKWPI.LHgrid 2 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) 263 2 6 3 ABFKWPI.LHgrid 3 2. 100000000. 0.001 0.9998 ABKFKW-P(NLO) 311 3 1 1 DOG0.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(LO) 312 3 1 2 DOG1.LHgrid 1 10. 10000. 1.E-05 0.9 DO-G(NLO) 320 3 2 1 DGG.LHgrid 1 1. 10000. 1.E-05 0.9998 DG-G(LO) 320 3 2 2 DGG.LHgrid 2 1. 50. 1.E-05 0.9998 DG-G(LO) 320 3 2 3 DGG.LHgrid 3 20. 500. 1.E-05 0.9998 DG-G(LO) 320 3 2 4 DGG.LHgrid 4 200. 10000. 1.E-05 0.9998 DG-G(LO) 330 3 3 1 LACG.LHgrid 1 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) 330 3 3 2 LACG.LHgrid 2 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) 330 3 3 3 LACG.LHgrid 3 1. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) 330 3 3 4 LACG.LHgrid 4 4. 100000. 0.0001 0.9998 LAC-G/GAL-G(LO) 341 3 4 1 GSG1.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(NLO) 342 3 4 2 GSG0.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G(LO) 342 3 4 3 GSG0.LHgrid 2 5.3 100000000. 0.0005 0.9998 GS-G(LO) 344 3 4 4 GSG961.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(NLO) 345 3 4 5 GSG960.LHgrid 1 5.3 100000000. 0.0005 0.9998 GS-G-96(LO) 351 3 5 1 GRVG1.LHgrid 1 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) 352 3 5 2 GRVG1.LHgrid 2 0.3 1000000. 1.E-05 0.9998 GRV-G(NLO) 353 3 5 3 GRVG0.LHgrid 1 0.25 1000000. 1.E-05 0.9998 GRV-G/GRS-G(LO) 354 3 5 4 GRVG0.LHgrid 2 0.6 50000. 1.E-05 0.9998 GRV-G/GRS-G(LO) 361 3 6 1 ACFGPG.LHgrid 1 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) 362 3 6 2 ACFGPG.LHgrid 2 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) 363 3 6 3 ACFGPG.LHgrid 3 2. 550000. 0.00137 0.9998 ACFGP/AFG-G(NLO) 381 3 8 1 WHITG.LHgrid 1 4. 2500. 0.001 0.9998 WHIT-G(LO) 382 3 8 2 WHITG.LHgrid 2 4. 2500. 0.001 0.9998 WHIT-G(LO) 383 3 8 3 WHITG.LHgrid 3 4. 2500. 0.001 0.9998 WHIT-G(LO) 384 3 8 4 WHITG.LHgrid 4 4. 2500. 0.001 0.9998 WHIT-G(LO) 385 3 8 5 WHITG.LHgrid 5 4. 2500. 0.001 0.9998 WHIT-G(LO) 386 3 8 6 WHITG.LHgrid 6 4. 2500. 0.001 0.9998 WHIT-G(LO) 391 3 9 1 SASG.LHgrid 1 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 392 3 9 2 SASG.LHgrid 2 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 393 3 9 3 SASG.LHgrid 3 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 394 3 9 4 SASG.LHgrid 4 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 395 3 9 5 SASG.LHgrid 5 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 396 3 9 6 SASG.LHgrid 6 0.36 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 397 3 9 7 SASG.LHgrid 7 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 398 3 9 8 SASG.LHgrid 8 4. 50000. 1.E-05 0.9998 SAS-G(v1/v2)(LO) 10000 1 0 0 cteq6m.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) 10001 1 0 0 cteq6.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6 10002 1 0 0 cteq6.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ6 10003 1 0 0 cteq6.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ6 10004 1 0 0 cteq6.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ6 10005 1 0 0 cteq6.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ6 10006 1 0 0 cteq6.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ6 10007 1 0 0 cteq6.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ6 10008 1 0 0 cteq6.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ6 10009 1 0 0 cteq6.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ6 10010 1 0 0 cteq6.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ6 10011 1 0 0 cteq6.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ6 10012 1 0 0 cteq6.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ6 10013 1 0 0 cteq6.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ6 10014 1 0 0 cteq6.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ6 10015 1 0 0 cteq6.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ6 10016 1 0 0 cteq6.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ6 10017 1 0 0 cteq6.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ6 10018 1 0 0 cteq6.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ6 10019 1 0 0 cteq6.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ6 10020 1 0 0 cteq6.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ6 10021 1 0 0 cteq6.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ6 10022 1 0 0 cteq6.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ6 10023 1 0 0 cteq6.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ6 10024 1 0 0 cteq6.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ6 10025 1 0 0 cteq6.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ6 10026 1 0 0 cteq6.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ6 10027 1 0 0 cteq6.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ6 10028 1 0 0 cteq6.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ6 10029 1 0 0 cteq6.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ6 10030 1 0 0 cteq6.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ6 10031 1 0 0 cteq6.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ6 10032 1 0 0 cteq6.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ6 10033 1 0 0 cteq6.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ6 10034 1 0 0 cteq6.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ6 10035 1 0 0 cteq6.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ6 10036 1 0 0 cteq6.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ6 10037 1 0 0 cteq6.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ6 10038 1 0 0 cteq6.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ6 10039 1 0 0 cteq6.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ6 10040 1 0 0 cteq6.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ6 10041 1 0 0 cteq6l.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO_fit,with_NLOrder_alpha_S) 10042 1 0 0 cteq6ll.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ6(LO fit,with_LOrder_alpha_S) 10050 1 0 0 cteq6mE.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6(Standard_MSbar) 10051 1 0 0 cteq6mE.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6 10052 1 0 0 cteq6mE.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6 10053 1 0 0 cteq6mE.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6 10054 1 0 0 cteq6mE.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6 10055 1 0 0 cteq6mE.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6 10056 1 0 0 cteq6mE.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6 10057 1 0 0 cteq6mE.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6 10058 1 0 0 cteq6mE.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6 10059 1 0 0 cteq6mE.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6 10060 1 0 0 cteq6mE.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6 10061 1 0 0 cteq6mE.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6 10062 1 0 0 cteq6mE.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6 10063 1 0 0 cteq6mE.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6 10064 1 0 0 cteq6mE.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6 10065 1 0 0 cteq6mE.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6 10066 1 0 0 cteq6mE.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6 10067 1 0 0 cteq6mE.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6 10068 1 0 0 cteq6mE.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6 10069 1 0 0 cteq6mE.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6 10070 1 0 0 cteq6mE.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ6 10071 1 0 0 cteq6mE.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ6 10072 1 0 0 cteq6mE.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ6 10073 1 0 0 cteq6mE.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ6 10074 1 0 0 cteq6mE.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ6 10075 1 0 0 cteq6mE.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ6 10076 1 0 0 cteq6mE.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ6 10077 1 0 0 cteq6mE.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ6 10078 1 0 0 cteq6mE.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ6 10079 1 0 0 cteq6mE.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ6 10080 1 0 0 cteq6mE.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ6 10081 1 0 0 cteq6mE.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ6 10082 1 0 0 cteq6mE.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ6 10083 1 0 0 cteq6mE.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ6 10084 1 0 0 cteq6mE.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ6 10085 1 0 0 cteq6mE.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ6 10086 1 0 0 cteq6mE.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ6 10087 1 0 0 cteq6mE.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ6 10088 1 0 0 cteq6mE.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ6 10089 1 0 0 cteq6mE.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ6 10090 1 0 0 cteq6mE.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ6 10100 1 0 0 cteq61.LHpdf 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10101 1 0 0 cteq61.LHpdf 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10102 1 0 0 cteq61.LHpdf 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10103 1 0 0 cteq61.LHpdf 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10104 1 0 0 cteq61.LHpdf 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10105 1 0 0 cteq61.LHpdf 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10106 1 0 0 cteq61.LHpdf 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10107 1 0 0 cteq61.LHpdf 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10108 1 0 0 cteq61.LHpdf 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10109 1 0 0 cteq61.LHpdf 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10110 1 0 0 cteq61.LHpdf 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10111 1 0 0 cteq61.LHpdf 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10112 1 0 0 cteq61.LHpdf 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10113 1 0 0 cteq61.LHpdf 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10114 1 0 0 cteq61.LHpdf 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10115 1 0 0 cteq61.LHpdf 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10116 1 0 0 cteq61.LHpdf 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10117 1 0 0 cteq61.LHpdf 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10118 1 0 0 cteq61.LHpdf 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10119 1 0 0 cteq61.LHpdf 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10120 1 0 0 cteq61.LHpdf 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10121 1 0 0 cteq61.LHpdf 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10122 1 0 0 cteq61.LHpdf 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10123 1 0 0 cteq61.LHpdf 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10124 1 0 0 cteq61.LHpdf 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10125 1 0 0 cteq61.LHpdf 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10126 1 0 0 cteq61.LHpdf 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10127 1 0 0 cteq61.LHpdf 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10128 1 0 0 cteq61.LHpdf 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10129 1 0 0 cteq61.LHpdf 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10130 1 0 0 cteq61.LHpdf 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10131 1 0 0 cteq61.LHpdf 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10132 1 0 0 cteq61.LHpdf 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10133 1 0 0 cteq61.LHpdf 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10134 1 0 0 cteq61.LHpdf 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10135 1 0 0 cteq61.LHpdf 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10136 1 0 0 cteq61.LHpdf 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10137 1 0 0 cteq61.LHpdf 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10138 1 0 0 cteq61.LHpdf 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10139 1 0 0 cteq61.LHpdf 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10140 1 0 0 cteq61.LHpdf 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10150 1 0 0 cteq61.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10151 1 0 0 cteq61.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10152 1 0 0 cteq61.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10153 1 0 0 cteq61.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10154 1 0 0 cteq61.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10155 1 0 0 cteq61.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10156 1 0 0 cteq61.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10157 1 0 0 cteq61.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10158 1 0 0 cteq61.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10159 1 0 0 cteq61.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10160 1 0 0 cteq61.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10161 1 0 0 cteq61.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10162 1 0 0 cteq61.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10163 1 0 0 cteq61.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10164 1 0 0 cteq61.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10165 1 0 0 cteq61.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10166 1 0 0 cteq61.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10167 1 0 0 cteq61.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10168 1 0 0 cteq61.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10169 1 0 0 cteq61.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10170 1 0 0 cteq61.LHgrid 20 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10171 1 0 0 cteq61.LHgrid 21 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10172 1 0 0 cteq61.LHgrid 22 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10173 1 0 0 cteq61.LHgrid 23 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10174 1 0 0 cteq61.LHgrid 24 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10175 1 0 0 cteq61.LHgrid 25 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10176 1 0 0 cteq61.LHgrid 26 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10177 1 0 0 cteq61.LHgrid 27 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10178 1 0 0 cteq61.LHgrid 28 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10179 1 0 0 cteq61.LHgrid 29 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10180 1 0 0 cteq61.LHgrid 30 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10181 1 0 0 cteq61.LHgrid 31 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10182 1 0 0 cteq61.LHgrid 32 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10183 1 0 0 cteq61.LHgrid 33 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10184 1 0 0 cteq61.LHgrid 34 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10185 1 0 0 cteq61.LHgrid 35 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10186 1 0 0 cteq61.LHgrid 36 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10187 1 0 0 cteq61.LHgrid 37 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10188 1 0 0 cteq61.LHgrid 38 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10189 1 0 0 cteq61.LHgrid 39 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10190 1 0 0 cteq61.LHgrid 40 1.69 100000000. 1.E-06 1. CTEQ61(cteq61m+errors) 10250 1 0 0 cteq6AB.LHgrid 0 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10251 1 0 0 cteq6AB.LHgrid 1 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10252 1 0 0 cteq6AB.LHgrid 2 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10253 1 0 0 cteq6AB.LHgrid 3 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10254 1 0 0 cteq6AB.LHgrid 4 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10255 1 0 0 cteq6AB.LHgrid 5 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10256 1 0 0 cteq6AB.LHgrid 6 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10257 1 0 0 cteq6AB.LHgrid 7 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas) 10258 1 0 0 cteq6AB.LHgrid 8 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10259 1 0 0 cteq6AB.LHgrid 9 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10260 1 0 0 cteq6AB.LHgrid 10 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10261 1 0 0 cteq6AB.LHgrid 11 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10262 1 0 0 cteq6AB.LHgrid 12 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10263 1 0 0 cteq6AB.LHgrid 13 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10264 1 0 0 cteq6AB.LHgrid 14 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10265 1 0 0 cteq6AB.LHgrid 15 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10266 1 0 0 cteq6AB.LHgrid 16 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10267 1 0 0 cteq6AB.LHgrid 17 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10268 1 0 0 cteq6AB.LHgrid 18 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10269 1 0 0 cteq6AB.LHgrid 19 1.69 100000000. 1.E-06 1. CTEQ6AB(cteq6AB-variable alphas 10350 1 0 0 cteq65.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10351 1 0 0 cteq65.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10352 1 0 0 cteq65.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10353 1 0 0 cteq65.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10354 1 0 0 cteq65.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10355 1 0 0 cteq65.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10356 1 0 0 cteq65.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10357 1 0 0 cteq65.LHgrid 7 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10358 1 0 0 cteq65.LHgrid 8 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10359 1 0 0 cteq65.LHgrid 9 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10360 1 0 0 cteq65.LHgrid 10 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10361 1 0 0 cteq65.LHgrid 11 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10362 1 0 0 cteq65.LHgrid 12 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10363 1 0 0 cteq65.LHgrid 13 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10364 1 0 0 cteq65.LHgrid 14 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10365 1 0 0 cteq65.LHgrid 15 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10366 1 0 0 cteq65.LHgrid 16 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10367 1 0 0 cteq65.LHgrid 17 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10368 1 0 0 cteq65.LHgrid 18 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10369 1 0 0 cteq65.LHgrid 19 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10370 1 0 0 cteq65.LHgrid 20 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10371 1 0 0 cteq65.LHgrid 21 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10372 1 0 0 cteq65.LHgrid 22 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10373 1 0 0 cteq65.LHgrid 23 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10374 1 0 0 cteq65.LHgrid 24 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10375 1 0 0 cteq65.LHgrid 25 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10376 1 0 0 cteq65.LHgrid 26 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10377 1 0 0 cteq65.LHgrid 27 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10378 1 0 0 cteq65.LHgrid 28 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10379 1 0 0 cteq65.LHgrid 29 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10380 1 0 0 cteq65.LHgrid 30 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10381 1 0 0 cteq65.LHgrid 31 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10382 1 0 0 cteq65.LHgrid 32 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10383 1 0 0 cteq65.LHgrid 33 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10384 1 0 0 cteq65.LHgrid 34 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10385 1 0 0 cteq65.LHgrid 35 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10386 1 0 0 cteq65.LHgrid 36 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10387 1 0 0 cteq65.LHgrid 37 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10388 1 0 0 cteq65.LHgrid 38 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10389 1 0 0 cteq65.LHgrid 39 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10390 1 0 0 cteq65.LHgrid 40 1.69 10000000000. 1.E-07 1. CTEQ65(cteq65m+errors) 10450 1 0 0 cteq65c.LHgrid 0 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+centralfit/nocharm) 10451 1 0 0 cteq65c.LHgrid 1 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) 10452 1 0 0 cteq65c.LHgrid 2 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+BHPSmodel) 10453 1 0 0 cteq65c.LHgrid 3 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) 10454 1 0 0 cteq65c.LHgrid 4 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+MesonCloud) 10455 1 0 0 cteq65c.LHgrid 5 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) 10456 1 0 0 cteq65c.LHgrid 6 1.69 10000000000. 1.E-07 1. CTEQ65c(cteq65c+Sea-like) 19050 1 4 48 cteq5m.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m(Standard_MSbar) 19051 1 4 53 cteq5m1.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5m1(updated) 19053 1 4 51 cteq5f3.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f3(3lavour) 19054 1 4 52 cteq5f4.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5f4(4flavour) 19060 1 4 47 cteq5d.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5d(Standard_DIS) 19070 1 4 46 cteq5l.LHgrid 1 1. 100000000. 1.E-05 1. CTEQ5l(Leading_Order) 19150 1 4 34 cteq4m.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4m(Standard_MSbar) 19160 1 4 33 cteq4d.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4d(Standard_DIS) 19170 1 4 32 cteq4l.LHgrid 1 2.56 100000000. 1.E-05 1. CTEQ4l(Leading_Order) 20001 1 0 0 MRST2001nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20002 1 0 0 MRST2001nlo.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20003 1 0 0 MRST2001nlo.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20004 1 0 0 MRST2001nlo.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20051 1 0 0 MRST2001nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20052 1 0 0 MRST2001nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20053 1 0 0 MRST2001nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20054 1 0 0 MRST2001nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001(NLO) 20060 1 0 0 MRST2001lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(LO) 20070 1 0 0 MRST2001nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001(NNLO) 20100 1 0 0 MRST2001E.LHpdf 0 1.25 10000000. 1.E-05 1. MRST2001E 20101 1 0 0 MRST2001E.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2001E 20102 1 0 0 MRST2001E.LHpdf 2 1.25 10000000. 1.E-05 1. MRST2001E 20103 1 0 0 MRST2001E.LHpdf 3 1.25 10000000. 1.E-05 1. MRST2001E 20104 1 0 0 MRST2001E.LHpdf 4 1.25 10000000. 1.E-05 1. MRST2001E 20105 1 0 0 MRST2001E.LHpdf 5 1.25 10000000. 1.E-05 1. MRST2001E 20106 1 0 0 MRST2001E.LHpdf 6 1.25 10000000. 1.E-05 1. MRST2001E 20107 1 0 0 MRST2001E.LHpdf 7 1.25 10000000. 1.E-05 1. MRST2001E 20108 1 0 0 MRST2001E.LHpdf 8 1.25 10000000. 1.E-05 1. MRST2001E 20109 1 0 0 MRST2001E.LHpdf 9 1.25 10000000. 1.E-05 1. MRST2001E 20110 1 0 0 MRST2001E.LHpdf 10 1.25 10000000. 1.E-05 1. MRST2001E 20111 1 0 0 MRST2001E.LHpdf 11 1.25 10000000. 1.E-05 1. MRST2001E 20112 1 0 0 MRST2001E.LHpdf 12 1.25 10000000. 1.E-05 1. MRST2001E 20113 1 0 0 MRST2001E.LHpdf 13 1.25 10000000. 1.E-05 1. MRST2001E 20114 1 0 0 MRST2001E.LHpdf 14 1.25 10000000. 1.E-05 1. MRST2001E 20115 1 0 0 MRST2001E.LHpdf 15 1.25 10000000. 1.E-05 1. MRST2001E 20116 1 0 0 MRST2001E.LHpdf 16 1.25 10000000. 1.E-05 1. MRST2001E 20117 1 0 0 MRST2001E.LHpdf 17 1.25 10000000. 1.E-05 1. MRST2001E 20118 1 0 0 MRST2001E.LHpdf 18 1.25 10000000. 1.E-05 1. MRST2001E 20119 1 0 0 MRST2001E.LHpdf 19 1.25 10000000. 1.E-05 1. MRST2001E 20120 1 0 0 MRST2001E.LHpdf 20 1.25 10000000. 1.E-05 1. MRST2001E 20121 1 0 0 MRST2001E.LHpdf 21 1.25 10000000. 1.E-05 1. MRST2001E 20122 1 0 0 MRST2001E.LHpdf 22 1.25 10000000. 1.E-05 1. MRST2001E 20123 1 0 0 MRST2001E.LHpdf 23 1.25 10000000. 1.E-05 1. MRST2001E 20124 1 0 0 MRST2001E.LHpdf 24 1.25 10000000. 1.E-05 1. MRST2001E 20125 1 0 0 MRST2001E.LHpdf 25 1.25 10000000. 1.E-05 1. MRST2001E 20126 1 0 0 MRST2001E.LHpdf 26 1.25 10000000. 1.E-05 1. MRST2001E 20127 1 0 0 MRST2001E.LHpdf 27 1.25 10000000. 1.E-05 1. MRST2001E 20128 1 0 0 MRST2001E.LHpdf 28 1.25 10000000. 1.E-05 1. MRST2001E 20129 1 0 0 MRST2001E.LHpdf 29 1.25 10000000. 1.E-05 1. MRST2001E 20130 1 0 0 MRST2001E.LHpdf 30 1.25 10000000. 1.E-05 1. MRST2001E 20150 1 0 0 MRST2001E.LHgrid 0 1.25 10000000. 1.E-05 1. MRST2001ECentralValue 20151 1 0 0 MRST2001E.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2001Errors 20152 1 0 0 MRST2001E.LHgrid 2 1.25 10000000. 1.E-05 1. MRST2001Errors 20153 1 0 0 MRST2001E.LHgrid 3 1.25 10000000. 1.E-05 1. MRST2001Errors 20154 1 0 0 MRST2001E.LHgrid 4 1.25 10000000. 1.E-05 1. MRST2001Errors 20155 1 0 0 MRST2001E.LHgrid 5 1.25 10000000. 1.E-05 1. MRST2001Errors 20156 1 0 0 MRST2001E.LHgrid 6 1.25 10000000. 1.E-05 1. MRST2001Errors 20157 1 0 0 MRST2001E.LHgrid 7 1.25 10000000. 1.E-05 1. MRST2001Errors 20158 1 0 0 MRST2001E.LHgrid 8 1.25 10000000. 1.E-05 1. MRST2001Errors 20159 1 0 0 MRST2001E.LHgrid 9 1.25 10000000. 1.E-05 1. MRST2001Errors 20160 1 0 0 MRST2001E.LHgrid 10 1.25 10000000. 1.E-05 1. MRST2001Errors 20161 1 0 0 MRST2001E.LHgrid 11 1.25 10000000. 1.E-05 1. MRST2001Errors 20162 1 0 0 MRST2001E.LHgrid 12 1.25 10000000. 1.E-05 1. MRST2001Errors 20163 1 0 0 MRST2001E.LHgrid 13 1.25 10000000. 1.E-05 1. MRST2001Errors 20164 1 0 0 MRST2001E.LHgrid 14 1.25 10000000. 1.E-05 1. MRST2001Errors 20165 1 0 0 MRST2001E.LHgrid 15 1.25 10000000. 1.E-05 1. MRST2001Errors 20166 1 0 0 MRST2001E.LHgrid 16 1.25 10000000. 1.E-05 1. MRST2001Errors 20167 1 0 0 MRST2001E.LHgrid 17 1.25 10000000. 1.E-05 1. MRST2001Errors 20168 1 0 0 MRST2001E.LHgrid 18 1.25 10000000. 1.E-05 1. MRST2001Errors 20169 1 0 0 MRST2001E.LHgrid 19 1.25 10000000. 1.E-05 1. MRST2001Errors 20170 1 0 0 MRST2001E.LHgrid 20 1.25 10000000. 1.E-05 1. MRST2001Errors 20171 1 0 0 MRST2001E.LHgrid 21 1.25 10000000. 1.E-05 1. MRST2001Errors 20172 1 0 0 MRST2001E.LHgrid 22 1.25 10000000. 1.E-05 1. MRST2001Errors 20173 1 0 0 MRST2001E.LHgrid 23 1.25 10000000. 1.E-05 1. MRST2001Errors 20174 1 0 0 MRST2001E.LHgrid 24 1.25 10000000. 1.E-05 1. MRST2001Errors 20175 1 0 0 MRST2001E.LHgrid 25 1.25 10000000. 1.E-05 1. MRST2001Errors 20176 1 0 0 MRST2001E.LHgrid 26 1.25 10000000. 1.E-05 1. MRST2001Errors 20177 1 0 0 MRST2001E.LHgrid 27 1.25 10000000. 1.E-05 1. MRST2001Errors 20178 1 0 0 MRST2001E.LHgrid 28 1.25 10000000. 1.E-05 1. MRST2001Errors 20179 1 0 0 MRST2001E.LHgrid 29 1.25 10000000. 1.E-05 1. MRST2001Errors 20180 1 0 0 MRST2001E.LHgrid 30 1.25 10000000. 1.E-05 1. MRST2001Errors 20200 1 0 0 MRST2002nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) 20250 1 0 0 MRST2002nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002(NLO) 20270 1 0 0 MRST2002nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2002NNLO) 20300 1 0 0 MRST2003cnlo.LHpdf 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range 20350 1 0 0 MRST2003cnlo.LHgrid 1 10. 10000000. 0.001 1. MRST2003c(NLO)restricted_range 20370 1 0 0 MRST2003cnnlo.LHgrid 1 7. 10000000. 0.001 1. MRST2003c(NNLO)restricted_range 20400 1 0 0 MRST2004nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) 20406 1 0 0 MRST2004FF3nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 20408 1 0 0 MRST2004FF4nlo.LHpdf 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 20450 1 0 0 MRST2004nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO) 20452 1 0 0 MRST2004FF3lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour3 20454 1 0 0 MRST2004FF4lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(LO)FixedFlavour4 20456 1 0 0 MRST2004FF3nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour3 20458 1 0 0 MRST2004FF4nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004(NLO)FixedFlavour4 20460 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED (proton) 20461 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED (proton) 20462 1 0 0 MRST2004qed.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004QED (neutron) 20470 1 0 0 MRST2004nnlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST2004 (NNLO) 20550 1 0 0 MRST2006nnlo.LHgrid 0 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)CentralValue 20551 1 0 0 MRST2006nnlo.LHgrid 1 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20552 1 0 0 MRST2006nnlo.LHgrid 2 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20553 1 0 0 MRST2006nnlo.LHgrid 3 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20554 1 0 0 MRST2006nnlo.LHgrid 4 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20555 1 0 0 MRST2006nnlo.LHgrid 5 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20556 1 0 0 MRST2006nnlo.LHgrid 6 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20557 1 0 0 MRST2006nnlo.LHgrid 7 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20558 1 0 0 MRST2006nnlo.LHgrid 8 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20559 1 0 0 MRST2006nnlo.LHgrid 9 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20560 1 0 0 MRST2006nnlo.LHgrid 10 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20561 1 0 0 MRST2006nnlo.LHgrid 11 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20562 1 0 0 MRST2006nnlo.LHgrid 12 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20563 1 0 0 MRST2006nnlo.LHgrid 13 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20564 1 0 0 MRST2006nnlo.LHgrid 14 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20565 1 0 0 MRST2006nnlo.LHgrid 15 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20566 1 0 0 MRST2006nnlo.LHgrid 16 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20567 1 0 0 MRST2006nnlo.LHgrid 17 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20568 1 0 0 MRST2006nnlo.LHgrid 18 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20569 1 0 0 MRST2006nnlo.LHgrid 19 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20570 1 0 0 MRST2006nnlo.LHgrid 20 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20571 1 0 0 MRST2006nnlo.LHgrid 21 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20572 1 0 0 MRST2006nnlo.LHgrid 22 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20573 1 0 0 MRST2006nnlo.LHgrid 23 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20574 1 0 0 MRST2006nnlo.LHgrid 24 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20575 1 0 0 MRST2006nnlo.LHgrid 25 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20576 1 0 0 MRST2006nnlo.LHgrid 26 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20577 1 0 0 MRST2006nnlo.LHgrid 27 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20578 1 0 0 MRST2006nnlo.LHgrid 28 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20579 1 0 0 MRST2006nnlo.LHgrid 29 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 20580 1 0 0 MRST2006nnlo.LHgrid 30 1.0 1000000000. 1.E-06 1. MRST2006(NNLO)Errors 29000 1 3 68 MRST98.LHpdf 0 1.25 10000000. 1.E-05 1. MRST98 29001 1 3 67 MRST98.LHpdf 1 1.25 10000000. 1.E-05 1. MRST98 29003 1 3 69 MRST98.LHpdf 3 1.25 10000000. 1.E-05 1. MRST98 29041 1 3 72 MRST98lo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(LO) 29042 1 3 73 MRST98lo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(LO) 29043 1 3 74 MRST98lo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(LO) 29044 1 3 75 MRST98lo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(LO) 29045 1 3 76 MRST98lo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(LO) 29051 1 3 67 MRST98nlo.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(NLO) 29052 1 3 68 MRST98nlo.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(NLO) 29053 1 3 69 MRST98nlo.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(NLO) 29054 1 3 70 MRST98nlo.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(NLO) 29055 1 3 71 MRST98nlo.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(NLO) 29061 1 3 62 MRST98dis.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(DIS) 29062 1 3 63 MRST98dis.LHgrid 2 1.25 10000000. 1.E-05 1. MRST98(DIS) 29063 1 3 64 MRST98dis.LHgrid 3 1.25 10000000. 1.E-05 1. MRST98(DIS) 29064 1 3 65 MRST98dis.LHgrid 4 1.25 10000000. 1.E-05 1. MRST98(DIS) 29065 1 3 66 MRST98dis.LHgrid 5 1.25 10000000. 1.E-05 1. MRST98(DIS) 29070 1 1 77 MRST98ht.LHgrid 1 1.25 10000000. 1.E-05 1. MRST98(HT) 30100 1 0 0 Fermi2002_100.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 30101 1 0 0 Fermi2002_100.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 30102 1 0 0 Fermi2002_100.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 30103 1 0 0 Fermi2002_100.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 30104 1 0 0 Fermi2002_100.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 30105 1 0 0 Fermi2002_100.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 30106 1 0 0 Fermi2002_100.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 30107 1 0 0 Fermi2002_100.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 30108 1 0 0 Fermi2002_100.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 30109 1 0 0 Fermi2002_100.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 30110 1 0 0 Fermi2002_100.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 30111 1 0 0 Fermi2002_100.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 30112 1 0 0 Fermi2002_100.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 30113 1 0 0 Fermi2002_100.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 30114 1 0 0 Fermi2002_100.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 30115 1 0 0 Fermi2002_100.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 30116 1 0 0 Fermi2002_100.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 30117 1 0 0 Fermi2002_100.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 30118 1 0 0 Fermi2002_100.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 30119 1 0 0 Fermi2002_100.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 30120 1 0 0 Fermi2002_100.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 30121 1 0 0 Fermi2002_100.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 30122 1 0 0 Fermi2002_100.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 30123 1 0 0 Fermi2002_100.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 30124 1 0 0 Fermi2002_100.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 30125 1 0 0 Fermi2002_100.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 30126 1 0 0 Fermi2002_100.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 30127 1 0 0 Fermi2002_100.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 30128 1 0 0 Fermi2002_100.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 30129 1 0 0 Fermi2002_100.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 30130 1 0 0 Fermi2002_100.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 30131 1 0 0 Fermi2002_100.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 30132 1 0 0 Fermi2002_100.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 30133 1 0 0 Fermi2002_100.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 30134 1 0 0 Fermi2002_100.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 30135 1 0 0 Fermi2002_100.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 30136 1 0 0 Fermi2002_100.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 30137 1 0 0 Fermi2002_100.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 30138 1 0 0 Fermi2002_100.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 30139 1 0 0 Fermi2002_100.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 30140 1 0 0 Fermi2002_100.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 30141 1 0 0 Fermi2002_100.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 30142 1 0 0 Fermi2002_100.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 30143 1 0 0 Fermi2002_100.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 30144 1 0 0 Fermi2002_100.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 30145 1 0 0 Fermi2002_100.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 30146 1 0 0 Fermi2002_100.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 30147 1 0 0 Fermi2002_100.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 30148 1 0 0 Fermi2002_100.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 30149 1 0 0 Fermi2002_100.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 30150 1 0 0 Fermi2002_100.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 30151 1 0 0 Fermi2002_100.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 30152 1 0 0 Fermi2002_100.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 30153 1 0 0 Fermi2002_100.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 30154 1 0 0 Fermi2002_100.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 30155 1 0 0 Fermi2002_100.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 30156 1 0 0 Fermi2002_100.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 30157 1 0 0 Fermi2002_100.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 30158 1 0 0 Fermi2002_100.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 30159 1 0 0 Fermi2002_100.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 30160 1 0 0 Fermi2002_100.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 30161 1 0 0 Fermi2002_100.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 30162 1 0 0 Fermi2002_100.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 30163 1 0 0 Fermi2002_100.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 30164 1 0 0 Fermi2002_100.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 30165 1 0 0 Fermi2002_100.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 30166 1 0 0 Fermi2002_100.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 30167 1 0 0 Fermi2002_100.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 30168 1 0 0 Fermi2002_100.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 30169 1 0 0 Fermi2002_100.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 30170 1 0 0 Fermi2002_100.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 30171 1 0 0 Fermi2002_100.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 30172 1 0 0 Fermi2002_100.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 30173 1 0 0 Fermi2002_100.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 30174 1 0 0 Fermi2002_100.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 30175 1 0 0 Fermi2002_100.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 30176 1 0 0 Fermi2002_100.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 30177 1 0 0 Fermi2002_100.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 30178 1 0 0 Fermi2002_100.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 30179 1 0 0 Fermi2002_100.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 30180 1 0 0 Fermi2002_100.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 30181 1 0 0 Fermi2002_100.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 30182 1 0 0 Fermi2002_100.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 30183 1 0 0 Fermi2002_100.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 30184 1 0 0 Fermi2002_100.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 30185 1 0 0 Fermi2002_100.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 30186 1 0 0 Fermi2002_100.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 30187 1 0 0 Fermi2002_100.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 30188 1 0 0 Fermi2002_100.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 30189 1 0 0 Fermi2002_100.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 30190 1 0 0 Fermi2002_100.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 30191 1 0 0 Fermi2002_100.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 30192 1 0 0 Fermi2002_100.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 30193 1 0 0 Fermi2002_100.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 30194 1 0 0 Fermi2002_100.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 30195 1 0 0 Fermi2002_100.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 30196 1 0 0 Fermi2002_100.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 30197 1 0 0 Fermi2002_100.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 30198 1 0 0 Fermi2002_100.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 30199 1 0 0 Fermi2002_100.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 30200 1 0 0 Fermi2002_100.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 31000 1 0 0 Fermi2002_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Fermi02 31001 1 0 0 Fermi2002_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Fermi02 31002 1 0 0 Fermi2002_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Fermi02 31003 1 0 0 Fermi2002_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Fermi02 31004 1 0 0 Fermi2002_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Fermi02 31005 1 0 0 Fermi2002_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Fermi02 31006 1 0 0 Fermi2002_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Fermi02 31007 1 0 0 Fermi2002_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Fermi02 31008 1 0 0 Fermi2002_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Fermi02 31009 1 0 0 Fermi2002_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Fermi02 31010 1 0 0 Fermi2002_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Fermi02 31011 1 0 0 Fermi2002_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Fermi02 31012 1 0 0 Fermi2002_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Fermi02 31013 1 0 0 Fermi2002_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Fermi02 31014 1 0 0 Fermi2002_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Fermi02 31015 1 0 0 Fermi2002_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Fermi02 31016 1 0 0 Fermi2002_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Fermi02 31017 1 0 0 Fermi2002_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Fermi02 31018 1 0 0 Fermi2002_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Fermi02 31019 1 0 0 Fermi2002_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Fermi02 31020 1 0 0 Fermi2002_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Fermi02 31021 1 0 0 Fermi2002_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Fermi02 31022 1 0 0 Fermi2002_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Fermi02 31023 1 0 0 Fermi2002_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Fermi02 31024 1 0 0 Fermi2002_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Fermi02 31025 1 0 0 Fermi2002_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Fermi02 31026 1 0 0 Fermi2002_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Fermi02 31027 1 0 0 Fermi2002_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Fermi02 31028 1 0 0 Fermi2002_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Fermi02 31029 1 0 0 Fermi2002_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Fermi02 31030 1 0 0 Fermi2002_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Fermi02 31031 1 0 0 Fermi2002_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Fermi02 31032 1 0 0 Fermi2002_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Fermi02 31033 1 0 0 Fermi2002_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Fermi02 31034 1 0 0 Fermi2002_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Fermi02 31035 1 0 0 Fermi2002_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Fermi02 31036 1 0 0 Fermi2002_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Fermi02 31037 1 0 0 Fermi2002_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Fermi02 31038 1 0 0 Fermi2002_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Fermi02 31039 1 0 0 Fermi2002_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Fermi02 31040 1 0 0 Fermi2002_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Fermi02 31041 1 0 0 Fermi2002_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Fermi02 31042 1 0 0 Fermi2002_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Fermi02 31043 1 0 0 Fermi2002_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Fermi02 31044 1 0 0 Fermi2002_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Fermi02 31045 1 0 0 Fermi2002_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Fermi02 31046 1 0 0 Fermi2002_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Fermi02 31047 1 0 0 Fermi2002_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Fermi02 31048 1 0 0 Fermi2002_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Fermi02 31049 1 0 0 Fermi2002_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Fermi02 31050 1 0 0 Fermi2002_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Fermi02 31051 1 0 0 Fermi2002_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Fermi02 31052 1 0 0 Fermi2002_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Fermi02 31053 1 0 0 Fermi2002_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Fermi02 31054 1 0 0 Fermi2002_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Fermi02 31055 1 0 0 Fermi2002_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Fermi02 31056 1 0 0 Fermi2002_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Fermi02 31057 1 0 0 Fermi2002_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Fermi02 31058 1 0 0 Fermi2002_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Fermi02 31059 1 0 0 Fermi2002_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Fermi02 31060 1 0 0 Fermi2002_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Fermi02 31061 1 0 0 Fermi2002_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Fermi02 31062 1 0 0 Fermi2002_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Fermi02 31063 1 0 0 Fermi2002_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Fermi02 31064 1 0 0 Fermi2002_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Fermi02 31065 1 0 0 Fermi2002_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Fermi02 31066 1 0 0 Fermi2002_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Fermi02 31067 1 0 0 Fermi2002_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Fermi02 31068 1 0 0 Fermi2002_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Fermi02 31069 1 0 0 Fermi2002_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Fermi02 31070 1 0 0 Fermi2002_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Fermi02 31071 1 0 0 Fermi2002_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Fermi02 31072 1 0 0 Fermi2002_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Fermi02 31073 1 0 0 Fermi2002_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Fermi02 31074 1 0 0 Fermi2002_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Fermi02 31075 1 0 0 Fermi2002_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Fermi02 31076 1 0 0 Fermi2002_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Fermi02 31077 1 0 0 Fermi2002_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Fermi02 31078 1 0 0 Fermi2002_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Fermi02 31079 1 0 0 Fermi2002_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Fermi02 31080 1 0 0 Fermi2002_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Fermi02 31081 1 0 0 Fermi2002_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Fermi02 31082 1 0 0 Fermi2002_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Fermi02 31083 1 0 0 Fermi2002_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Fermi02 31084 1 0 0 Fermi2002_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Fermi02 31085 1 0 0 Fermi2002_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Fermi02 31086 1 0 0 Fermi2002_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Fermi02 31087 1 0 0 Fermi2002_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Fermi02 31088 1 0 0 Fermi2002_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Fermi02 31089 1 0 0 Fermi2002_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Fermi02 31090 1 0 0 Fermi2002_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Fermi02 31091 1 0 0 Fermi2002_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Fermi02 31092 1 0 0 Fermi2002_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Fermi02 31093 1 0 0 Fermi2002_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Fermi02 31094 1 0 0 Fermi2002_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Fermi02 31095 1 0 0 Fermi2002_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Fermi02 31096 1 0 0 Fermi2002_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Fermi02 31097 1 0 0 Fermi2002_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Fermi02 31098 1 0 0 Fermi2002_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Fermi02 31099 1 0 0 Fermi2002_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Fermi02 31100 1 0 0 Fermi2002_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Fermi02 31101 1 0 0 Fermi2002_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Fermi02 31102 1 0 0 Fermi2002_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Fermi02 31103 1 0 0 Fermi2002_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Fermi02 31104 1 0 0 Fermi2002_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Fermi02 31105 1 0 0 Fermi2002_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Fermi02 31106 1 0 0 Fermi2002_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Fermi02 31107 1 0 0 Fermi2002_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Fermi02 31108 1 0 0 Fermi2002_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Fermi02 31109 1 0 0 Fermi2002_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Fermi02 31110 1 0 0 Fermi2002_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Fermi02 31111 1 0 0 Fermi2002_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Fermi02 31112 1 0 0 Fermi2002_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Fermi02 31113 1 0 0 Fermi2002_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Fermi02 31114 1 0 0 Fermi2002_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Fermi02 31115 1 0 0 Fermi2002_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Fermi02 31116 1 0 0 Fermi2002_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Fermi02 31117 1 0 0 Fermi2002_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Fermi02 31118 1 0 0 Fermi2002_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Fermi02 31119 1 0 0 Fermi2002_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Fermi02 31120 1 0 0 Fermi2002_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Fermi02 31121 1 0 0 Fermi2002_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Fermi02 31122 1 0 0 Fermi2002_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Fermi02 31123 1 0 0 Fermi2002_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Fermi02 31124 1 0 0 Fermi2002_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Fermi02 31125 1 0 0 Fermi2002_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Fermi02 31126 1 0 0 Fermi2002_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Fermi02 31127 1 0 0 Fermi2002_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Fermi02 31128 1 0 0 Fermi2002_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Fermi02 31129 1 0 0 Fermi2002_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Fermi02 31130 1 0 0 Fermi2002_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Fermi02 31131 1 0 0 Fermi2002_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Fermi02 31132 1 0 0 Fermi2002_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Fermi02 31133 1 0 0 Fermi2002_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Fermi02 31134 1 0 0 Fermi2002_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Fermi02 31135 1 0 0 Fermi2002_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Fermi02 31136 1 0 0 Fermi2002_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Fermi02 31137 1 0 0 Fermi2002_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Fermi02 31138 1 0 0 Fermi2002_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Fermi02 31139 1 0 0 Fermi2002_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Fermi02 31140 1 0 0 Fermi2002_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Fermi02 31141 1 0 0 Fermi2002_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Fermi02 31142 1 0 0 Fermi2002_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Fermi02 31143 1 0 0 Fermi2002_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Fermi02 31144 1 0 0 Fermi2002_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Fermi02 31145 1 0 0 Fermi2002_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Fermi02 31146 1 0 0 Fermi2002_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Fermi02 31147 1 0 0 Fermi2002_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Fermi02 31148 1 0 0 Fermi2002_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Fermi02 31149 1 0 0 Fermi2002_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Fermi02 31150 1 0 0 Fermi2002_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Fermi02 31151 1 0 0 Fermi2002_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Fermi02 31152 1 0 0 Fermi2002_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Fermi02 31153 1 0 0 Fermi2002_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Fermi02 31154 1 0 0 Fermi2002_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Fermi02 31155 1 0 0 Fermi2002_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Fermi02 31156 1 0 0 Fermi2002_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Fermi02 31157 1 0 0 Fermi2002_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Fermi02 31158 1 0 0 Fermi2002_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Fermi02 31159 1 0 0 Fermi2002_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Fermi02 31160 1 0 0 Fermi2002_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Fermi02 31161 1 0 0 Fermi2002_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Fermi02 31162 1 0 0 Fermi2002_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Fermi02 31163 1 0 0 Fermi2002_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Fermi02 31164 1 0 0 Fermi2002_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Fermi02 31165 1 0 0 Fermi2002_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Fermi02 31166 1 0 0 Fermi2002_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Fermi02 31167 1 0 0 Fermi2002_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Fermi02 31168 1 0 0 Fermi2002_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Fermi02 31169 1 0 0 Fermi2002_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Fermi02 31170 1 0 0 Fermi2002_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Fermi02 31171 1 0 0 Fermi2002_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Fermi02 31172 1 0 0 Fermi2002_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Fermi02 31173 1 0 0 Fermi2002_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Fermi02 31174 1 0 0 Fermi2002_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Fermi02 31175 1 0 0 Fermi2002_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Fermi02 31176 1 0 0 Fermi2002_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Fermi02 31177 1 0 0 Fermi2002_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Fermi02 31178 1 0 0 Fermi2002_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Fermi02 31179 1 0 0 Fermi2002_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Fermi02 31180 1 0 0 Fermi2002_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Fermi02 31181 1 0 0 Fermi2002_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Fermi02 31182 1 0 0 Fermi2002_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Fermi02 31183 1 0 0 Fermi2002_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Fermi02 31184 1 0 0 Fermi2002_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Fermi02 31185 1 0 0 Fermi2002_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Fermi02 31186 1 0 0 Fermi2002_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Fermi02 31187 1 0 0 Fermi2002_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Fermi02 31188 1 0 0 Fermi2002_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Fermi02 31189 1 0 0 Fermi2002_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Fermi02 31190 1 0 0 Fermi2002_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Fermi02 31191 1 0 0 Fermi2002_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Fermi02 31192 1 0 0 Fermi2002_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Fermi02 31193 1 0 0 Fermi2002_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Fermi02 31194 1 0 0 Fermi2002_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Fermi02 31195 1 0 0 Fermi2002_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Fermi02 31196 1 0 0 Fermi2002_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Fermi02 31197 1 0 0 Fermi2002_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Fermi02 31198 1 0 0 Fermi2002_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Fermi02 31199 1 0 0 Fermi2002_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Fermi02 31200 1 0 0 Fermi2002_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Fermi02 31201 1 0 0 Fermi2002_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Fermi02 31202 1 0 0 Fermi2002_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Fermi02 31203 1 0 0 Fermi2002_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Fermi02 31204 1 0 0 Fermi2002_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Fermi02 31205 1 0 0 Fermi2002_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Fermi02 31206 1 0 0 Fermi2002_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Fermi02 31207 1 0 0 Fermi2002_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Fermi02 31208 1 0 0 Fermi2002_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Fermi02 31209 1 0 0 Fermi2002_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Fermi02 31210 1 0 0 Fermi2002_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Fermi02 31211 1 0 0 Fermi2002_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Fermi02 31212 1 0 0 Fermi2002_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Fermi02 31213 1 0 0 Fermi2002_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Fermi02 31214 1 0 0 Fermi2002_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Fermi02 31215 1 0 0 Fermi2002_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Fermi02 31216 1 0 0 Fermi2002_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Fermi02 31217 1 0 0 Fermi2002_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Fermi02 31218 1 0 0 Fermi2002_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Fermi02 31219 1 0 0 Fermi2002_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Fermi02 31220 1 0 0 Fermi2002_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Fermi02 31221 1 0 0 Fermi2002_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Fermi02 31222 1 0 0 Fermi2002_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Fermi02 31223 1 0 0 Fermi2002_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Fermi02 31224 1 0 0 Fermi2002_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Fermi02 31225 1 0 0 Fermi2002_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Fermi02 31226 1 0 0 Fermi2002_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Fermi02 31227 1 0 0 Fermi2002_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Fermi02 31228 1 0 0 Fermi2002_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Fermi02 31229 1 0 0 Fermi2002_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Fermi02 31230 1 0 0 Fermi2002_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Fermi02 31231 1 0 0 Fermi2002_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Fermi02 31232 1 0 0 Fermi2002_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Fermi02 31233 1 0 0 Fermi2002_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Fermi02 31234 1 0 0 Fermi2002_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Fermi02 31235 1 0 0 Fermi2002_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Fermi02 31236 1 0 0 Fermi2002_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Fermi02 31237 1 0 0 Fermi2002_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Fermi02 31238 1 0 0 Fermi2002_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Fermi02 31239 1 0 0 Fermi2002_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Fermi02 31240 1 0 0 Fermi2002_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Fermi02 31241 1 0 0 Fermi2002_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Fermi02 31242 1 0 0 Fermi2002_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Fermi02 31243 1 0 0 Fermi2002_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Fermi02 31244 1 0 0 Fermi2002_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Fermi02 31245 1 0 0 Fermi2002_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Fermi02 31246 1 0 0 Fermi2002_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Fermi02 31247 1 0 0 Fermi2002_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Fermi02 31248 1 0 0 Fermi2002_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Fermi02 31249 1 0 0 Fermi2002_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Fermi02 31250 1 0 0 Fermi2002_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Fermi02 31251 1 0 0 Fermi2002_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Fermi02 31252 1 0 0 Fermi2002_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Fermi02 31253 1 0 0 Fermi2002_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Fermi02 31254 1 0 0 Fermi2002_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Fermi02 31255 1 0 0 Fermi2002_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Fermi02 31256 1 0 0 Fermi2002_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Fermi02 31257 1 0 0 Fermi2002_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Fermi02 31258 1 0 0 Fermi2002_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Fermi02 31259 1 0 0 Fermi2002_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Fermi02 31260 1 0 0 Fermi2002_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Fermi02 31261 1 0 0 Fermi2002_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Fermi02 31262 1 0 0 Fermi2002_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Fermi02 31263 1 0 0 Fermi2002_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Fermi02 31264 1 0 0 Fermi2002_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Fermi02 31265 1 0 0 Fermi2002_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Fermi02 31266 1 0 0 Fermi2002_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Fermi02 31267 1 0 0 Fermi2002_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Fermi02 31268 1 0 0 Fermi2002_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Fermi02 31269 1 0 0 Fermi2002_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Fermi02 31270 1 0 0 Fermi2002_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Fermi02 31271 1 0 0 Fermi2002_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Fermi02 31272 1 0 0 Fermi2002_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Fermi02 31273 1 0 0 Fermi2002_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Fermi02 31274 1 0 0 Fermi2002_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Fermi02 31275 1 0 0 Fermi2002_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Fermi02 31276 1 0 0 Fermi2002_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Fermi02 31277 1 0 0 Fermi2002_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Fermi02 31278 1 0 0 Fermi2002_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Fermi02 31279 1 0 0 Fermi2002_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Fermi02 31280 1 0 0 Fermi2002_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Fermi02 31281 1 0 0 Fermi2002_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Fermi02 31282 1 0 0 Fermi2002_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Fermi02 31283 1 0 0 Fermi2002_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Fermi02 31284 1 0 0 Fermi2002_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Fermi02 31285 1 0 0 Fermi2002_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Fermi02 31286 1 0 0 Fermi2002_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Fermi02 31287 1 0 0 Fermi2002_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Fermi02 31288 1 0 0 Fermi2002_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Fermi02 31289 1 0 0 Fermi2002_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Fermi02 31290 1 0 0 Fermi2002_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Fermi02 31291 1 0 0 Fermi2002_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Fermi02 31292 1 0 0 Fermi2002_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Fermi02 31293 1 0 0 Fermi2002_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Fermi02 31294 1 0 0 Fermi2002_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Fermi02 31295 1 0 0 Fermi2002_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Fermi02 31296 1 0 0 Fermi2002_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Fermi02 31297 1 0 0 Fermi2002_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Fermi02 31298 1 0 0 Fermi2002_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Fermi02 31299 1 0 0 Fermi2002_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Fermi02 31300 1 0 0 Fermi2002_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Fermi02 31301 1 0 0 Fermi2002_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Fermi02 31302 1 0 0 Fermi2002_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Fermi02 31303 1 0 0 Fermi2002_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Fermi02 31304 1 0 0 Fermi2002_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Fermi02 31305 1 0 0 Fermi2002_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Fermi02 31306 1 0 0 Fermi2002_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Fermi02 31307 1 0 0 Fermi2002_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Fermi02 31308 1 0 0 Fermi2002_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Fermi02 31309 1 0 0 Fermi2002_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Fermi02 31310 1 0 0 Fermi2002_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Fermi02 31311 1 0 0 Fermi2002_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Fermi02 31312 1 0 0 Fermi2002_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Fermi02 31313 1 0 0 Fermi2002_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Fermi02 31314 1 0 0 Fermi2002_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Fermi02 31315 1 0 0 Fermi2002_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Fermi02 31316 1 0 0 Fermi2002_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Fermi02 31317 1 0 0 Fermi2002_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Fermi02 31318 1 0 0 Fermi2002_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Fermi02 31319 1 0 0 Fermi2002_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Fermi02 31320 1 0 0 Fermi2002_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Fermi02 31321 1 0 0 Fermi2002_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Fermi02 31322 1 0 0 Fermi2002_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Fermi02 31323 1 0 0 Fermi2002_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Fermi02 31324 1 0 0 Fermi2002_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Fermi02 31325 1 0 0 Fermi2002_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Fermi02 31326 1 0 0 Fermi2002_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Fermi02 31327 1 0 0 Fermi2002_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Fermi02 31328 1 0 0 Fermi2002_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Fermi02 31329 1 0 0 Fermi2002_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Fermi02 31330 1 0 0 Fermi2002_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Fermi02 31331 1 0 0 Fermi2002_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Fermi02 31332 1 0 0 Fermi2002_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Fermi02 31333 1 0 0 Fermi2002_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Fermi02 31334 1 0 0 Fermi2002_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Fermi02 31335 1 0 0 Fermi2002_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Fermi02 31336 1 0 0 Fermi2002_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Fermi02 31337 1 0 0 Fermi2002_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Fermi02 31338 1 0 0 Fermi2002_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Fermi02 31339 1 0 0 Fermi2002_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Fermi02 31340 1 0 0 Fermi2002_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Fermi02 31341 1 0 0 Fermi2002_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Fermi02 31342 1 0 0 Fermi2002_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Fermi02 31343 1 0 0 Fermi2002_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Fermi02 31344 1 0 0 Fermi2002_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Fermi02 31345 1 0 0 Fermi2002_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Fermi02 31346 1 0 0 Fermi2002_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Fermi02 31347 1 0 0 Fermi2002_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Fermi02 31348 1 0 0 Fermi2002_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Fermi02 31349 1 0 0 Fermi2002_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Fermi02 31350 1 0 0 Fermi2002_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Fermi02 31351 1 0 0 Fermi2002_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Fermi02 31352 1 0 0 Fermi2002_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Fermi02 31353 1 0 0 Fermi2002_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Fermi02 31354 1 0 0 Fermi2002_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Fermi02 31355 1 0 0 Fermi2002_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Fermi02 31356 1 0 0 Fermi2002_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Fermi02 31357 1 0 0 Fermi2002_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Fermi02 31358 1 0 0 Fermi2002_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Fermi02 31359 1 0 0 Fermi2002_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Fermi02 31360 1 0 0 Fermi2002_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Fermi02 31361 1 0 0 Fermi2002_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Fermi02 31362 1 0 0 Fermi2002_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Fermi02 31363 1 0 0 Fermi2002_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Fermi02 31364 1 0 0 Fermi2002_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Fermi02 31365 1 0 0 Fermi2002_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Fermi02 31366 1 0 0 Fermi2002_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Fermi02 31367 1 0 0 Fermi2002_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Fermi02 31368 1 0 0 Fermi2002_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Fermi02 31369 1 0 0 Fermi2002_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Fermi02 31370 1 0 0 Fermi2002_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Fermi02 31371 1 0 0 Fermi2002_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Fermi02 31372 1 0 0 Fermi2002_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Fermi02 31373 1 0 0 Fermi2002_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Fermi02 31374 1 0 0 Fermi2002_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Fermi02 31375 1 0 0 Fermi2002_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Fermi02 31376 1 0 0 Fermi2002_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Fermi02 31377 1 0 0 Fermi2002_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Fermi02 31378 1 0 0 Fermi2002_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Fermi02 31379 1 0 0 Fermi2002_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Fermi02 31380 1 0 0 Fermi2002_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Fermi02 31381 1 0 0 Fermi2002_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Fermi02 31382 1 0 0 Fermi2002_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Fermi02 31383 1 0 0 Fermi2002_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Fermi02 31384 1 0 0 Fermi2002_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Fermi02 31385 1 0 0 Fermi2002_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Fermi02 31386 1 0 0 Fermi2002_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Fermi02 31387 1 0 0 Fermi2002_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Fermi02 31388 1 0 0 Fermi2002_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Fermi02 31389 1 0 0 Fermi2002_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Fermi02 31390 1 0 0 Fermi2002_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Fermi02 31391 1 0 0 Fermi2002_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Fermi02 31392 1 0 0 Fermi2002_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Fermi02 31393 1 0 0 Fermi2002_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Fermi02 31394 1 0 0 Fermi2002_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Fermi02 31395 1 0 0 Fermi2002_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Fermi02 31396 1 0 0 Fermi2002_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Fermi02 31397 1 0 0 Fermi2002_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Fermi02 31398 1 0 0 Fermi2002_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Fermi02 31399 1 0 0 Fermi2002_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Fermi02 31400 1 0 0 Fermi2002_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Fermi02 31401 1 0 0 Fermi2002_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Fermi02 31402 1 0 0 Fermi2002_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Fermi02 31403 1 0 0 Fermi2002_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Fermi02 31404 1 0 0 Fermi2002_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Fermi02 31405 1 0 0 Fermi2002_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Fermi02 31406 1 0 0 Fermi2002_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Fermi02 31407 1 0 0 Fermi2002_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Fermi02 31408 1 0 0 Fermi2002_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Fermi02 31409 1 0 0 Fermi2002_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Fermi02 31410 1 0 0 Fermi2002_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Fermi02 31411 1 0 0 Fermi2002_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Fermi02 31412 1 0 0 Fermi2002_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Fermi02 31413 1 0 0 Fermi2002_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Fermi02 31414 1 0 0 Fermi2002_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Fermi02 31415 1 0 0 Fermi2002_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Fermi02 31416 1 0 0 Fermi2002_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Fermi02 31417 1 0 0 Fermi2002_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Fermi02 31418 1 0 0 Fermi2002_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Fermi02 31419 1 0 0 Fermi2002_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Fermi02 31420 1 0 0 Fermi2002_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Fermi02 31421 1 0 0 Fermi2002_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Fermi02 31422 1 0 0 Fermi2002_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Fermi02 31423 1 0 0 Fermi2002_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Fermi02 31424 1 0 0 Fermi2002_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Fermi02 31425 1 0 0 Fermi2002_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Fermi02 31426 1 0 0 Fermi2002_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Fermi02 31427 1 0 0 Fermi2002_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Fermi02 31428 1 0 0 Fermi2002_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Fermi02 31429 1 0 0 Fermi2002_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Fermi02 31430 1 0 0 Fermi2002_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Fermi02 31431 1 0 0 Fermi2002_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Fermi02 31432 1 0 0 Fermi2002_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Fermi02 31433 1 0 0 Fermi2002_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Fermi02 31434 1 0 0 Fermi2002_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Fermi02 31435 1 0 0 Fermi2002_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Fermi02 31436 1 0 0 Fermi2002_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Fermi02 31437 1 0 0 Fermi2002_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Fermi02 31438 1 0 0 Fermi2002_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Fermi02 31439 1 0 0 Fermi2002_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Fermi02 31440 1 0 0 Fermi2002_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Fermi02 31441 1 0 0 Fermi2002_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Fermi02 31442 1 0 0 Fermi2002_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Fermi02 31443 1 0 0 Fermi2002_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Fermi02 31444 1 0 0 Fermi2002_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Fermi02 31445 1 0 0 Fermi2002_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Fermi02 31446 1 0 0 Fermi2002_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Fermi02 31447 1 0 0 Fermi2002_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Fermi02 31448 1 0 0 Fermi2002_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Fermi02 31449 1 0 0 Fermi2002_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Fermi02 31450 1 0 0 Fermi2002_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Fermi02 31451 1 0 0 Fermi2002_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Fermi02 31452 1 0 0 Fermi2002_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Fermi02 31453 1 0 0 Fermi2002_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Fermi02 31454 1 0 0 Fermi2002_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Fermi02 31455 1 0 0 Fermi2002_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Fermi02 31456 1 0 0 Fermi2002_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Fermi02 31457 1 0 0 Fermi2002_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Fermi02 31458 1 0 0 Fermi2002_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Fermi02 31459 1 0 0 Fermi2002_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Fermi02 31460 1 0 0 Fermi2002_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Fermi02 31461 1 0 0 Fermi2002_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Fermi02 31462 1 0 0 Fermi2002_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Fermi02 31463 1 0 0 Fermi2002_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Fermi02 31464 1 0 0 Fermi2002_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Fermi02 31465 1 0 0 Fermi2002_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Fermi02 31466 1 0 0 Fermi2002_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Fermi02 31467 1 0 0 Fermi2002_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Fermi02 31468 1 0 0 Fermi2002_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Fermi02 31469 1 0 0 Fermi2002_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Fermi02 31470 1 0 0 Fermi2002_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Fermi02 31471 1 0 0 Fermi2002_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Fermi02 31472 1 0 0 Fermi2002_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Fermi02 31473 1 0 0 Fermi2002_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Fermi02 31474 1 0 0 Fermi2002_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Fermi02 31475 1 0 0 Fermi2002_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Fermi02 31476 1 0 0 Fermi2002_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Fermi02 31477 1 0 0 Fermi2002_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Fermi02 31478 1 0 0 Fermi2002_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Fermi02 31479 1 0 0 Fermi2002_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Fermi02 31480 1 0 0 Fermi2002_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Fermi02 31481 1 0 0 Fermi2002_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Fermi02 31482 1 0 0 Fermi2002_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Fermi02 31483 1 0 0 Fermi2002_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Fermi02 31484 1 0 0 Fermi2002_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Fermi02 31485 1 0 0 Fermi2002_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Fermi02 31486 1 0 0 Fermi2002_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Fermi02 31487 1 0 0 Fermi2002_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Fermi02 31488 1 0 0 Fermi2002_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Fermi02 31489 1 0 0 Fermi2002_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Fermi02 31490 1 0 0 Fermi2002_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Fermi02 31491 1 0 0 Fermi2002_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Fermi02 31492 1 0 0 Fermi2002_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Fermi02 31493 1 0 0 Fermi2002_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Fermi02 31494 1 0 0 Fermi2002_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Fermi02 31495 1 0 0 Fermi2002_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Fermi02 31496 1 0 0 Fermi2002_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Fermi02 31497 1 0 0 Fermi2002_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Fermi02 31498 1 0 0 Fermi2002_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Fermi02 31499 1 0 0 Fermi2002_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Fermi02 31500 1 0 0 Fermi2002_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Fermi02 31501 1 0 0 Fermi2002_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Fermi02 31502 1 0 0 Fermi2002_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Fermi02 31503 1 0 0 Fermi2002_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Fermi02 31504 1 0 0 Fermi2002_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Fermi02 31505 1 0 0 Fermi2002_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Fermi02 31506 1 0 0 Fermi2002_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Fermi02 31507 1 0 0 Fermi2002_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Fermi02 31508 1 0 0 Fermi2002_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Fermi02 31509 1 0 0 Fermi2002_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Fermi02 31510 1 0 0 Fermi2002_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Fermi02 31511 1 0 0 Fermi2002_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Fermi02 31512 1 0 0 Fermi2002_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Fermi02 31513 1 0 0 Fermi2002_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Fermi02 31514 1 0 0 Fermi2002_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Fermi02 31515 1 0 0 Fermi2002_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Fermi02 31516 1 0 0 Fermi2002_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Fermi02 31517 1 0 0 Fermi2002_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Fermi02 31518 1 0 0 Fermi2002_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Fermi02 31519 1 0 0 Fermi2002_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Fermi02 31520 1 0 0 Fermi2002_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Fermi02 31521 1 0 0 Fermi2002_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Fermi02 31522 1 0 0 Fermi2002_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Fermi02 31523 1 0 0 Fermi2002_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Fermi02 31524 1 0 0 Fermi2002_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Fermi02 31525 1 0 0 Fermi2002_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Fermi02 31526 1 0 0 Fermi2002_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Fermi02 31527 1 0 0 Fermi2002_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Fermi02 31528 1 0 0 Fermi2002_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Fermi02 31529 1 0 0 Fermi2002_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Fermi02 31530 1 0 0 Fermi2002_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Fermi02 31531 1 0 0 Fermi2002_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Fermi02 31532 1 0 0 Fermi2002_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Fermi02 31533 1 0 0 Fermi2002_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Fermi02 31534 1 0 0 Fermi2002_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Fermi02 31535 1 0 0 Fermi2002_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Fermi02 31536 1 0 0 Fermi2002_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Fermi02 31537 1 0 0 Fermi2002_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Fermi02 31538 1 0 0 Fermi2002_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Fermi02 31539 1 0 0 Fermi2002_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Fermi02 31540 1 0 0 Fermi2002_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Fermi02 31541 1 0 0 Fermi2002_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Fermi02 31542 1 0 0 Fermi2002_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Fermi02 31543 1 0 0 Fermi2002_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Fermi02 31544 1 0 0 Fermi2002_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Fermi02 31545 1 0 0 Fermi2002_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Fermi02 31546 1 0 0 Fermi2002_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Fermi02 31547 1 0 0 Fermi2002_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Fermi02 31548 1 0 0 Fermi2002_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Fermi02 31549 1 0 0 Fermi2002_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Fermi02 31550 1 0 0 Fermi2002_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Fermi02 31551 1 0 0 Fermi2002_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Fermi02 31552 1 0 0 Fermi2002_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Fermi02 31553 1 0 0 Fermi2002_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Fermi02 31554 1 0 0 Fermi2002_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Fermi02 31555 1 0 0 Fermi2002_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Fermi02 31556 1 0 0 Fermi2002_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Fermi02 31557 1 0 0 Fermi2002_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Fermi02 31558 1 0 0 Fermi2002_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Fermi02 31559 1 0 0 Fermi2002_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Fermi02 31560 1 0 0 Fermi2002_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Fermi02 31561 1 0 0 Fermi2002_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Fermi02 31562 1 0 0 Fermi2002_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Fermi02 31563 1 0 0 Fermi2002_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Fermi02 31564 1 0 0 Fermi2002_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Fermi02 31565 1 0 0 Fermi2002_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Fermi02 31566 1 0 0 Fermi2002_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Fermi02 31567 1 0 0 Fermi2002_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Fermi02 31568 1 0 0 Fermi2002_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Fermi02 31569 1 0 0 Fermi2002_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Fermi02 31570 1 0 0 Fermi2002_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Fermi02 31571 1 0 0 Fermi2002_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Fermi02 31572 1 0 0 Fermi2002_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Fermi02 31573 1 0 0 Fermi2002_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Fermi02 31574 1 0 0 Fermi2002_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Fermi02 31575 1 0 0 Fermi2002_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Fermi02 31576 1 0 0 Fermi2002_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Fermi02 31577 1 0 0 Fermi2002_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Fermi02 31578 1 0 0 Fermi2002_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Fermi02 31579 1 0 0 Fermi2002_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Fermi02 31580 1 0 0 Fermi2002_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Fermi02 31581 1 0 0 Fermi2002_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Fermi02 31582 1 0 0 Fermi2002_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Fermi02 31583 1 0 0 Fermi2002_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Fermi02 31584 1 0 0 Fermi2002_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Fermi02 31585 1 0 0 Fermi2002_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Fermi02 31586 1 0 0 Fermi2002_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Fermi02 31587 1 0 0 Fermi2002_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Fermi02 31588 1 0 0 Fermi2002_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Fermi02 31589 1 0 0 Fermi2002_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Fermi02 31590 1 0 0 Fermi2002_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Fermi02 31591 1 0 0 Fermi2002_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Fermi02 31592 1 0 0 Fermi2002_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Fermi02 31593 1 0 0 Fermi2002_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Fermi02 31594 1 0 0 Fermi2002_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Fermi02 31595 1 0 0 Fermi2002_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Fermi02 31596 1 0 0 Fermi2002_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Fermi02 31597 1 0 0 Fermi2002_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Fermi02 31598 1 0 0 Fermi2002_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Fermi02 31599 1 0 0 Fermi2002_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Fermi02 31600 1 0 0 Fermi2002_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Fermi02 31601 1 0 0 Fermi2002_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Fermi02 31602 1 0 0 Fermi2002_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Fermi02 31603 1 0 0 Fermi2002_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Fermi02 31604 1 0 0 Fermi2002_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Fermi02 31605 1 0 0 Fermi2002_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Fermi02 31606 1 0 0 Fermi2002_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Fermi02 31607 1 0 0 Fermi2002_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Fermi02 31608 1 0 0 Fermi2002_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Fermi02 31609 1 0 0 Fermi2002_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Fermi02 31610 1 0 0 Fermi2002_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Fermi02 31611 1 0 0 Fermi2002_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Fermi02 31612 1 0 0 Fermi2002_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Fermi02 31613 1 0 0 Fermi2002_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Fermi02 31614 1 0 0 Fermi2002_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Fermi02 31615 1 0 0 Fermi2002_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Fermi02 31616 1 0 0 Fermi2002_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Fermi02 31617 1 0 0 Fermi2002_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Fermi02 31618 1 0 0 Fermi2002_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Fermi02 31619 1 0 0 Fermi2002_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Fermi02 31620 1 0 0 Fermi2002_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Fermi02 31621 1 0 0 Fermi2002_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Fermi02 31622 1 0 0 Fermi2002_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Fermi02 31623 1 0 0 Fermi2002_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Fermi02 31624 1 0 0 Fermi2002_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Fermi02 31625 1 0 0 Fermi2002_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Fermi02 31626 1 0 0 Fermi2002_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Fermi02 31627 1 0 0 Fermi2002_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Fermi02 31628 1 0 0 Fermi2002_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Fermi02 31629 1 0 0 Fermi2002_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Fermi02 31630 1 0 0 Fermi2002_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Fermi02 31631 1 0 0 Fermi2002_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Fermi02 31632 1 0 0 Fermi2002_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Fermi02 31633 1 0 0 Fermi2002_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Fermi02 31634 1 0 0 Fermi2002_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Fermi02 31635 1 0 0 Fermi2002_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Fermi02 31636 1 0 0 Fermi2002_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Fermi02 31637 1 0 0 Fermi2002_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Fermi02 31638 1 0 0 Fermi2002_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Fermi02 31639 1 0 0 Fermi2002_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Fermi02 31640 1 0 0 Fermi2002_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Fermi02 31641 1 0 0 Fermi2002_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Fermi02 31642 1 0 0 Fermi2002_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Fermi02 31643 1 0 0 Fermi2002_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Fermi02 31644 1 0 0 Fermi2002_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Fermi02 31645 1 0 0 Fermi2002_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Fermi02 31646 1 0 0 Fermi2002_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Fermi02 31647 1 0 0 Fermi2002_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Fermi02 31648 1 0 0 Fermi2002_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Fermi02 31649 1 0 0 Fermi2002_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Fermi02 31650 1 0 0 Fermi2002_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Fermi02 31651 1 0 0 Fermi2002_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Fermi02 31652 1 0 0 Fermi2002_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Fermi02 31653 1 0 0 Fermi2002_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Fermi02 31654 1 0 0 Fermi2002_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Fermi02 31655 1 0 0 Fermi2002_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Fermi02 31656 1 0 0 Fermi2002_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Fermi02 31657 1 0 0 Fermi2002_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Fermi02 31658 1 0 0 Fermi2002_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Fermi02 31659 1 0 0 Fermi2002_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Fermi02 31660 1 0 0 Fermi2002_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Fermi02 31661 1 0 0 Fermi2002_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Fermi02 31662 1 0 0 Fermi2002_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Fermi02 31663 1 0 0 Fermi2002_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Fermi02 31664 1 0 0 Fermi2002_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Fermi02 31665 1 0 0 Fermi2002_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Fermi02 31666 1 0 0 Fermi2002_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Fermi02 31667 1 0 0 Fermi2002_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Fermi02 31668 1 0 0 Fermi2002_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Fermi02 31669 1 0 0 Fermi2002_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Fermi02 31670 1 0 0 Fermi2002_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Fermi02 31671 1 0 0 Fermi2002_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Fermi02 31672 1 0 0 Fermi2002_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Fermi02 31673 1 0 0 Fermi2002_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Fermi02 31674 1 0 0 Fermi2002_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Fermi02 31675 1 0 0 Fermi2002_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Fermi02 31676 1 0 0 Fermi2002_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Fermi02 31677 1 0 0 Fermi2002_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Fermi02 31678 1 0 0 Fermi2002_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Fermi02 31679 1 0 0 Fermi2002_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Fermi02 31680 1 0 0 Fermi2002_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Fermi02 31681 1 0 0 Fermi2002_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Fermi02 31682 1 0 0 Fermi2002_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Fermi02 31683 1 0 0 Fermi2002_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Fermi02 31684 1 0 0 Fermi2002_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Fermi02 31685 1 0 0 Fermi2002_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Fermi02 31686 1 0 0 Fermi2002_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Fermi02 31687 1 0 0 Fermi2002_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Fermi02 31688 1 0 0 Fermi2002_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Fermi02 31689 1 0 0 Fermi2002_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Fermi02 31690 1 0 0 Fermi2002_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Fermi02 31691 1 0 0 Fermi2002_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Fermi02 31692 1 0 0 Fermi2002_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Fermi02 31693 1 0 0 Fermi2002_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Fermi02 31694 1 0 0 Fermi2002_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Fermi02 31695 1 0 0 Fermi2002_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Fermi02 31696 1 0 0 Fermi2002_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Fermi02 31697 1 0 0 Fermi2002_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Fermi02 31698 1 0 0 Fermi2002_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Fermi02 31699 1 0 0 Fermi2002_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Fermi02 31700 1 0 0 Fermi2002_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Fermi02 31701 1 0 0 Fermi2002_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Fermi02 31702 1 0 0 Fermi2002_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Fermi02 31703 1 0 0 Fermi2002_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Fermi02 31704 1 0 0 Fermi2002_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Fermi02 31705 1 0 0 Fermi2002_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Fermi02 31706 1 0 0 Fermi2002_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Fermi02 31707 1 0 0 Fermi2002_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Fermi02 31708 1 0 0 Fermi2002_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Fermi02 31709 1 0 0 Fermi2002_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Fermi02 31710 1 0 0 Fermi2002_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Fermi02 31711 1 0 0 Fermi2002_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Fermi02 31712 1 0 0 Fermi2002_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Fermi02 31713 1 0 0 Fermi2002_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Fermi02 31714 1 0 0 Fermi2002_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Fermi02 31715 1 0 0 Fermi2002_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Fermi02 31716 1 0 0 Fermi2002_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Fermi02 31717 1 0 0 Fermi2002_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Fermi02 31718 1 0 0 Fermi2002_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Fermi02 31719 1 0 0 Fermi2002_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Fermi02 31720 1 0 0 Fermi2002_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Fermi02 31721 1 0 0 Fermi2002_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Fermi02 31722 1 0 0 Fermi2002_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Fermi02 31723 1 0 0 Fermi2002_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Fermi02 31724 1 0 0 Fermi2002_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Fermi02 31725 1 0 0 Fermi2002_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Fermi02 31726 1 0 0 Fermi2002_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Fermi02 31727 1 0 0 Fermi2002_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Fermi02 31728 1 0 0 Fermi2002_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Fermi02 31729 1 0 0 Fermi2002_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Fermi02 31730 1 0 0 Fermi2002_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Fermi02 31731 1 0 0 Fermi2002_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Fermi02 31732 1 0 0 Fermi2002_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Fermi02 31733 1 0 0 Fermi2002_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Fermi02 31734 1 0 0 Fermi2002_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Fermi02 31735 1 0 0 Fermi2002_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Fermi02 31736 1 0 0 Fermi2002_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Fermi02 31737 1 0 0 Fermi2002_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Fermi02 31738 1 0 0 Fermi2002_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Fermi02 31739 1 0 0 Fermi2002_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Fermi02 31740 1 0 0 Fermi2002_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Fermi02 31741 1 0 0 Fermi2002_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Fermi02 31742 1 0 0 Fermi2002_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Fermi02 31743 1 0 0 Fermi2002_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Fermi02 31744 1 0 0 Fermi2002_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Fermi02 31745 1 0 0 Fermi2002_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Fermi02 31746 1 0 0 Fermi2002_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Fermi02 31747 1 0 0 Fermi2002_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Fermi02 31748 1 0 0 Fermi2002_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Fermi02 31749 1 0 0 Fermi2002_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Fermi02 31750 1 0 0 Fermi2002_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Fermi02 31751 1 0 0 Fermi2002_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Fermi02 31752 1 0 0 Fermi2002_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Fermi02 31753 1 0 0 Fermi2002_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Fermi02 31754 1 0 0 Fermi2002_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Fermi02 31755 1 0 0 Fermi2002_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Fermi02 31756 1 0 0 Fermi2002_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Fermi02 31757 1 0 0 Fermi2002_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Fermi02 31758 1 0 0 Fermi2002_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Fermi02 31759 1 0 0 Fermi2002_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Fermi02 31760 1 0 0 Fermi2002_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Fermi02 31761 1 0 0 Fermi2002_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Fermi02 31762 1 0 0 Fermi2002_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Fermi02 31763 1 0 0 Fermi2002_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Fermi02 31764 1 0 0 Fermi2002_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Fermi02 31765 1 0 0 Fermi2002_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Fermi02 31766 1 0 0 Fermi2002_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Fermi02 31767 1 0 0 Fermi2002_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Fermi02 31768 1 0 0 Fermi2002_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Fermi02 31769 1 0 0 Fermi2002_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Fermi02 31770 1 0 0 Fermi2002_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Fermi02 31771 1 0 0 Fermi2002_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Fermi02 31772 1 0 0 Fermi2002_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Fermi02 31773 1 0 0 Fermi2002_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Fermi02 31774 1 0 0 Fermi2002_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Fermi02 31775 1 0 0 Fermi2002_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Fermi02 31776 1 0 0 Fermi2002_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Fermi02 31777 1 0 0 Fermi2002_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Fermi02 31778 1 0 0 Fermi2002_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Fermi02 31779 1 0 0 Fermi2002_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Fermi02 31780 1 0 0 Fermi2002_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Fermi02 31781 1 0 0 Fermi2002_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Fermi02 31782 1 0 0 Fermi2002_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Fermi02 31783 1 0 0 Fermi2002_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Fermi02 31784 1 0 0 Fermi2002_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Fermi02 31785 1 0 0 Fermi2002_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Fermi02 31786 1 0 0 Fermi2002_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Fermi02 31787 1 0 0 Fermi2002_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Fermi02 31788 1 0 0 Fermi2002_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Fermi02 31789 1 0 0 Fermi2002_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Fermi02 31790 1 0 0 Fermi2002_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Fermi02 31791 1 0 0 Fermi2002_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Fermi02 31792 1 0 0 Fermi2002_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Fermi02 31793 1 0 0 Fermi2002_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Fermi02 31794 1 0 0 Fermi2002_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Fermi02 31795 1 0 0 Fermi2002_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Fermi02 31796 1 0 0 Fermi2002_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Fermi02 31797 1 0 0 Fermi2002_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Fermi02 31798 1 0 0 Fermi2002_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Fermi02 31799 1 0 0 Fermi2002_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Fermi02 31800 1 0 0 Fermi2002_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Fermi02 31801 1 0 0 Fermi2002_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Fermi02 31802 1 0 0 Fermi2002_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Fermi02 31803 1 0 0 Fermi2002_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Fermi02 31804 1 0 0 Fermi2002_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Fermi02 31805 1 0 0 Fermi2002_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Fermi02 31806 1 0 0 Fermi2002_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Fermi02 31807 1 0 0 Fermi2002_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Fermi02 31808 1 0 0 Fermi2002_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Fermi02 31809 1 0 0 Fermi2002_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Fermi02 31810 1 0 0 Fermi2002_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Fermi02 31811 1 0 0 Fermi2002_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Fermi02 31812 1 0 0 Fermi2002_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Fermi02 31813 1 0 0 Fermi2002_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Fermi02 31814 1 0 0 Fermi2002_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Fermi02 31815 1 0 0 Fermi2002_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Fermi02 31816 1 0 0 Fermi2002_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Fermi02 31817 1 0 0 Fermi2002_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Fermi02 31818 1 0 0 Fermi2002_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Fermi02 31819 1 0 0 Fermi2002_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Fermi02 31820 1 0 0 Fermi2002_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Fermi02 31821 1 0 0 Fermi2002_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Fermi02 31822 1 0 0 Fermi2002_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Fermi02 31823 1 0 0 Fermi2002_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Fermi02 31824 1 0 0 Fermi2002_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Fermi02 31825 1 0 0 Fermi2002_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Fermi02 31826 1 0 0 Fermi2002_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Fermi02 31827 1 0 0 Fermi2002_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Fermi02 31828 1 0 0 Fermi2002_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Fermi02 31829 1 0 0 Fermi2002_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Fermi02 31830 1 0 0 Fermi2002_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Fermi02 31831 1 0 0 Fermi2002_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Fermi02 31832 1 0 0 Fermi2002_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Fermi02 31833 1 0 0 Fermi2002_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Fermi02 31834 1 0 0 Fermi2002_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Fermi02 31835 1 0 0 Fermi2002_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Fermi02 31836 1 0 0 Fermi2002_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Fermi02 31837 1 0 0 Fermi2002_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Fermi02 31838 1 0 0 Fermi2002_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Fermi02 31839 1 0 0 Fermi2002_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Fermi02 31840 1 0 0 Fermi2002_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Fermi02 31841 1 0 0 Fermi2002_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Fermi02 31842 1 0 0 Fermi2002_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Fermi02 31843 1 0 0 Fermi2002_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Fermi02 31844 1 0 0 Fermi2002_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Fermi02 31845 1 0 0 Fermi2002_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Fermi02 31846 1 0 0 Fermi2002_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Fermi02 31847 1 0 0 Fermi2002_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Fermi02 31848 1 0 0 Fermi2002_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Fermi02 31849 1 0 0 Fermi2002_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Fermi02 31850 1 0 0 Fermi2002_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Fermi02 31851 1 0 0 Fermi2002_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Fermi02 31852 1 0 0 Fermi2002_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Fermi02 31853 1 0 0 Fermi2002_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Fermi02 31854 1 0 0 Fermi2002_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Fermi02 31855 1 0 0 Fermi2002_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Fermi02 31856 1 0 0 Fermi2002_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Fermi02 31857 1 0 0 Fermi2002_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Fermi02 31858 1 0 0 Fermi2002_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Fermi02 31859 1 0 0 Fermi2002_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Fermi02 31860 1 0 0 Fermi2002_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Fermi02 31861 1 0 0 Fermi2002_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Fermi02 31862 1 0 0 Fermi2002_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Fermi02 31863 1 0 0 Fermi2002_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Fermi02 31864 1 0 0 Fermi2002_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Fermi02 31865 1 0 0 Fermi2002_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Fermi02 31866 1 0 0 Fermi2002_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Fermi02 31867 1 0 0 Fermi2002_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Fermi02 31868 1 0 0 Fermi2002_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Fermi02 31869 1 0 0 Fermi2002_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Fermi02 31870 1 0 0 Fermi2002_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Fermi02 31871 1 0 0 Fermi2002_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Fermi02 31872 1 0 0 Fermi2002_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Fermi02 31873 1 0 0 Fermi2002_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Fermi02 31874 1 0 0 Fermi2002_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Fermi02 31875 1 0 0 Fermi2002_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Fermi02 31876 1 0 0 Fermi2002_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Fermi02 31877 1 0 0 Fermi2002_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Fermi02 31878 1 0 0 Fermi2002_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Fermi02 31879 1 0 0 Fermi2002_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Fermi02 31880 1 0 0 Fermi2002_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Fermi02 31881 1 0 0 Fermi2002_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Fermi02 31882 1 0 0 Fermi2002_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Fermi02 31883 1 0 0 Fermi2002_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Fermi02 31884 1 0 0 Fermi2002_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Fermi02 31885 1 0 0 Fermi2002_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Fermi02 31886 1 0 0 Fermi2002_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Fermi02 31887 1 0 0 Fermi2002_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Fermi02 31888 1 0 0 Fermi2002_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Fermi02 31889 1 0 0 Fermi2002_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Fermi02 31890 1 0 0 Fermi2002_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Fermi02 31891 1 0 0 Fermi2002_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Fermi02 31892 1 0 0 Fermi2002_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Fermi02 31893 1 0 0 Fermi2002_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Fermi02 31894 1 0 0 Fermi2002_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Fermi02 31895 1 0 0 Fermi2002_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Fermi02 31896 1 0 0 Fermi2002_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Fermi02 31897 1 0 0 Fermi2002_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Fermi02 31898 1 0 0 Fermi2002_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Fermi02 31899 1 0 0 Fermi2002_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Fermi02 31900 1 0 0 Fermi2002_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Fermi02 31901 1 0 0 Fermi2002_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Fermi02 31902 1 0 0 Fermi2002_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Fermi02 31903 1 0 0 Fermi2002_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Fermi02 31904 1 0 0 Fermi2002_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Fermi02 31905 1 0 0 Fermi2002_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Fermi02 31906 1 0 0 Fermi2002_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Fermi02 31907 1 0 0 Fermi2002_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Fermi02 31908 1 0 0 Fermi2002_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Fermi02 31909 1 0 0 Fermi2002_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Fermi02 31910 1 0 0 Fermi2002_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Fermi02 31911 1 0 0 Fermi2002_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Fermi02 31912 1 0 0 Fermi2002_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Fermi02 31913 1 0 0 Fermi2002_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Fermi02 31914 1 0 0 Fermi2002_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Fermi02 31915 1 0 0 Fermi2002_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Fermi02 31916 1 0 0 Fermi2002_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Fermi02 31917 1 0 0 Fermi2002_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Fermi02 31918 1 0 0 Fermi2002_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Fermi02 31919 1 0 0 Fermi2002_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Fermi02 31920 1 0 0 Fermi2002_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Fermi02 31921 1 0 0 Fermi2002_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Fermi02 31922 1 0 0 Fermi2002_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Fermi02 31923 1 0 0 Fermi2002_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Fermi02 31924 1 0 0 Fermi2002_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Fermi02 31925 1 0 0 Fermi2002_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Fermi02 31926 1 0 0 Fermi2002_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Fermi02 31927 1 0 0 Fermi2002_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Fermi02 31928 1 0 0 Fermi2002_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Fermi02 31929 1 0 0 Fermi2002_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Fermi02 31930 1 0 0 Fermi2002_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Fermi02 31931 1 0 0 Fermi2002_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Fermi02 31932 1 0 0 Fermi2002_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Fermi02 31933 1 0 0 Fermi2002_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Fermi02 31934 1 0 0 Fermi2002_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Fermi02 31935 1 0 0 Fermi2002_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Fermi02 31936 1 0 0 Fermi2002_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Fermi02 31937 1 0 0 Fermi2002_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Fermi02 31938 1 0 0 Fermi2002_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Fermi02 31939 1 0 0 Fermi2002_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Fermi02 31940 1 0 0 Fermi2002_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Fermi02 31941 1 0 0 Fermi2002_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Fermi02 31942 1 0 0 Fermi2002_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Fermi02 31943 1 0 0 Fermi2002_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Fermi02 31944 1 0 0 Fermi2002_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Fermi02 31945 1 0 0 Fermi2002_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Fermi02 31946 1 0 0 Fermi2002_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Fermi02 31947 1 0 0 Fermi2002_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Fermi02 31948 1 0 0 Fermi2002_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Fermi02 31949 1 0 0 Fermi2002_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Fermi02 31950 1 0 0 Fermi2002_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Fermi02 31951 1 0 0 Fermi2002_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Fermi02 31952 1 0 0 Fermi2002_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Fermi02 31953 1 0 0 Fermi2002_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Fermi02 31954 1 0 0 Fermi2002_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Fermi02 31955 1 0 0 Fermi2002_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Fermi02 31956 1 0 0 Fermi2002_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Fermi02 31957 1 0 0 Fermi2002_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Fermi02 31958 1 0 0 Fermi2002_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Fermi02 31959 1 0 0 Fermi2002_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Fermi02 31960 1 0 0 Fermi2002_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Fermi02 31961 1 0 0 Fermi2002_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Fermi02 31962 1 0 0 Fermi2002_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Fermi02 31963 1 0 0 Fermi2002_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Fermi02 31964 1 0 0 Fermi2002_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Fermi02 31965 1 0 0 Fermi2002_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Fermi02 31966 1 0 0 Fermi2002_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Fermi02 31967 1 0 0 Fermi2002_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Fermi02 31968 1 0 0 Fermi2002_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Fermi02 31969 1 0 0 Fermi2002_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Fermi02 31970 1 0 0 Fermi2002_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Fermi02 31971 1 0 0 Fermi2002_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Fermi02 31972 1 0 0 Fermi2002_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Fermi02 31973 1 0 0 Fermi2002_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Fermi02 31974 1 0 0 Fermi2002_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Fermi02 31975 1 0 0 Fermi2002_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Fermi02 31976 1 0 0 Fermi2002_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Fermi02 31977 1 0 0 Fermi2002_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Fermi02 31978 1 0 0 Fermi2002_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Fermi02 31979 1 0 0 Fermi2002_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Fermi02 31980 1 0 0 Fermi2002_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Fermi02 31981 1 0 0 Fermi2002_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Fermi02 31982 1 0 0 Fermi2002_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Fermi02 31983 1 0 0 Fermi2002_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Fermi02 31984 1 0 0 Fermi2002_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Fermi02 31985 1 0 0 Fermi2002_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Fermi02 31986 1 0 0 Fermi2002_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Fermi02 31987 1 0 0 Fermi2002_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Fermi02 31988 1 0 0 Fermi2002_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Fermi02 31989 1 0 0 Fermi2002_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Fermi02 31990 1 0 0 Fermi2002_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Fermi02 31991 1 0 0 Fermi2002_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Fermi02 31992 1 0 0 Fermi2002_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Fermi02 31993 1 0 0 Fermi2002_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Fermi02 31994 1 0 0 Fermi2002_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Fermi02 31995 1 0 0 Fermi2002_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Fermi02 31996 1 0 0 Fermi2002_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Fermi02 31997 1 0 0 Fermi2002_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Fermi02 31998 1 0 0 Fermi2002_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Fermi02 31999 1 0 0 Fermi2002_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Fermi02 32000 1 0 0 Fermi2002_1000.LHpdf 1000 1. 1.E+10 1.E-06 1. Fermi02 40100 1 0 0 Alekhin_100.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 40101 1 0 0 Alekhin_100.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 40102 1 0 0 Alekhin_100.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 40103 1 0 0 Alekhin_100.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 40104 1 0 0 Alekhin_100.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 40105 1 0 0 Alekhin_100.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 40106 1 0 0 Alekhin_100.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 40107 1 0 0 Alekhin_100.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 40108 1 0 0 Alekhin_100.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 40109 1 0 0 Alekhin_100.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 40110 1 0 0 Alekhin_100.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 40111 1 0 0 Alekhin_100.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 40112 1 0 0 Alekhin_100.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 40113 1 0 0 Alekhin_100.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 40114 1 0 0 Alekhin_100.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 40115 1 0 0 Alekhin_100.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 40116 1 0 0 Alekhin_100.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 40117 1 0 0 Alekhin_100.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 40118 1 0 0 Alekhin_100.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 40119 1 0 0 Alekhin_100.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 40120 1 0 0 Alekhin_100.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 40121 1 0 0 Alekhin_100.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 40122 1 0 0 Alekhin_100.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 40123 1 0 0 Alekhin_100.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 40124 1 0 0 Alekhin_100.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 40125 1 0 0 Alekhin_100.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 40126 1 0 0 Alekhin_100.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 40127 1 0 0 Alekhin_100.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 40128 1 0 0 Alekhin_100.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 40129 1 0 0 Alekhin_100.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 40130 1 0 0 Alekhin_100.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 40131 1 0 0 Alekhin_100.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 40132 1 0 0 Alekhin_100.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 40133 1 0 0 Alekhin_100.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 40134 1 0 0 Alekhin_100.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 40135 1 0 0 Alekhin_100.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 40136 1 0 0 Alekhin_100.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 40137 1 0 0 Alekhin_100.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 40138 1 0 0 Alekhin_100.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 40139 1 0 0 Alekhin_100.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 40140 1 0 0 Alekhin_100.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 40141 1 0 0 Alekhin_100.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 40142 1 0 0 Alekhin_100.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 40143 1 0 0 Alekhin_100.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 40144 1 0 0 Alekhin_100.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 40145 1 0 0 Alekhin_100.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 40146 1 0 0 Alekhin_100.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 40147 1 0 0 Alekhin_100.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 40148 1 0 0 Alekhin_100.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 40149 1 0 0 Alekhin_100.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 40150 1 0 0 Alekhin_100.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 40151 1 0 0 Alekhin_100.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 40152 1 0 0 Alekhin_100.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 40153 1 0 0 Alekhin_100.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 40154 1 0 0 Alekhin_100.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 40155 1 0 0 Alekhin_100.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 40156 1 0 0 Alekhin_100.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 40157 1 0 0 Alekhin_100.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 40158 1 0 0 Alekhin_100.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 40159 1 0 0 Alekhin_100.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 40160 1 0 0 Alekhin_100.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 40161 1 0 0 Alekhin_100.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 40162 1 0 0 Alekhin_100.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 40163 1 0 0 Alekhin_100.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 40164 1 0 0 Alekhin_100.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 40165 1 0 0 Alekhin_100.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 40166 1 0 0 Alekhin_100.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 40167 1 0 0 Alekhin_100.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 40168 1 0 0 Alekhin_100.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 40169 1 0 0 Alekhin_100.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 40170 1 0 0 Alekhin_100.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 40171 1 0 0 Alekhin_100.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 40172 1 0 0 Alekhin_100.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 40173 1 0 0 Alekhin_100.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 40174 1 0 0 Alekhin_100.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 40175 1 0 0 Alekhin_100.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 40176 1 0 0 Alekhin_100.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 40177 1 0 0 Alekhin_100.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 40178 1 0 0 Alekhin_100.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 40179 1 0 0 Alekhin_100.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 40180 1 0 0 Alekhin_100.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 40181 1 0 0 Alekhin_100.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 40182 1 0 0 Alekhin_100.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 40183 1 0 0 Alekhin_100.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 40184 1 0 0 Alekhin_100.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 40185 1 0 0 Alekhin_100.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 40186 1 0 0 Alekhin_100.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 40187 1 0 0 Alekhin_100.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 40188 1 0 0 Alekhin_100.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 40189 1 0 0 Alekhin_100.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 40190 1 0 0 Alekhin_100.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 40191 1 0 0 Alekhin_100.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 40192 1 0 0 Alekhin_100.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 40193 1 0 0 Alekhin_100.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 40194 1 0 0 Alekhin_100.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 40195 1 0 0 Alekhin_100.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 40196 1 0 0 Alekhin_100.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 40197 1 0 0 Alekhin_100.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 40198 1 0 0 Alekhin_100.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 40199 1 0 0 Alekhin_100.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 40200 1 0 0 Alekhin_100.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00. 40350 1 0 0 a02m_lo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40351 1 0 0 a02m_lo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40352 1 0 0 a02m_lo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40353 1 0 0 a02m_lo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40354 1 0 0 a02m_lo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40355 1 0 0 a02m_lo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40356 1 0 0 a02m_lo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40357 1 0 0 a02m_lo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40358 1 0 0 a02m_lo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40359 1 0 0 a02m_lo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40360 1 0 0 a02m_lo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40361 1 0 0 a02m_lo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40362 1 0 0 a02m_lo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40363 1 0 0 a02m_lo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40364 1 0 0 a02m_lo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40365 1 0 0 a02m_lo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40366 1 0 0 a02m_lo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40367 1 0 0 a02m_lo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(LO) 40450 1 0 0 a02m_nlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40451 1 0 0 a02m_nlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40452 1 0 0 a02m_nlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40453 1 0 0 a02m_nlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40454 1 0 0 a02m_nlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40455 1 0 0 a02m_nlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40456 1 0 0 a02m_nlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40457 1 0 0 a02m_nlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40458 1 0 0 a02m_nlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40459 1 0 0 a02m_nlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40460 1 0 0 a02m_nlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40461 1 0 0 a02m_nlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40462 1 0 0 a02m_nlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40463 1 0 0 a02m_nlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40464 1 0 0 a02m_nlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40465 1 0 0 a02m_nlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40466 1 0 0 a02m_nlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40467 1 0 0 a02m_nlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NLO) 40550 1 0 0 a02m_nnlo.LHgrid 0 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40551 1 0 0 a02m_nnlo.LHgrid 1 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40552 1 0 0 a02m_nnlo.LHgrid 2 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40553 1 0 0 a02m_nnlo.LHgrid 3 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40554 1 0 0 a02m_nnlo.LHgrid 4 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40555 1 0 0 a02m_nnlo.LHgrid 5 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40556 1 0 0 a02m_nnlo.LHgrid 6 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40557 1 0 0 a02m_nnlo.LHgrid 7 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40558 1 0 0 a02m_nnlo.LHgrid 8 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40559 1 0 0 a02m_nnlo.LHgrid 9 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40560 1 0 0 a02m_nnlo.LHgrid 10 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40561 1 0 0 a02m_nnlo.LHgrid 11 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40562 1 0 0 a02m_nnlo.LHgrid 12 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40563 1 0 0 a02m_nnlo.LHgrid 13 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40564 1 0 0 a02m_nnlo.LHgrid 14 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40565 1 0 0 a02m_nnlo.LHgrid 15 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40566 1 0 0 a02m_nnlo.LHgrid 16 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 40567 1 0 0 a02m_nnlo.LHgrid 17 0.8 200000000. 1.E-07 1. Alekhin02(NNLO) 41000 1 0 0 Alekhin_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Alekhin00 41001 1 0 0 Alekhin_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Alekhin00 41002 1 0 0 Alekhin_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Alekhin00 41003 1 0 0 Alekhin_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Alekhin00 41004 1 0 0 Alekhin_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Alekhin00 41005 1 0 0 Alekhin_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Alekhin00 41006 1 0 0 Alekhin_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Alekhin00 41007 1 0 0 Alekhin_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Alekhin00 41008 1 0 0 Alekhin_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Alekhin00 41009 1 0 0 Alekhin_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Alekhin00 41010 1 0 0 Alekhin_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Alekhin00 41011 1 0 0 Alekhin_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Alekhin00 41012 1 0 0 Alekhin_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Alekhin00 41013 1 0 0 Alekhin_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Alekhin00 41014 1 0 0 Alekhin_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Alekhin00 41015 1 0 0 Alekhin_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Alekhin00 41016 1 0 0 Alekhin_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Alekhin00 41017 1 0 0 Alekhin_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Alekhin00 41018 1 0 0 Alekhin_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Alekhin00 41019 1 0 0 Alekhin_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Alekhin00 41020 1 0 0 Alekhin_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Alekhin00 41021 1 0 0 Alekhin_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Alekhin00 41022 1 0 0 Alekhin_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Alekhin00 41023 1 0 0 Alekhin_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Alekhin00 41024 1 0 0 Alekhin_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Alekhin00 41025 1 0 0 Alekhin_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Alekhin00 41026 1 0 0 Alekhin_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Alekhin00 41027 1 0 0 Alekhin_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Alekhin00 41028 1 0 0 Alekhin_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Alekhin00 41029 1 0 0 Alekhin_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Alekhin00 41030 1 0 0 Alekhin_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Alekhin00 41031 1 0 0 Alekhin_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Alekhin00 41032 1 0 0 Alekhin_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Alekhin00 41033 1 0 0 Alekhin_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Alekhin00 41034 1 0 0 Alekhin_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Alekhin00 41035 1 0 0 Alekhin_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Alekhin00 41036 1 0 0 Alekhin_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Alekhin00 41037 1 0 0 Alekhin_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Alekhin00 41038 1 0 0 Alekhin_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Alekhin00 41039 1 0 0 Alekhin_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Alekhin00 41040 1 0 0 Alekhin_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Alekhin00 41041 1 0 0 Alekhin_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Alekhin00 41042 1 0 0 Alekhin_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Alekhin00 41043 1 0 0 Alekhin_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Alekhin00 41044 1 0 0 Alekhin_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Alekhin00 41045 1 0 0 Alekhin_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Alekhin00 41046 1 0 0 Alekhin_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Alekhin00 41047 1 0 0 Alekhin_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Alekhin00 41048 1 0 0 Alekhin_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Alekhin00 41049 1 0 0 Alekhin_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Alekhin00 41050 1 0 0 Alekhin_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Alekhin00 41051 1 0 0 Alekhin_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Alekhin00 41052 1 0 0 Alekhin_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Alekhin00 41053 1 0 0 Alekhin_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Alekhin00 41054 1 0 0 Alekhin_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Alekhin00 41055 1 0 0 Alekhin_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Alekhin00 41056 1 0 0 Alekhin_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Alekhin00 41057 1 0 0 Alekhin_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Alekhin00 41058 1 0 0 Alekhin_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Alekhin00 41059 1 0 0 Alekhin_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Alekhin00 41060 1 0 0 Alekhin_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Alekhin00 41061 1 0 0 Alekhin_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Alekhin00 41062 1 0 0 Alekhin_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Alekhin00 41063 1 0 0 Alekhin_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Alekhin00 41064 1 0 0 Alekhin_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Alekhin00 41065 1 0 0 Alekhin_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Alekhin00 41066 1 0 0 Alekhin_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Alekhin00 41067 1 0 0 Alekhin_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Alekhin00 41068 1 0 0 Alekhin_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Alekhin00 41069 1 0 0 Alekhin_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Alekhin00 41070 1 0 0 Alekhin_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Alekhin00 41071 1 0 0 Alekhin_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Alekhin00 41072 1 0 0 Alekhin_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Alekhin00 41073 1 0 0 Alekhin_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Alekhin00 41074 1 0 0 Alekhin_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Alekhin00 41075 1 0 0 Alekhin_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Alekhin00 41076 1 0 0 Alekhin_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Alekhin00 41077 1 0 0 Alekhin_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Alekhin00 41078 1 0 0 Alekhin_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Alekhin00 41079 1 0 0 Alekhin_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Alekhin00 41080 1 0 0 Alekhin_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Alekhin00 41081 1 0 0 Alekhin_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Alekhin00 41082 1 0 0 Alekhin_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Alekhin00 41083 1 0 0 Alekhin_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Alekhin00 41084 1 0 0 Alekhin_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Alekhin00 41085 1 0 0 Alekhin_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Alekhin00 41086 1 0 0 Alekhin_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Alekhin00 41087 1 0 0 Alekhin_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Alekhin00 41088 1 0 0 Alekhin_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Alekhin00 41089 1 0 0 Alekhin_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Alekhin00 41090 1 0 0 Alekhin_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Alekhin00 41091 1 0 0 Alekhin_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Alekhin00 41092 1 0 0 Alekhin_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Alekhin00 41093 1 0 0 Alekhin_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Alekhin00 41094 1 0 0 Alekhin_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Alekhin00 41095 1 0 0 Alekhin_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Alekhin00 41096 1 0 0 Alekhin_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Alekhin00 41097 1 0 0 Alekhin_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Alekhin00 41098 1 0 0 Alekhin_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Alekhin00 41099 1 0 0 Alekhin_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Alekhin00 41100 1 0 0 Alekhin_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Alekhin00 41101 1 0 0 Alekhin_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Alekhin00 41102 1 0 0 Alekhin_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Alekhin00 41103 1 0 0 Alekhin_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Alekhin00 41104 1 0 0 Alekhin_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Alekhin00 41105 1 0 0 Alekhin_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Alekhin00 41106 1 0 0 Alekhin_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Alekhin00 41107 1 0 0 Alekhin_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Alekhin00 41108 1 0 0 Alekhin_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Alekhin00 41109 1 0 0 Alekhin_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Alekhin00 41110 1 0 0 Alekhin_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Alekhin00 41111 1 0 0 Alekhin_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Alekhin00 41112 1 0 0 Alekhin_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Alekhin00 41113 1 0 0 Alekhin_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Alekhin00 41114 1 0 0 Alekhin_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Alekhin00 41115 1 0 0 Alekhin_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Alekhin00 41116 1 0 0 Alekhin_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Alekhin00 41117 1 0 0 Alekhin_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Alekhin00 41118 1 0 0 Alekhin_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Alekhin00 41119 1 0 0 Alekhin_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Alekhin00 41120 1 0 0 Alekhin_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Alekhin00 41121 1 0 0 Alekhin_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Alekhin00 41122 1 0 0 Alekhin_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Alekhin00 41123 1 0 0 Alekhin_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Alekhin00 41124 1 0 0 Alekhin_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Alekhin00 41125 1 0 0 Alekhin_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Alekhin00 41126 1 0 0 Alekhin_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Alekhin00 41127 1 0 0 Alekhin_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Alekhin00 41128 1 0 0 Alekhin_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Alekhin00 41129 1 0 0 Alekhin_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Alekhin00 41130 1 0 0 Alekhin_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Alekhin00 41131 1 0 0 Alekhin_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Alekhin00 41132 1 0 0 Alekhin_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Alekhin00 41133 1 0 0 Alekhin_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Alekhin00 41134 1 0 0 Alekhin_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Alekhin00 41135 1 0 0 Alekhin_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Alekhin00 41136 1 0 0 Alekhin_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Alekhin00 41137 1 0 0 Alekhin_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Alekhin00 41138 1 0 0 Alekhin_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Alekhin00 41139 1 0 0 Alekhin_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Alekhin00 41140 1 0 0 Alekhin_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Alekhin00 41141 1 0 0 Alekhin_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Alekhin00 41142 1 0 0 Alekhin_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Alekhin00 41143 1 0 0 Alekhin_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Alekhin00 41144 1 0 0 Alekhin_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Alekhin00 41145 1 0 0 Alekhin_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Alekhin00 41146 1 0 0 Alekhin_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Alekhin00 41147 1 0 0 Alekhin_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Alekhin00 41148 1 0 0 Alekhin_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Alekhin00 41149 1 0 0 Alekhin_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Alekhin00 41150 1 0 0 Alekhin_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Alekhin00 41151 1 0 0 Alekhin_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Alekhin00 41152 1 0 0 Alekhin_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Alekhin00 41153 1 0 0 Alekhin_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Alekhin00 41154 1 0 0 Alekhin_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Alekhin00 41155 1 0 0 Alekhin_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Alekhin00 41156 1 0 0 Alekhin_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Alekhin00 41157 1 0 0 Alekhin_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Alekhin00 41158 1 0 0 Alekhin_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Alekhin00 41159 1 0 0 Alekhin_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Alekhin00 41160 1 0 0 Alekhin_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Alekhin00 41161 1 0 0 Alekhin_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Alekhin00 41162 1 0 0 Alekhin_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Alekhin00 41163 1 0 0 Alekhin_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Alekhin00 41164 1 0 0 Alekhin_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Alekhin00 41165 1 0 0 Alekhin_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Alekhin00 41166 1 0 0 Alekhin_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Alekhin00 41167 1 0 0 Alekhin_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Alekhin00 41168 1 0 0 Alekhin_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Alekhin00 41169 1 0 0 Alekhin_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Alekhin00 41170 1 0 0 Alekhin_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Alekhin00 41171 1 0 0 Alekhin_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Alekhin00 41172 1 0 0 Alekhin_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Alekhin00 41173 1 0 0 Alekhin_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Alekhin00 41174 1 0 0 Alekhin_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Alekhin00 41175 1 0 0 Alekhin_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Alekhin00 41176 1 0 0 Alekhin_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Alekhin00 41177 1 0 0 Alekhin_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Alekhin00 41178 1 0 0 Alekhin_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Alekhin00 41179 1 0 0 Alekhin_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Alekhin00 41180 1 0 0 Alekhin_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Alekhin00 41181 1 0 0 Alekhin_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Alekhin00 41182 1 0 0 Alekhin_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Alekhin00 41183 1 0 0 Alekhin_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Alekhin00 41184 1 0 0 Alekhin_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Alekhin00 41185 1 0 0 Alekhin_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Alekhin00 41186 1 0 0 Alekhin_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Alekhin00 41187 1 0 0 Alekhin_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Alekhin00 41188 1 0 0 Alekhin_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Alekhin00 41189 1 0 0 Alekhin_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Alekhin00 41190 1 0 0 Alekhin_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Alekhin00 41191 1 0 0 Alekhin_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Alekhin00 41192 1 0 0 Alekhin_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Alekhin00 41193 1 0 0 Alekhin_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Alekhin00 41194 1 0 0 Alekhin_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Alekhin00 41195 1 0 0 Alekhin_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Alekhin00 41196 1 0 0 Alekhin_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Alekhin00 41197 1 0 0 Alekhin_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Alekhin00 41198 1 0 0 Alekhin_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Alekhin00 41199 1 0 0 Alekhin_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Alekhin00 41200 1 0 0 Alekhin_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Alekhin00 41201 1 0 0 Alekhin_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Alekhin00 41202 1 0 0 Alekhin_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Alekhin00 41203 1 0 0 Alekhin_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Alekhin00 41204 1 0 0 Alekhin_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Alekhin00 41205 1 0 0 Alekhin_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Alekhin00 41206 1 0 0 Alekhin_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Alekhin00 41207 1 0 0 Alekhin_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Alekhin00 41208 1 0 0 Alekhin_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Alekhin00 41209 1 0 0 Alekhin_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Alekhin00 41210 1 0 0 Alekhin_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Alekhin00 41211 1 0 0 Alekhin_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Alekhin00 41212 1 0 0 Alekhin_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Alekhin00 41213 1 0 0 Alekhin_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Alekhin00 41214 1 0 0 Alekhin_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Alekhin00 41215 1 0 0 Alekhin_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Alekhin00 41216 1 0 0 Alekhin_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Alekhin00 41217 1 0 0 Alekhin_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Alekhin00 41218 1 0 0 Alekhin_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Alekhin00 41219 1 0 0 Alekhin_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Alekhin00 41220 1 0 0 Alekhin_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Alekhin00 41221 1 0 0 Alekhin_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Alekhin00 41222 1 0 0 Alekhin_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Alekhin00 41223 1 0 0 Alekhin_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Alekhin00 41224 1 0 0 Alekhin_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Alekhin00 41225 1 0 0 Alekhin_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Alekhin00 41226 1 0 0 Alekhin_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Alekhin00 41227 1 0 0 Alekhin_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Alekhin00 41228 1 0 0 Alekhin_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Alekhin00 41229 1 0 0 Alekhin_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Alekhin00 41230 1 0 0 Alekhin_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Alekhin00 41231 1 0 0 Alekhin_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Alekhin00 41232 1 0 0 Alekhin_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Alekhin00 41233 1 0 0 Alekhin_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Alekhin00 41234 1 0 0 Alekhin_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Alekhin00 41235 1 0 0 Alekhin_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Alekhin00 41236 1 0 0 Alekhin_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Alekhin00 41237 1 0 0 Alekhin_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Alekhin00 41238 1 0 0 Alekhin_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Alekhin00 41239 1 0 0 Alekhin_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Alekhin00 41240 1 0 0 Alekhin_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Alekhin00 41241 1 0 0 Alekhin_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Alekhin00 41242 1 0 0 Alekhin_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Alekhin00 41243 1 0 0 Alekhin_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Alekhin00 41244 1 0 0 Alekhin_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Alekhin00 41245 1 0 0 Alekhin_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Alekhin00 41246 1 0 0 Alekhin_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Alekhin00 41247 1 0 0 Alekhin_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Alekhin00 41248 1 0 0 Alekhin_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Alekhin00 41249 1 0 0 Alekhin_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Alekhin00 41250 1 0 0 Alekhin_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Alekhin00 41251 1 0 0 Alekhin_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Alekhin00 41252 1 0 0 Alekhin_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Alekhin00 41253 1 0 0 Alekhin_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Alekhin00 41254 1 0 0 Alekhin_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Alekhin00 41255 1 0 0 Alekhin_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Alekhin00 41256 1 0 0 Alekhin_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Alekhin00 41257 1 0 0 Alekhin_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Alekhin00 41258 1 0 0 Alekhin_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Alekhin00 41259 1 0 0 Alekhin_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Alekhin00 41260 1 0 0 Alekhin_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Alekhin00 41261 1 0 0 Alekhin_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Alekhin00 41262 1 0 0 Alekhin_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Alekhin00 41263 1 0 0 Alekhin_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Alekhin00 41264 1 0 0 Alekhin_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Alekhin00 41265 1 0 0 Alekhin_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Alekhin00 41266 1 0 0 Alekhin_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Alekhin00 41267 1 0 0 Alekhin_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Alekhin00 41268 1 0 0 Alekhin_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Alekhin00 41269 1 0 0 Alekhin_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Alekhin00 41270 1 0 0 Alekhin_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Alekhin00 41271 1 0 0 Alekhin_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Alekhin00 41272 1 0 0 Alekhin_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Alekhin00 41273 1 0 0 Alekhin_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Alekhin00 41274 1 0 0 Alekhin_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Alekhin00 41275 1 0 0 Alekhin_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Alekhin00 41276 1 0 0 Alekhin_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Alekhin00 41277 1 0 0 Alekhin_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Alekhin00 41278 1 0 0 Alekhin_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Alekhin00 41279 1 0 0 Alekhin_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Alekhin00 41280 1 0 0 Alekhin_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Alekhin00 41281 1 0 0 Alekhin_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Alekhin00 41282 1 0 0 Alekhin_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Alekhin00 41283 1 0 0 Alekhin_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Alekhin00 41284 1 0 0 Alekhin_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Alekhin00 41285 1 0 0 Alekhin_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Alekhin00 41286 1 0 0 Alekhin_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Alekhin00 41287 1 0 0 Alekhin_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Alekhin00 41288 1 0 0 Alekhin_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Alekhin00 41289 1 0 0 Alekhin_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Alekhin00 41290 1 0 0 Alekhin_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Alekhin00 41291 1 0 0 Alekhin_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Alekhin00 41292 1 0 0 Alekhin_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Alekhin00 41293 1 0 0 Alekhin_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Alekhin00 41294 1 0 0 Alekhin_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Alekhin00 41295 1 0 0 Alekhin_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Alekhin00 41296 1 0 0 Alekhin_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Alekhin00 41297 1 0 0 Alekhin_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Alekhin00 41298 1 0 0 Alekhin_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Alekhin00 41299 1 0 0 Alekhin_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Alekhin00 41300 1 0 0 Alekhin_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Alekhin00 41301 1 0 0 Alekhin_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Alekhin00 41302 1 0 0 Alekhin_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Alekhin00 41303 1 0 0 Alekhin_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Alekhin00 41304 1 0 0 Alekhin_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Alekhin00 41305 1 0 0 Alekhin_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Alekhin00 41306 1 0 0 Alekhin_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Alekhin00 41307 1 0 0 Alekhin_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Alekhin00 41308 1 0 0 Alekhin_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Alekhin00 41309 1 0 0 Alekhin_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Alekhin00 41310 1 0 0 Alekhin_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Alekhin00 41311 1 0 0 Alekhin_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Alekhin00 41312 1 0 0 Alekhin_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Alekhin00 41313 1 0 0 Alekhin_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Alekhin00 41314 1 0 0 Alekhin_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Alekhin00 41315 1 0 0 Alekhin_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Alekhin00 41316 1 0 0 Alekhin_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Alekhin00 41317 1 0 0 Alekhin_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Alekhin00 41318 1 0 0 Alekhin_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Alekhin00 41319 1 0 0 Alekhin_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Alekhin00 41320 1 0 0 Alekhin_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Alekhin00 41321 1 0 0 Alekhin_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Alekhin00 41322 1 0 0 Alekhin_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Alekhin00 41323 1 0 0 Alekhin_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Alekhin00 41324 1 0 0 Alekhin_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Alekhin00 41325 1 0 0 Alekhin_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Alekhin00 41326 1 0 0 Alekhin_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Alekhin00 41327 1 0 0 Alekhin_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Alekhin00 41328 1 0 0 Alekhin_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Alekhin00 41329 1 0 0 Alekhin_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Alekhin00 41330 1 0 0 Alekhin_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Alekhin00 41331 1 0 0 Alekhin_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Alekhin00 41332 1 0 0 Alekhin_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Alekhin00 41333 1 0 0 Alekhin_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Alekhin00 41334 1 0 0 Alekhin_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Alekhin00 41335 1 0 0 Alekhin_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Alekhin00 41336 1 0 0 Alekhin_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Alekhin00 41337 1 0 0 Alekhin_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Alekhin00 41338 1 0 0 Alekhin_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Alekhin00 41339 1 0 0 Alekhin_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Alekhin00 41340 1 0 0 Alekhin_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Alekhin00 41341 1 0 0 Alekhin_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Alekhin00 41342 1 0 0 Alekhin_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Alekhin00 41343 1 0 0 Alekhin_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Alekhin00 41344 1 0 0 Alekhin_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Alekhin00 41345 1 0 0 Alekhin_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Alekhin00 41346 1 0 0 Alekhin_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Alekhin00 41347 1 0 0 Alekhin_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Alekhin00 41348 1 0 0 Alekhin_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Alekhin00 41349 1 0 0 Alekhin_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Alekhin00 41350 1 0 0 Alekhin_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Alekhin00 41351 1 0 0 Alekhin_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Alekhin00 41352 1 0 0 Alekhin_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Alekhin00 41353 1 0 0 Alekhin_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Alekhin00 41354 1 0 0 Alekhin_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Alekhin00 41355 1 0 0 Alekhin_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Alekhin00 41356 1 0 0 Alekhin_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Alekhin00 41357 1 0 0 Alekhin_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Alekhin00 41358 1 0 0 Alekhin_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Alekhin00 41359 1 0 0 Alekhin_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Alekhin00 41360 1 0 0 Alekhin_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Alekhin00 41361 1 0 0 Alekhin_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Alekhin00 41362 1 0 0 Alekhin_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Alekhin00 41363 1 0 0 Alekhin_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Alekhin00 41364 1 0 0 Alekhin_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Alekhin00 41365 1 0 0 Alekhin_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Alekhin00 41366 1 0 0 Alekhin_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Alekhin00 41367 1 0 0 Alekhin_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Alekhin00 41368 1 0 0 Alekhin_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Alekhin00 41369 1 0 0 Alekhin_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Alekhin00 41370 1 0 0 Alekhin_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Alekhin00 41371 1 0 0 Alekhin_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Alekhin00 41372 1 0 0 Alekhin_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Alekhin00 41373 1 0 0 Alekhin_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Alekhin00 41374 1 0 0 Alekhin_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Alekhin00 41375 1 0 0 Alekhin_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Alekhin00 41376 1 0 0 Alekhin_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Alekhin00 41377 1 0 0 Alekhin_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Alekhin00 41378 1 0 0 Alekhin_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Alekhin00 41379 1 0 0 Alekhin_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Alekhin00 41380 1 0 0 Alekhin_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Alekhin00 41381 1 0 0 Alekhin_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Alekhin00 41382 1 0 0 Alekhin_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Alekhin00 41383 1 0 0 Alekhin_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Alekhin00 41384 1 0 0 Alekhin_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Alekhin00 41385 1 0 0 Alekhin_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Alekhin00 41386 1 0 0 Alekhin_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Alekhin00 41387 1 0 0 Alekhin_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Alekhin00 41388 1 0 0 Alekhin_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Alekhin00 41389 1 0 0 Alekhin_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Alekhin00 41390 1 0 0 Alekhin_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Alekhin00 41391 1 0 0 Alekhin_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Alekhin00 41392 1 0 0 Alekhin_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Alekhin00 41393 1 0 0 Alekhin_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Alekhin00 41394 1 0 0 Alekhin_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Alekhin00 41395 1 0 0 Alekhin_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Alekhin00 41396 1 0 0 Alekhin_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Alekhin00 41397 1 0 0 Alekhin_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Alekhin00 41398 1 0 0 Alekhin_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Alekhin00 41399 1 0 0 Alekhin_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Alekhin00 41400 1 0 0 Alekhin_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Alekhin00 41401 1 0 0 Alekhin_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Alekhin00 41402 1 0 0 Alekhin_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Alekhin00 41403 1 0 0 Alekhin_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Alekhin00 41404 1 0 0 Alekhin_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Alekhin00 41405 1 0 0 Alekhin_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Alekhin00 41406 1 0 0 Alekhin_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Alekhin00 41407 1 0 0 Alekhin_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Alekhin00 41408 1 0 0 Alekhin_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Alekhin00 41409 1 0 0 Alekhin_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Alekhin00 41410 1 0 0 Alekhin_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Alekhin00 41411 1 0 0 Alekhin_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Alekhin00 41412 1 0 0 Alekhin_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Alekhin00 41413 1 0 0 Alekhin_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Alekhin00 41414 1 0 0 Alekhin_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Alekhin00 41415 1 0 0 Alekhin_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Alekhin00 41416 1 0 0 Alekhin_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Alekhin00 41417 1 0 0 Alekhin_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Alekhin00 41418 1 0 0 Alekhin_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Alekhin00 41419 1 0 0 Alekhin_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Alekhin00 41420 1 0 0 Alekhin_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Alekhin00 41421 1 0 0 Alekhin_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Alekhin00 41422 1 0 0 Alekhin_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Alekhin00 41423 1 0 0 Alekhin_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Alekhin00 41424 1 0 0 Alekhin_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Alekhin00 41425 1 0 0 Alekhin_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Alekhin00 41426 1 0 0 Alekhin_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Alekhin00 41427 1 0 0 Alekhin_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Alekhin00 41428 1 0 0 Alekhin_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Alekhin00 41429 1 0 0 Alekhin_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Alekhin00 41430 1 0 0 Alekhin_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Alekhin00 41431 1 0 0 Alekhin_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Alekhin00 41432 1 0 0 Alekhin_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Alekhin00 41433 1 0 0 Alekhin_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Alekhin00 41434 1 0 0 Alekhin_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Alekhin00 41435 1 0 0 Alekhin_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Alekhin00 41436 1 0 0 Alekhin_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Alekhin00 41437 1 0 0 Alekhin_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Alekhin00 41438 1 0 0 Alekhin_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Alekhin00 41439 1 0 0 Alekhin_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Alekhin00 41440 1 0 0 Alekhin_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Alekhin00 41441 1 0 0 Alekhin_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Alekhin00 41442 1 0 0 Alekhin_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Alekhin00 41443 1 0 0 Alekhin_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Alekhin00 41444 1 0 0 Alekhin_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Alekhin00 41445 1 0 0 Alekhin_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Alekhin00 41446 1 0 0 Alekhin_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Alekhin00 41447 1 0 0 Alekhin_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Alekhin00 41448 1 0 0 Alekhin_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Alekhin00 41449 1 0 0 Alekhin_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Alekhin00 41450 1 0 0 Alekhin_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Alekhin00 41451 1 0 0 Alekhin_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Alekhin00 41452 1 0 0 Alekhin_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Alekhin00 41453 1 0 0 Alekhin_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Alekhin00 41454 1 0 0 Alekhin_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Alekhin00 41455 1 0 0 Alekhin_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Alekhin00 41456 1 0 0 Alekhin_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Alekhin00 41457 1 0 0 Alekhin_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Alekhin00 41458 1 0 0 Alekhin_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Alekhin00 41459 1 0 0 Alekhin_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Alekhin00 41460 1 0 0 Alekhin_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Alekhin00 41461 1 0 0 Alekhin_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Alekhin00 41462 1 0 0 Alekhin_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Alekhin00 41463 1 0 0 Alekhin_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Alekhin00 41464 1 0 0 Alekhin_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Alekhin00 41465 1 0 0 Alekhin_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Alekhin00 41466 1 0 0 Alekhin_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Alekhin00 41467 1 0 0 Alekhin_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Alekhin00 41468 1 0 0 Alekhin_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Alekhin00 41469 1 0 0 Alekhin_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Alekhin00 41470 1 0 0 Alekhin_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Alekhin00 41471 1 0 0 Alekhin_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Alekhin00 41472 1 0 0 Alekhin_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Alekhin00 41473 1 0 0 Alekhin_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Alekhin00 41474 1 0 0 Alekhin_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Alekhin00 41475 1 0 0 Alekhin_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Alekhin00 41476 1 0 0 Alekhin_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Alekhin00 41477 1 0 0 Alekhin_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Alekhin00 41478 1 0 0 Alekhin_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Alekhin00 41479 1 0 0 Alekhin_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Alekhin00 41480 1 0 0 Alekhin_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Alekhin00 41481 1 0 0 Alekhin_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Alekhin00 41482 1 0 0 Alekhin_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Alekhin00 41483 1 0 0 Alekhin_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Alekhin00 41484 1 0 0 Alekhin_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Alekhin00 41485 1 0 0 Alekhin_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Alekhin00 41486 1 0 0 Alekhin_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Alekhin00 41487 1 0 0 Alekhin_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Alekhin00 41488 1 0 0 Alekhin_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Alekhin00 41489 1 0 0 Alekhin_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Alekhin00 41490 1 0 0 Alekhin_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Alekhin00 41491 1 0 0 Alekhin_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Alekhin00 41492 1 0 0 Alekhin_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Alekhin00 41493 1 0 0 Alekhin_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Alekhin00 41494 1 0 0 Alekhin_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Alekhin00 41495 1 0 0 Alekhin_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Alekhin00 41496 1 0 0 Alekhin_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Alekhin00 41497 1 0 0 Alekhin_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Alekhin00 41498 1 0 0 Alekhin_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Alekhin00 41499 1 0 0 Alekhin_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Alekhin00 41500 1 0 0 Alekhin_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Alekhin00 41501 1 0 0 Alekhin_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Alekhin00 41502 1 0 0 Alekhin_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Alekhin00 41503 1 0 0 Alekhin_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Alekhin00 41504 1 0 0 Alekhin_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Alekhin00 41505 1 0 0 Alekhin_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Alekhin00 41506 1 0 0 Alekhin_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Alekhin00 41507 1 0 0 Alekhin_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Alekhin00 41508 1 0 0 Alekhin_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Alekhin00 41509 1 0 0 Alekhin_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Alekhin00 41510 1 0 0 Alekhin_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Alekhin00 41511 1 0 0 Alekhin_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Alekhin00 41512 1 0 0 Alekhin_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Alekhin00 41513 1 0 0 Alekhin_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Alekhin00 41514 1 0 0 Alekhin_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Alekhin00 41515 1 0 0 Alekhin_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Alekhin00 41516 1 0 0 Alekhin_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Alekhin00 41517 1 0 0 Alekhin_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Alekhin00 41518 1 0 0 Alekhin_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Alekhin00 41519 1 0 0 Alekhin_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Alekhin00 41520 1 0 0 Alekhin_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Alekhin00 41521 1 0 0 Alekhin_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Alekhin00 41522 1 0 0 Alekhin_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Alekhin00 41523 1 0 0 Alekhin_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Alekhin00 41524 1 0 0 Alekhin_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Alekhin00 41525 1 0 0 Alekhin_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Alekhin00 41526 1 0 0 Alekhin_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Alekhin00 41527 1 0 0 Alekhin_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Alekhin00 41528 1 0 0 Alekhin_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Alekhin00 41529 1 0 0 Alekhin_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Alekhin00 41530 1 0 0 Alekhin_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Alekhin00 41531 1 0 0 Alekhin_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Alekhin00 41532 1 0 0 Alekhin_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Alekhin00 41533 1 0 0 Alekhin_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Alekhin00 41534 1 0 0 Alekhin_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Alekhin00 41535 1 0 0 Alekhin_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Alekhin00 41536 1 0 0 Alekhin_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Alekhin00 41537 1 0 0 Alekhin_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Alekhin00 41538 1 0 0 Alekhin_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Alekhin00 41539 1 0 0 Alekhin_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Alekhin00 41540 1 0 0 Alekhin_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Alekhin00 41541 1 0 0 Alekhin_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Alekhin00 41542 1 0 0 Alekhin_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Alekhin00 41543 1 0 0 Alekhin_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Alekhin00 41544 1 0 0 Alekhin_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Alekhin00 41545 1 0 0 Alekhin_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Alekhin00 41546 1 0 0 Alekhin_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Alekhin00 41547 1 0 0 Alekhin_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Alekhin00 41548 1 0 0 Alekhin_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Alekhin00 41549 1 0 0 Alekhin_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Alekhin00 41550 1 0 0 Alekhin_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Alekhin00 41551 1 0 0 Alekhin_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Alekhin00 41552 1 0 0 Alekhin_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Alekhin00 41553 1 0 0 Alekhin_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Alekhin00 41554 1 0 0 Alekhin_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Alekhin00 41555 1 0 0 Alekhin_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Alekhin00 41556 1 0 0 Alekhin_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Alekhin00 41557 1 0 0 Alekhin_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Alekhin00 41558 1 0 0 Alekhin_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Alekhin00 41559 1 0 0 Alekhin_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Alekhin00 41560 1 0 0 Alekhin_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Alekhin00 41561 1 0 0 Alekhin_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Alekhin00 41562 1 0 0 Alekhin_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Alekhin00 41563 1 0 0 Alekhin_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Alekhin00 41564 1 0 0 Alekhin_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Alekhin00 41565 1 0 0 Alekhin_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Alekhin00 41566 1 0 0 Alekhin_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Alekhin00 41567 1 0 0 Alekhin_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Alekhin00 41568 1 0 0 Alekhin_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Alekhin00 41569 1 0 0 Alekhin_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Alekhin00 41570 1 0 0 Alekhin_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Alekhin00 41571 1 0 0 Alekhin_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Alekhin00 41572 1 0 0 Alekhin_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Alekhin00 41573 1 0 0 Alekhin_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Alekhin00 41574 1 0 0 Alekhin_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Alekhin00 41575 1 0 0 Alekhin_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Alekhin00 41576 1 0 0 Alekhin_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Alekhin00 41577 1 0 0 Alekhin_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Alekhin00 41578 1 0 0 Alekhin_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Alekhin00 41579 1 0 0 Alekhin_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Alekhin00 41580 1 0 0 Alekhin_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Alekhin00 41581 1 0 0 Alekhin_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Alekhin00 41582 1 0 0 Alekhin_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Alekhin00 41583 1 0 0 Alekhin_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Alekhin00 41584 1 0 0 Alekhin_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Alekhin00 41585 1 0 0 Alekhin_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Alekhin00 41586 1 0 0 Alekhin_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Alekhin00 41587 1 0 0 Alekhin_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Alekhin00 41588 1 0 0 Alekhin_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Alekhin00 41589 1 0 0 Alekhin_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Alekhin00 41590 1 0 0 Alekhin_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Alekhin00 41591 1 0 0 Alekhin_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Alekhin00 41592 1 0 0 Alekhin_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Alekhin00 41593 1 0 0 Alekhin_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Alekhin00 41594 1 0 0 Alekhin_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Alekhin00 41595 1 0 0 Alekhin_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Alekhin00 41596 1 0 0 Alekhin_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Alekhin00 41597 1 0 0 Alekhin_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Alekhin00 41598 1 0 0 Alekhin_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Alekhin00 41599 1 0 0 Alekhin_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Alekhin00 41600 1 0 0 Alekhin_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Alekhin00 41601 1 0 0 Alekhin_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Alekhin00 41602 1 0 0 Alekhin_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Alekhin00 41603 1 0 0 Alekhin_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Alekhin00 41604 1 0 0 Alekhin_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Alekhin00 41605 1 0 0 Alekhin_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Alekhin00 41606 1 0 0 Alekhin_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Alekhin00 41607 1 0 0 Alekhin_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Alekhin00 41608 1 0 0 Alekhin_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Alekhin00 41609 1 0 0 Alekhin_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Alekhin00 41610 1 0 0 Alekhin_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Alekhin00 41611 1 0 0 Alekhin_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Alekhin00 41612 1 0 0 Alekhin_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Alekhin00 41613 1 0 0 Alekhin_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Alekhin00 41614 1 0 0 Alekhin_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Alekhin00 41615 1 0 0 Alekhin_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Alekhin00 41616 1 0 0 Alekhin_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Alekhin00 41617 1 0 0 Alekhin_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Alekhin00 41618 1 0 0 Alekhin_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Alekhin00 41619 1 0 0 Alekhin_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Alekhin00 41620 1 0 0 Alekhin_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Alekhin00 41621 1 0 0 Alekhin_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Alekhin00 41622 1 0 0 Alekhin_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Alekhin00 41623 1 0 0 Alekhin_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Alekhin00 41624 1 0 0 Alekhin_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Alekhin00 41625 1 0 0 Alekhin_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Alekhin00 41626 1 0 0 Alekhin_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Alekhin00 41627 1 0 0 Alekhin_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Alekhin00 41628 1 0 0 Alekhin_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Alekhin00 41629 1 0 0 Alekhin_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Alekhin00 41630 1 0 0 Alekhin_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Alekhin00 41631 1 0 0 Alekhin_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Alekhin00 41632 1 0 0 Alekhin_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Alekhin00 41633 1 0 0 Alekhin_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Alekhin00 41634 1 0 0 Alekhin_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Alekhin00 41635 1 0 0 Alekhin_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Alekhin00 41636 1 0 0 Alekhin_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Alekhin00 41637 1 0 0 Alekhin_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Alekhin00 41638 1 0 0 Alekhin_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Alekhin00 41639 1 0 0 Alekhin_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Alekhin00 41640 1 0 0 Alekhin_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Alekhin00 41641 1 0 0 Alekhin_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Alekhin00 41642 1 0 0 Alekhin_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Alekhin00 41643 1 0 0 Alekhin_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Alekhin00 41644 1 0 0 Alekhin_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Alekhin00 41645 1 0 0 Alekhin_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Alekhin00 41646 1 0 0 Alekhin_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Alekhin00 41647 1 0 0 Alekhin_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Alekhin00 41648 1 0 0 Alekhin_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Alekhin00 41649 1 0 0 Alekhin_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Alekhin00 41650 1 0 0 Alekhin_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Alekhin00 41651 1 0 0 Alekhin_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Alekhin00 41652 1 0 0 Alekhin_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Alekhin00 41653 1 0 0 Alekhin_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Alekhin00 41654 1 0 0 Alekhin_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Alekhin00 41655 1 0 0 Alekhin_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Alekhin00 41656 1 0 0 Alekhin_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Alekhin00 41657 1 0 0 Alekhin_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Alekhin00 41658 1 0 0 Alekhin_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Alekhin00 41659 1 0 0 Alekhin_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Alekhin00 41660 1 0 0 Alekhin_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Alekhin00 41661 1 0 0 Alekhin_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Alekhin00 41662 1 0 0 Alekhin_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Alekhin00 41663 1 0 0 Alekhin_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Alekhin00 41664 1 0 0 Alekhin_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Alekhin00 41665 1 0 0 Alekhin_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Alekhin00 41666 1 0 0 Alekhin_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Alekhin00 41667 1 0 0 Alekhin_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Alekhin00 41668 1 0 0 Alekhin_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Alekhin00 41669 1 0 0 Alekhin_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Alekhin00 41670 1 0 0 Alekhin_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Alekhin00 41671 1 0 0 Alekhin_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Alekhin00 41672 1 0 0 Alekhin_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Alekhin00 41673 1 0 0 Alekhin_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Alekhin00 41674 1 0 0 Alekhin_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Alekhin00 41675 1 0 0 Alekhin_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Alekhin00 41676 1 0 0 Alekhin_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Alekhin00 41677 1 0 0 Alekhin_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Alekhin00 41678 1 0 0 Alekhin_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Alekhin00 41679 1 0 0 Alekhin_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Alekhin00 41680 1 0 0 Alekhin_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Alekhin00 41681 1 0 0 Alekhin_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Alekhin00 41682 1 0 0 Alekhin_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Alekhin00 41683 1 0 0 Alekhin_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Alekhin00 41684 1 0 0 Alekhin_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Alekhin00 41685 1 0 0 Alekhin_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Alekhin00 41686 1 0 0 Alekhin_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Alekhin00 41687 1 0 0 Alekhin_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Alekhin00 41688 1 0 0 Alekhin_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Alekhin00 41689 1 0 0 Alekhin_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Alekhin00 41690 1 0 0 Alekhin_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Alekhin00 41691 1 0 0 Alekhin_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Alekhin00 41692 1 0 0 Alekhin_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Alekhin00 41693 1 0 0 Alekhin_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Alekhin00 41694 1 0 0 Alekhin_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Alekhin00 41695 1 0 0 Alekhin_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Alekhin00 41696 1 0 0 Alekhin_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Alekhin00 41697 1 0 0 Alekhin_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Alekhin00 41698 1 0 0 Alekhin_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Alekhin00 41699 1 0 0 Alekhin_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Alekhin00 41700 1 0 0 Alekhin_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Alekhin00 41701 1 0 0 Alekhin_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Alekhin00 41702 1 0 0 Alekhin_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Alekhin00 41703 1 0 0 Alekhin_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Alekhin00 41704 1 0 0 Alekhin_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Alekhin00 41705 1 0 0 Alekhin_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Alekhin00 41706 1 0 0 Alekhin_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Alekhin00 41707 1 0 0 Alekhin_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Alekhin00 41708 1 0 0 Alekhin_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Alekhin00 41709 1 0 0 Alekhin_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Alekhin00 41710 1 0 0 Alekhin_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Alekhin00 41711 1 0 0 Alekhin_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Alekhin00 41712 1 0 0 Alekhin_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Alekhin00 41713 1 0 0 Alekhin_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Alekhin00 41714 1 0 0 Alekhin_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Alekhin00 41715 1 0 0 Alekhin_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Alekhin00 41716 1 0 0 Alekhin_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Alekhin00 41717 1 0 0 Alekhin_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Alekhin00 41718 1 0 0 Alekhin_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Alekhin00 41719 1 0 0 Alekhin_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Alekhin00 41720 1 0 0 Alekhin_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Alekhin00 41721 1 0 0 Alekhin_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Alekhin00 41722 1 0 0 Alekhin_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Alekhin00 41723 1 0 0 Alekhin_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Alekhin00 41724 1 0 0 Alekhin_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Alekhin00 41725 1 0 0 Alekhin_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Alekhin00 41726 1 0 0 Alekhin_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Alekhin00 41727 1 0 0 Alekhin_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Alekhin00 41728 1 0 0 Alekhin_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Alekhin00 41729 1 0 0 Alekhin_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Alekhin00 41730 1 0 0 Alekhin_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Alekhin00 41731 1 0 0 Alekhin_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Alekhin00 41732 1 0 0 Alekhin_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Alekhin00 41733 1 0 0 Alekhin_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Alekhin00 41734 1 0 0 Alekhin_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Alekhin00 41735 1 0 0 Alekhin_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Alekhin00 41736 1 0 0 Alekhin_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Alekhin00 41737 1 0 0 Alekhin_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Alekhin00 41738 1 0 0 Alekhin_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Alekhin00 41739 1 0 0 Alekhin_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Alekhin00 41740 1 0 0 Alekhin_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Alekhin00 41741 1 0 0 Alekhin_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Alekhin00 41742 1 0 0 Alekhin_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Alekhin00 41743 1 0 0 Alekhin_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Alekhin00 41744 1 0 0 Alekhin_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Alekhin00 41745 1 0 0 Alekhin_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Alekhin00 41746 1 0 0 Alekhin_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Alekhin00 41747 1 0 0 Alekhin_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Alekhin00 41748 1 0 0 Alekhin_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Alekhin00 41749 1 0 0 Alekhin_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Alekhin00 41750 1 0 0 Alekhin_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Alekhin00 41751 1 0 0 Alekhin_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Alekhin00 41752 1 0 0 Alekhin_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Alekhin00 41753 1 0 0 Alekhin_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Alekhin00 41754 1 0 0 Alekhin_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Alekhin00 41755 1 0 0 Alekhin_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Alekhin00 41756 1 0 0 Alekhin_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Alekhin00 41757 1 0 0 Alekhin_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Alekhin00 41758 1 0 0 Alekhin_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Alekhin00 41759 1 0 0 Alekhin_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Alekhin00 41760 1 0 0 Alekhin_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Alekhin00 41761 1 0 0 Alekhin_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Alekhin00 41762 1 0 0 Alekhin_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Alekhin00 41763 1 0 0 Alekhin_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Alekhin00 41764 1 0 0 Alekhin_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Alekhin00 41765 1 0 0 Alekhin_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Alekhin00 41766 1 0 0 Alekhin_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Alekhin00 41767 1 0 0 Alekhin_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Alekhin00 41768 1 0 0 Alekhin_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Alekhin00 41769 1 0 0 Alekhin_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Alekhin00 41770 1 0 0 Alekhin_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Alekhin00 41771 1 0 0 Alekhin_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Alekhin00 41772 1 0 0 Alekhin_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Alekhin00 41773 1 0 0 Alekhin_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Alekhin00 41774 1 0 0 Alekhin_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Alekhin00 41775 1 0 0 Alekhin_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Alekhin00 41776 1 0 0 Alekhin_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Alekhin00 41777 1 0 0 Alekhin_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Alekhin00 41778 1 0 0 Alekhin_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Alekhin00 41779 1 0 0 Alekhin_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Alekhin00 41780 1 0 0 Alekhin_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Alekhin00 41781 1 0 0 Alekhin_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Alekhin00 41782 1 0 0 Alekhin_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Alekhin00 41783 1 0 0 Alekhin_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Alekhin00 41784 1 0 0 Alekhin_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Alekhin00 41785 1 0 0 Alekhin_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Alekhin00 41786 1 0 0 Alekhin_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Alekhin00 41787 1 0 0 Alekhin_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Alekhin00 41788 1 0 0 Alekhin_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Alekhin00 41789 1 0 0 Alekhin_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Alekhin00 41790 1 0 0 Alekhin_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Alekhin00 41791 1 0 0 Alekhin_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Alekhin00 41792 1 0 0 Alekhin_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Alekhin00 41793 1 0 0 Alekhin_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Alekhin00 41794 1 0 0 Alekhin_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Alekhin00 41795 1 0 0 Alekhin_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Alekhin00 41796 1 0 0 Alekhin_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Alekhin00 41797 1 0 0 Alekhin_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Alekhin00 41798 1 0 0 Alekhin_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Alekhin00 41799 1 0 0 Alekhin_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Alekhin00 41800 1 0 0 Alekhin_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Alekhin00 41801 1 0 0 Alekhin_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Alekhin00 41802 1 0 0 Alekhin_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Alekhin00 41803 1 0 0 Alekhin_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Alekhin00 41804 1 0 0 Alekhin_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Alekhin00 41805 1 0 0 Alekhin_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Alekhin00 41806 1 0 0 Alekhin_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Alekhin00 41807 1 0 0 Alekhin_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Alekhin00 41808 1 0 0 Alekhin_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Alekhin00 41809 1 0 0 Alekhin_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Alekhin00 41810 1 0 0 Alekhin_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Alekhin00 41811 1 0 0 Alekhin_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Alekhin00 41812 1 0 0 Alekhin_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Alekhin00 41813 1 0 0 Alekhin_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Alekhin00 41814 1 0 0 Alekhin_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Alekhin00 41815 1 0 0 Alekhin_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Alekhin00 41816 1 0 0 Alekhin_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Alekhin00 41817 1 0 0 Alekhin_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Alekhin00 41818 1 0 0 Alekhin_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Alekhin00 41819 1 0 0 Alekhin_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Alekhin00 41820 1 0 0 Alekhin_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Alekhin00 41821 1 0 0 Alekhin_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Alekhin00 41822 1 0 0 Alekhin_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Alekhin00 41823 1 0 0 Alekhin_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Alekhin00 41824 1 0 0 Alekhin_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Alekhin00 41825 1 0 0 Alekhin_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Alekhin00 41826 1 0 0 Alekhin_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Alekhin00 41827 1 0 0 Alekhin_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Alekhin00 41828 1 0 0 Alekhin_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Alekhin00 41829 1 0 0 Alekhin_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Alekhin00 41830 1 0 0 Alekhin_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Alekhin00 41831 1 0 0 Alekhin_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Alekhin00 41832 1 0 0 Alekhin_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Alekhin00 41833 1 0 0 Alekhin_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Alekhin00 41834 1 0 0 Alekhin_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Alekhin00 41835 1 0 0 Alekhin_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Alekhin00 41836 1 0 0 Alekhin_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Alekhin00 41837 1 0 0 Alekhin_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Alekhin00 41838 1 0 0 Alekhin_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Alekhin00 41839 1 0 0 Alekhin_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Alekhin00 41840 1 0 0 Alekhin_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Alekhin00 41841 1 0 0 Alekhin_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Alekhin00 41842 1 0 0 Alekhin_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Alekhin00 41843 1 0 0 Alekhin_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Alekhin00 41844 1 0 0 Alekhin_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Alekhin00 41845 1 0 0 Alekhin_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Alekhin00 41846 1 0 0 Alekhin_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Alekhin00 41847 1 0 0 Alekhin_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Alekhin00 41848 1 0 0 Alekhin_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Alekhin00 41849 1 0 0 Alekhin_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Alekhin00 41850 1 0 0 Alekhin_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Alekhin00 41851 1 0 0 Alekhin_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Alekhin00 41852 1 0 0 Alekhin_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Alekhin00 41853 1 0 0 Alekhin_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Alekhin00 41854 1 0 0 Alekhin_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Alekhin00 41855 1 0 0 Alekhin_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Alekhin00 41856 1 0 0 Alekhin_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Alekhin00 41857 1 0 0 Alekhin_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Alekhin00 41858 1 0 0 Alekhin_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Alekhin00 41859 1 0 0 Alekhin_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Alekhin00 41860 1 0 0 Alekhin_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Alekhin00 41861 1 0 0 Alekhin_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Alekhin00 41862 1 0 0 Alekhin_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Alekhin00 41863 1 0 0 Alekhin_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Alekhin00 41864 1 0 0 Alekhin_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Alekhin00 41865 1 0 0 Alekhin_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Alekhin00 41866 1 0 0 Alekhin_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Alekhin00 41867 1 0 0 Alekhin_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Alekhin00 41868 1 0 0 Alekhin_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Alekhin00 41869 1 0 0 Alekhin_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Alekhin00 41870 1 0 0 Alekhin_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Alekhin00 41871 1 0 0 Alekhin_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Alekhin00 41872 1 0 0 Alekhin_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Alekhin00 41873 1 0 0 Alekhin_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Alekhin00 41874 1 0 0 Alekhin_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Alekhin00 41875 1 0 0 Alekhin_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Alekhin00 41876 1 0 0 Alekhin_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Alekhin00 41877 1 0 0 Alekhin_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Alekhin00 41878 1 0 0 Alekhin_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Alekhin00 41879 1 0 0 Alekhin_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Alekhin00 41880 1 0 0 Alekhin_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Alekhin00 41881 1 0 0 Alekhin_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Alekhin00 41882 1 0 0 Alekhin_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Alekhin00 41883 1 0 0 Alekhin_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Alekhin00 41884 1 0 0 Alekhin_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Alekhin00 41885 1 0 0 Alekhin_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Alekhin00 41886 1 0 0 Alekhin_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Alekhin00 41887 1 0 0 Alekhin_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Alekhin00 41888 1 0 0 Alekhin_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Alekhin00 41889 1 0 0 Alekhin_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Alekhin00 41890 1 0 0 Alekhin_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Alekhin00 41891 1 0 0 Alekhin_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Alekhin00 41892 1 0 0 Alekhin_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Alekhin00 41893 1 0 0 Alekhin_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Alekhin00 41894 1 0 0 Alekhin_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Alekhin00 41895 1 0 0 Alekhin_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Alekhin00 41896 1 0 0 Alekhin_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Alekhin00 41897 1 0 0 Alekhin_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Alekhin00 41898 1 0 0 Alekhin_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Alekhin00 41899 1 0 0 Alekhin_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Alekhin00 41900 1 0 0 Alekhin_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Alekhin00 41901 1 0 0 Alekhin_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Alekhin00 41902 1 0 0 Alekhin_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Alekhin00 41903 1 0 0 Alekhin_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Alekhin00 41904 1 0 0 Alekhin_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Alekhin00 41905 1 0 0 Alekhin_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Alekhin00 41906 1 0 0 Alekhin_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Alekhin00 41907 1 0 0 Alekhin_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Alekhin00 41908 1 0 0 Alekhin_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Alekhin00 41909 1 0 0 Alekhin_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Alekhin00 41910 1 0 0 Alekhin_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Alekhin00 41911 1 0 0 Alekhin_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Alekhin00 41912 1 0 0 Alekhin_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Alekhin00 41913 1 0 0 Alekhin_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Alekhin00 41914 1 0 0 Alekhin_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Alekhin00 41915 1 0 0 Alekhin_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Alekhin00 41916 1 0 0 Alekhin_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Alekhin00 41917 1 0 0 Alekhin_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Alekhin00 41918 1 0 0 Alekhin_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Alekhin00 41919 1 0 0 Alekhin_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Alekhin00 41920 1 0 0 Alekhin_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Alekhin00 41921 1 0 0 Alekhin_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Alekhin00 41922 1 0 0 Alekhin_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Alekhin00 41923 1 0 0 Alekhin_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Alekhin00 41924 1 0 0 Alekhin_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Alekhin00 41925 1 0 0 Alekhin_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Alekhin00 41926 1 0 0 Alekhin_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Alekhin00 41927 1 0 0 Alekhin_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Alekhin00 41928 1 0 0 Alekhin_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Alekhin00 41929 1 0 0 Alekhin_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Alekhin00 41930 1 0 0 Alekhin_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Alekhin00 41931 1 0 0 Alekhin_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Alekhin00 41932 1 0 0 Alekhin_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Alekhin00 41933 1 0 0 Alekhin_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Alekhin00 41934 1 0 0 Alekhin_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Alekhin00 41935 1 0 0 Alekhin_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Alekhin00 41936 1 0 0 Alekhin_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Alekhin00 41937 1 0 0 Alekhin_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Alekhin00 41938 1 0 0 Alekhin_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Alekhin00 41939 1 0 0 Alekhin_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Alekhin00 41940 1 0 0 Alekhin_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Alekhin00 41941 1 0 0 Alekhin_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Alekhin00 41942 1 0 0 Alekhin_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Alekhin00 41943 1 0 0 Alekhin_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Alekhin00 41944 1 0 0 Alekhin_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Alekhin00 41945 1 0 0 Alekhin_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Alekhin00 41946 1 0 0 Alekhin_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Alekhin00 41947 1 0 0 Alekhin_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Alekhin00 41948 1 0 0 Alekhin_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Alekhin00 41949 1 0 0 Alekhin_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Alekhin00 41950 1 0 0 Alekhin_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Alekhin00 41951 1 0 0 Alekhin_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Alekhin00 41952 1 0 0 Alekhin_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Alekhin00 41953 1 0 0 Alekhin_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Alekhin00 41954 1 0 0 Alekhin_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Alekhin00 41955 1 0 0 Alekhin_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Alekhin00 41956 1 0 0 Alekhin_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Alekhin00 41957 1 0 0 Alekhin_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Alekhin00 41958 1 0 0 Alekhin_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Alekhin00 41959 1 0 0 Alekhin_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Alekhin00 41960 1 0 0 Alekhin_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Alekhin00 41961 1 0 0 Alekhin_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Alekhin00 41962 1 0 0 Alekhin_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Alekhin00 41963 1 0 0 Alekhin_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Alekhin00 41964 1 0 0 Alekhin_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Alekhin00 41965 1 0 0 Alekhin_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Alekhin00 41966 1 0 0 Alekhin_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Alekhin00 41967 1 0 0 Alekhin_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Alekhin00 41968 1 0 0 Alekhin_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Alekhin00 41969 1 0 0 Alekhin_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Alekhin00 41970 1 0 0 Alekhin_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Alekhin00 41971 1 0 0 Alekhin_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Alekhin00 41972 1 0 0 Alekhin_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Alekhin00 41973 1 0 0 Alekhin_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Alekhin00 41974 1 0 0 Alekhin_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Alekhin00 41975 1 0 0 Alekhin_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Alekhin00 41976 1 0 0 Alekhin_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Alekhin00 41977 1 0 0 Alekhin_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Alekhin00 41978 1 0 0 Alekhin_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Alekhin00 41979 1 0 0 Alekhin_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Alekhin00 41980 1 0 0 Alekhin_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Alekhin00 41981 1 0 0 Alekhin_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Alekhin00 41982 1 0 0 Alekhin_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Alekhin00 41983 1 0 0 Alekhin_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Alekhin00 41984 1 0 0 Alekhin_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Alekhin00 41985 1 0 0 Alekhin_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Alekhin00 41986 1 0 0 Alekhin_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Alekhin00 41987 1 0 0 Alekhin_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Alekhin00 41988 1 0 0 Alekhin_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Alekhin00 41989 1 0 0 Alekhin_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Alekhin00 41990 1 0 0 Alekhin_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Alekhin00 41991 1 0 0 Alekhin_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Alekhin00 41992 1 0 0 Alekhin_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Alekhin00 41993 1 0 0 Alekhin_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Alekhin00 41994 1 0 0 Alekhin_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Alekhin00 41995 1 0 0 Alekhin_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Alekhin00 41996 1 0 0 Alekhin_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Alekhin00 41997 1 0 0 Alekhin_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Alekhin00 41998 1 0 0 Alekhin_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Alekhin00 41999 1 0 0 Alekhin_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Alekhin00 50100 1 0 0 Botje_100.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 50101 1 0 0 Botje_100.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 50102 1 0 0 Botje_100.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 50103 1 0 0 Botje_100.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 50104 1 0 0 Botje_100.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 50105 1 0 0 Botje_100.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 50106 1 0 0 Botje_100.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 50107 1 0 0 Botje_100.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 50108 1 0 0 Botje_100.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 50109 1 0 0 Botje_100.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 50110 1 0 0 Botje_100.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 50111 1 0 0 Botje_100.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 50112 1 0 0 Botje_100.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 50113 1 0 0 Botje_100.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 50114 1 0 0 Botje_100.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 50115 1 0 0 Botje_100.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 50116 1 0 0 Botje_100.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 50117 1 0 0 Botje_100.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 50118 1 0 0 Botje_100.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 50119 1 0 0 Botje_100.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 50120 1 0 0 Botje_100.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 50121 1 0 0 Botje_100.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 50122 1 0 0 Botje_100.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 50123 1 0 0 Botje_100.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 50124 1 0 0 Botje_100.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 50125 1 0 0 Botje_100.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 50126 1 0 0 Botje_100.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 50127 1 0 0 Botje_100.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 50128 1 0 0 Botje_100.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 50129 1 0 0 Botje_100.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 50130 1 0 0 Botje_100.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 50131 1 0 0 Botje_100.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 50132 1 0 0 Botje_100.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 50133 1 0 0 Botje_100.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 50134 1 0 0 Botje_100.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 50135 1 0 0 Botje_100.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 50136 1 0 0 Botje_100.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 50137 1 0 0 Botje_100.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 50138 1 0 0 Botje_100.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 50139 1 0 0 Botje_100.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 50140 1 0 0 Botje_100.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 50141 1 0 0 Botje_100.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 50142 1 0 0 Botje_100.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 50143 1 0 0 Botje_100.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 50144 1 0 0 Botje_100.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 50145 1 0 0 Botje_100.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 50146 1 0 0 Botje_100.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 50147 1 0 0 Botje_100.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 50148 1 0 0 Botje_100.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 50149 1 0 0 Botje_100.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 50150 1 0 0 Botje_100.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 50151 1 0 0 Botje_100.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 50152 1 0 0 Botje_100.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 50153 1 0 0 Botje_100.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 50154 1 0 0 Botje_100.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 50155 1 0 0 Botje_100.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 50156 1 0 0 Botje_100.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 50157 1 0 0 Botje_100.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 50158 1 0 0 Botje_100.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 50159 1 0 0 Botje_100.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 50160 1 0 0 Botje_100.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 50161 1 0 0 Botje_100.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 50162 1 0 0 Botje_100.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 50163 1 0 0 Botje_100.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 50164 1 0 0 Botje_100.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 50165 1 0 0 Botje_100.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 50166 1 0 0 Botje_100.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 50167 1 0 0 Botje_100.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 50168 1 0 0 Botje_100.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 50169 1 0 0 Botje_100.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 50170 1 0 0 Botje_100.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 50171 1 0 0 Botje_100.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 50172 1 0 0 Botje_100.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 50173 1 0 0 Botje_100.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 50174 1 0 0 Botje_100.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 50175 1 0 0 Botje_100.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 50176 1 0 0 Botje_100.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 50177 1 0 0 Botje_100.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 50178 1 0 0 Botje_100.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 50179 1 0 0 Botje_100.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 50180 1 0 0 Botje_100.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 50181 1 0 0 Botje_100.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 50182 1 0 0 Botje_100.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 50183 1 0 0 Botje_100.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 50184 1 0 0 Botje_100.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 50185 1 0 0 Botje_100.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 50186 1 0 0 Botje_100.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 50187 1 0 0 Botje_100.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 50188 1 0 0 Botje_100.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 50189 1 0 0 Botje_100.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 50190 1 0 0 Botje_100.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 50191 1 0 0 Botje_100.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 50192 1 0 0 Botje_100.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 50193 1 0 0 Botje_100.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 50194 1 0 0 Botje_100.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 50195 1 0 0 Botje_100.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 50196 1 0 0 Botje_100.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 50197 1 0 0 Botje_100.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 50198 1 0 0 Botje_100.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 50199 1 0 0 Botje_100.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 50200 1 0 0 Botje_100.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 51000 1 0 0 Botje_1000.LHpdf 0 1. 1.E+10 1.E-06 1. Botje99 51001 1 0 0 Botje_1000.LHpdf 1 1. 1.E+10 1.E-06 1. Botje99 51002 1 0 0 Botje_1000.LHpdf 2 1. 1.E+10 1.E-06 1. Botje99 51003 1 0 0 Botje_1000.LHpdf 3 1. 1.E+10 1.E-06 1. Botje99 51004 1 0 0 Botje_1000.LHpdf 4 1. 1.E+10 1.E-06 1. Botje99 51005 1 0 0 Botje_1000.LHpdf 5 1. 1.E+10 1.E-06 1. Botje99 51006 1 0 0 Botje_1000.LHpdf 6 1. 1.E+10 1.E-06 1. Botje99 51007 1 0 0 Botje_1000.LHpdf 7 1. 1.E+10 1.E-06 1. Botje99 51008 1 0 0 Botje_1000.LHpdf 8 1. 1.E+10 1.E-06 1. Botje99 51009 1 0 0 Botje_1000.LHpdf 9 1. 1.E+10 1.E-06 1. Botje99 51010 1 0 0 Botje_1000.LHpdf 10 1. 1.E+10 1.E-06 1. Botje99 51011 1 0 0 Botje_1000.LHpdf 11 1. 1.E+10 1.E-06 1. Botje99 51012 1 0 0 Botje_1000.LHpdf 12 1. 1.E+10 1.E-06 1. Botje99 51013 1 0 0 Botje_1000.LHpdf 13 1. 1.E+10 1.E-06 1. Botje99 51014 1 0 0 Botje_1000.LHpdf 14 1. 1.E+10 1.E-06 1. Botje99 51015 1 0 0 Botje_1000.LHpdf 15 1. 1.E+10 1.E-06 1. Botje99 51016 1 0 0 Botje_1000.LHpdf 16 1. 1.E+10 1.E-06 1. Botje99 51017 1 0 0 Botje_1000.LHpdf 17 1. 1.E+10 1.E-06 1. Botje99 51018 1 0 0 Botje_1000.LHpdf 18 1. 1.E+10 1.E-06 1. Botje99 51019 1 0 0 Botje_1000.LHpdf 19 1. 1.E+10 1.E-06 1. Botje99 51020 1 0 0 Botje_1000.LHpdf 20 1. 1.E+10 1.E-06 1. Botje99 51021 1 0 0 Botje_1000.LHpdf 21 1. 1.E+10 1.E-06 1. Botje99 51022 1 0 0 Botje_1000.LHpdf 22 1. 1.E+10 1.E-06 1. Botje99 51023 1 0 0 Botje_1000.LHpdf 23 1. 1.E+10 1.E-06 1. Botje99 51024 1 0 0 Botje_1000.LHpdf 24 1. 1.E+10 1.E-06 1. Botje99 51025 1 0 0 Botje_1000.LHpdf 25 1. 1.E+10 1.E-06 1. Botje99 51026 1 0 0 Botje_1000.LHpdf 26 1. 1.E+10 1.E-06 1. Botje99 51027 1 0 0 Botje_1000.LHpdf 27 1. 1.E+10 1.E-06 1. Botje99 51028 1 0 0 Botje_1000.LHpdf 28 1. 1.E+10 1.E-06 1. Botje99 51029 1 0 0 Botje_1000.LHpdf 29 1. 1.E+10 1.E-06 1. Botje99 51030 1 0 0 Botje_1000.LHpdf 30 1. 1.E+10 1.E-06 1. Botje99 51031 1 0 0 Botje_1000.LHpdf 31 1. 1.E+10 1.E-06 1. Botje99 51032 1 0 0 Botje_1000.LHpdf 32 1. 1.E+10 1.E-06 1. Botje99 51033 1 0 0 Botje_1000.LHpdf 33 1. 1.E+10 1.E-06 1. Botje99 51034 1 0 0 Botje_1000.LHpdf 34 1. 1.E+10 1.E-06 1. Botje99 51035 1 0 0 Botje_1000.LHpdf 35 1. 1.E+10 1.E-06 1. Botje99 51036 1 0 0 Botje_1000.LHpdf 36 1. 1.E+10 1.E-06 1. Botje99 51037 1 0 0 Botje_1000.LHpdf 37 1. 1.E+10 1.E-06 1. Botje99 51038 1 0 0 Botje_1000.LHpdf 38 1. 1.E+10 1.E-06 1. Botje99 51039 1 0 0 Botje_1000.LHpdf 39 1. 1.E+10 1.E-06 1. Botje99 51040 1 0 0 Botje_1000.LHpdf 40 1. 1.E+10 1.E-06 1. Botje99 51041 1 0 0 Botje_1000.LHpdf 41 1. 1.E+10 1.E-06 1. Botje99 51042 1 0 0 Botje_1000.LHpdf 42 1. 1.E+10 1.E-06 1. Botje99 51043 1 0 0 Botje_1000.LHpdf 43 1. 1.E+10 1.E-06 1. Botje99 51044 1 0 0 Botje_1000.LHpdf 44 1. 1.E+10 1.E-06 1. Botje99 51045 1 0 0 Botje_1000.LHpdf 45 1. 1.E+10 1.E-06 1. Botje99 51046 1 0 0 Botje_1000.LHpdf 46 1. 1.E+10 1.E-06 1. Botje99 51047 1 0 0 Botje_1000.LHpdf 47 1. 1.E+10 1.E-06 1. Botje99 51048 1 0 0 Botje_1000.LHpdf 48 1. 1.E+10 1.E-06 1. Botje99 51049 1 0 0 Botje_1000.LHpdf 49 1. 1.E+10 1.E-06 1. Botje99 51050 1 0 0 Botje_1000.LHpdf 50 1. 1.E+10 1.E-06 1. Botje99 51051 1 0 0 Botje_1000.LHpdf 51 1. 1.E+10 1.E-06 1. Botje99 51052 1 0 0 Botje_1000.LHpdf 52 1. 1.E+10 1.E-06 1. Botje99 51053 1 0 0 Botje_1000.LHpdf 53 1. 1.E+10 1.E-06 1. Botje99 51054 1 0 0 Botje_1000.LHpdf 54 1. 1.E+10 1.E-06 1. Botje99 51055 1 0 0 Botje_1000.LHpdf 55 1. 1.E+10 1.E-06 1. Botje99 51056 1 0 0 Botje_1000.LHpdf 56 1. 1.E+10 1.E-06 1. Botje99 51057 1 0 0 Botje_1000.LHpdf 57 1. 1.E+10 1.E-06 1. Botje99 51058 1 0 0 Botje_1000.LHpdf 58 1. 1.E+10 1.E-06 1. Botje99 51059 1 0 0 Botje_1000.LHpdf 59 1. 1.E+10 1.E-06 1. Botje99 51060 1 0 0 Botje_1000.LHpdf 60 1. 1.E+10 1.E-06 1. Botje99 51061 1 0 0 Botje_1000.LHpdf 61 1. 1.E+10 1.E-06 1. Botje99 51062 1 0 0 Botje_1000.LHpdf 62 1. 1.E+10 1.E-06 1. Botje99 51063 1 0 0 Botje_1000.LHpdf 63 1. 1.E+10 1.E-06 1. Botje99 51064 1 0 0 Botje_1000.LHpdf 64 1. 1.E+10 1.E-06 1. Botje99 51065 1 0 0 Botje_1000.LHpdf 65 1. 1.E+10 1.E-06 1. Botje99 51066 1 0 0 Botje_1000.LHpdf 66 1. 1.E+10 1.E-06 1. Botje99 51067 1 0 0 Botje_1000.LHpdf 67 1. 1.E+10 1.E-06 1. Botje99 51068 1 0 0 Botje_1000.LHpdf 68 1. 1.E+10 1.E-06 1. Botje99 51069 1 0 0 Botje_1000.LHpdf 69 1. 1.E+10 1.E-06 1. Botje99 51070 1 0 0 Botje_1000.LHpdf 70 1. 1.E+10 1.E-06 1. Botje99 51071 1 0 0 Botje_1000.LHpdf 71 1. 1.E+10 1.E-06 1. Botje99 51072 1 0 0 Botje_1000.LHpdf 72 1. 1.E+10 1.E-06 1. Botje99 51073 1 0 0 Botje_1000.LHpdf 73 1. 1.E+10 1.E-06 1. Botje99 51074 1 0 0 Botje_1000.LHpdf 74 1. 1.E+10 1.E-06 1. Botje99 51075 1 0 0 Botje_1000.LHpdf 75 1. 1.E+10 1.E-06 1. Botje99 51076 1 0 0 Botje_1000.LHpdf 76 1. 1.E+10 1.E-06 1. Botje99 51077 1 0 0 Botje_1000.LHpdf 77 1. 1.E+10 1.E-06 1. Botje99 51078 1 0 0 Botje_1000.LHpdf 78 1. 1.E+10 1.E-06 1. Botje99 51079 1 0 0 Botje_1000.LHpdf 79 1. 1.E+10 1.E-06 1. Botje99 51080 1 0 0 Botje_1000.LHpdf 80 1. 1.E+10 1.E-06 1. Botje99 51081 1 0 0 Botje_1000.LHpdf 81 1. 1.E+10 1.E-06 1. Botje99 51082 1 0 0 Botje_1000.LHpdf 82 1. 1.E+10 1.E-06 1. Botje99 51083 1 0 0 Botje_1000.LHpdf 83 1. 1.E+10 1.E-06 1. Botje99 51084 1 0 0 Botje_1000.LHpdf 84 1. 1.E+10 1.E-06 1. Botje99 51085 1 0 0 Botje_1000.LHpdf 85 1. 1.E+10 1.E-06 1. Botje99 51086 1 0 0 Botje_1000.LHpdf 86 1. 1.E+10 1.E-06 1. Botje99 51087 1 0 0 Botje_1000.LHpdf 87 1. 1.E+10 1.E-06 1. Botje99 51088 1 0 0 Botje_1000.LHpdf 88 1. 1.E+10 1.E-06 1. Botje99 51089 1 0 0 Botje_1000.LHpdf 89 1. 1.E+10 1.E-06 1. Botje99 51090 1 0 0 Botje_1000.LHpdf 90 1. 1.E+10 1.E-06 1. Botje99 51091 1 0 0 Botje_1000.LHpdf 91 1. 1.E+10 1.E-06 1. Botje99 51092 1 0 0 Botje_1000.LHpdf 92 1. 1.E+10 1.E-06 1. Botje99 51093 1 0 0 Botje_1000.LHpdf 93 1. 1.E+10 1.E-06 1. Botje99 51094 1 0 0 Botje_1000.LHpdf 94 1. 1.E+10 1.E-06 1. Botje99 51095 1 0 0 Botje_1000.LHpdf 95 1. 1.E+10 1.E-06 1. Botje99 51096 1 0 0 Botje_1000.LHpdf 96 1. 1.E+10 1.E-06 1. Botje99 51097 1 0 0 Botje_1000.LHpdf 97 1. 1.E+10 1.E-06 1. Botje99 51098 1 0 0 Botje_1000.LHpdf 98 1. 1.E+10 1.E-06 1. Botje99 51099 1 0 0 Botje_1000.LHpdf 99 1. 1.E+10 1.E-06 1. Botje99 51100 1 0 0 Botje_1000.LHpdf 100 1. 1.E+10 1.E-06 1. Botje99 51101 1 0 0 Botje_1000.LHpdf 101 1. 1.E+10 1.E-06 1. Botje99 51102 1 0 0 Botje_1000.LHpdf 102 1. 1.E+10 1.E-06 1. Botje99 51103 1 0 0 Botje_1000.LHpdf 103 1. 1.E+10 1.E-06 1. Botje99 51104 1 0 0 Botje_1000.LHpdf 104 1. 1.E+10 1.E-06 1. Botje99 51105 1 0 0 Botje_1000.LHpdf 105 1. 1.E+10 1.E-06 1. Botje99 51106 1 0 0 Botje_1000.LHpdf 106 1. 1.E+10 1.E-06 1. Botje99 51107 1 0 0 Botje_1000.LHpdf 107 1. 1.E+10 1.E-06 1. Botje99 51108 1 0 0 Botje_1000.LHpdf 108 1. 1.E+10 1.E-06 1. Botje99 51109 1 0 0 Botje_1000.LHpdf 109 1. 1.E+10 1.E-06 1. Botje99 51110 1 0 0 Botje_1000.LHpdf 110 1. 1.E+10 1.E-06 1. Botje99 51111 1 0 0 Botje_1000.LHpdf 111 1. 1.E+10 1.E-06 1. Botje99 51112 1 0 0 Botje_1000.LHpdf 112 1. 1.E+10 1.E-06 1. Botje99 51113 1 0 0 Botje_1000.LHpdf 113 1. 1.E+10 1.E-06 1. Botje99 51114 1 0 0 Botje_1000.LHpdf 114 1. 1.E+10 1.E-06 1. Botje99 51115 1 0 0 Botje_1000.LHpdf 115 1. 1.E+10 1.E-06 1. Botje99 51116 1 0 0 Botje_1000.LHpdf 116 1. 1.E+10 1.E-06 1. Botje99 51117 1 0 0 Botje_1000.LHpdf 117 1. 1.E+10 1.E-06 1. Botje99 51118 1 0 0 Botje_1000.LHpdf 118 1. 1.E+10 1.E-06 1. Botje99 51119 1 0 0 Botje_1000.LHpdf 119 1. 1.E+10 1.E-06 1. Botje99 51120 1 0 0 Botje_1000.LHpdf 120 1. 1.E+10 1.E-06 1. Botje99 51121 1 0 0 Botje_1000.LHpdf 121 1. 1.E+10 1.E-06 1. Botje99 51122 1 0 0 Botje_1000.LHpdf 122 1. 1.E+10 1.E-06 1. Botje99 51123 1 0 0 Botje_1000.LHpdf 123 1. 1.E+10 1.E-06 1. Botje99 51124 1 0 0 Botje_1000.LHpdf 124 1. 1.E+10 1.E-06 1. Botje99 51125 1 0 0 Botje_1000.LHpdf 125 1. 1.E+10 1.E-06 1. Botje99 51126 1 0 0 Botje_1000.LHpdf 126 1. 1.E+10 1.E-06 1. Botje99 51127 1 0 0 Botje_1000.LHpdf 127 1. 1.E+10 1.E-06 1. Botje99 51128 1 0 0 Botje_1000.LHpdf 128 1. 1.E+10 1.E-06 1. Botje99 51129 1 0 0 Botje_1000.LHpdf 129 1. 1.E+10 1.E-06 1. Botje99 51130 1 0 0 Botje_1000.LHpdf 130 1. 1.E+10 1.E-06 1. Botje99 51131 1 0 0 Botje_1000.LHpdf 131 1. 1.E+10 1.E-06 1. Botje99 51132 1 0 0 Botje_1000.LHpdf 132 1. 1.E+10 1.E-06 1. Botje99 51133 1 0 0 Botje_1000.LHpdf 133 1. 1.E+10 1.E-06 1. Botje99 51134 1 0 0 Botje_1000.LHpdf 134 1. 1.E+10 1.E-06 1. Botje99 51135 1 0 0 Botje_1000.LHpdf 135 1. 1.E+10 1.E-06 1. Botje99 51136 1 0 0 Botje_1000.LHpdf 136 1. 1.E+10 1.E-06 1. Botje99 51137 1 0 0 Botje_1000.LHpdf 137 1. 1.E+10 1.E-06 1. Botje99 51138 1 0 0 Botje_1000.LHpdf 138 1. 1.E+10 1.E-06 1. Botje99 51139 1 0 0 Botje_1000.LHpdf 139 1. 1.E+10 1.E-06 1. Botje99 51140 1 0 0 Botje_1000.LHpdf 140 1. 1.E+10 1.E-06 1. Botje99 51141 1 0 0 Botje_1000.LHpdf 141 1. 1.E+10 1.E-06 1. Botje99 51142 1 0 0 Botje_1000.LHpdf 142 1. 1.E+10 1.E-06 1. Botje99 51143 1 0 0 Botje_1000.LHpdf 143 1. 1.E+10 1.E-06 1. Botje99 51144 1 0 0 Botje_1000.LHpdf 144 1. 1.E+10 1.E-06 1. Botje99 51145 1 0 0 Botje_1000.LHpdf 145 1. 1.E+10 1.E-06 1. Botje99 51146 1 0 0 Botje_1000.LHpdf 146 1. 1.E+10 1.E-06 1. Botje99 51147 1 0 0 Botje_1000.LHpdf 147 1. 1.E+10 1.E-06 1. Botje99 51148 1 0 0 Botje_1000.LHpdf 148 1. 1.E+10 1.E-06 1. Botje99 51149 1 0 0 Botje_1000.LHpdf 149 1. 1.E+10 1.E-06 1. Botje99 51150 1 0 0 Botje_1000.LHpdf 150 1. 1.E+10 1.E-06 1. Botje99 51151 1 0 0 Botje_1000.LHpdf 151 1. 1.E+10 1.E-06 1. Botje99 51152 1 0 0 Botje_1000.LHpdf 152 1. 1.E+10 1.E-06 1. Botje99 51153 1 0 0 Botje_1000.LHpdf 153 1. 1.E+10 1.E-06 1. Botje99 51154 1 0 0 Botje_1000.LHpdf 154 1. 1.E+10 1.E-06 1. Botje99 51155 1 0 0 Botje_1000.LHpdf 155 1. 1.E+10 1.E-06 1. Botje99 51156 1 0 0 Botje_1000.LHpdf 156 1. 1.E+10 1.E-06 1. Botje99 51157 1 0 0 Botje_1000.LHpdf 157 1. 1.E+10 1.E-06 1. Botje99 51158 1 0 0 Botje_1000.LHpdf 158 1. 1.E+10 1.E-06 1. Botje99 51159 1 0 0 Botje_1000.LHpdf 159 1. 1.E+10 1.E-06 1. Botje99 51160 1 0 0 Botje_1000.LHpdf 160 1. 1.E+10 1.E-06 1. Botje99 51161 1 0 0 Botje_1000.LHpdf 161 1. 1.E+10 1.E-06 1. Botje99 51162 1 0 0 Botje_1000.LHpdf 162 1. 1.E+10 1.E-06 1. Botje99 51163 1 0 0 Botje_1000.LHpdf 163 1. 1.E+10 1.E-06 1. Botje99 51164 1 0 0 Botje_1000.LHpdf 164 1. 1.E+10 1.E-06 1. Botje99 51165 1 0 0 Botje_1000.LHpdf 165 1. 1.E+10 1.E-06 1. Botje99 51166 1 0 0 Botje_1000.LHpdf 166 1. 1.E+10 1.E-06 1. Botje99 51167 1 0 0 Botje_1000.LHpdf 167 1. 1.E+10 1.E-06 1. Botje99 51168 1 0 0 Botje_1000.LHpdf 168 1. 1.E+10 1.E-06 1. Botje99 51169 1 0 0 Botje_1000.LHpdf 169 1. 1.E+10 1.E-06 1. Botje99 51170 1 0 0 Botje_1000.LHpdf 170 1. 1.E+10 1.E-06 1. Botje99 51171 1 0 0 Botje_1000.LHpdf 171 1. 1.E+10 1.E-06 1. Botje99 51172 1 0 0 Botje_1000.LHpdf 172 1. 1.E+10 1.E-06 1. Botje99 51173 1 0 0 Botje_1000.LHpdf 173 1. 1.E+10 1.E-06 1. Botje99 51174 1 0 0 Botje_1000.LHpdf 174 1. 1.E+10 1.E-06 1. Botje99 51175 1 0 0 Botje_1000.LHpdf 175 1. 1.E+10 1.E-06 1. Botje99 51176 1 0 0 Botje_1000.LHpdf 176 1. 1.E+10 1.E-06 1. Botje99 51177 1 0 0 Botje_1000.LHpdf 177 1. 1.E+10 1.E-06 1. Botje99 51178 1 0 0 Botje_1000.LHpdf 178 1. 1.E+10 1.E-06 1. Botje99 51179 1 0 0 Botje_1000.LHpdf 179 1. 1.E+10 1.E-06 1. Botje99 51180 1 0 0 Botje_1000.LHpdf 180 1. 1.E+10 1.E-06 1. Botje99 51181 1 0 0 Botje_1000.LHpdf 181 1. 1.E+10 1.E-06 1. Botje99 51182 1 0 0 Botje_1000.LHpdf 182 1. 1.E+10 1.E-06 1. Botje99 51183 1 0 0 Botje_1000.LHpdf 183 1. 1.E+10 1.E-06 1. Botje99 51184 1 0 0 Botje_1000.LHpdf 184 1. 1.E+10 1.E-06 1. Botje99 51185 1 0 0 Botje_1000.LHpdf 185 1. 1.E+10 1.E-06 1. Botje99 51186 1 0 0 Botje_1000.LHpdf 186 1. 1.E+10 1.E-06 1. Botje99 51187 1 0 0 Botje_1000.LHpdf 187 1. 1.E+10 1.E-06 1. Botje99 51188 1 0 0 Botje_1000.LHpdf 188 1. 1.E+10 1.E-06 1. Botje99 51189 1 0 0 Botje_1000.LHpdf 189 1. 1.E+10 1.E-06 1. Botje99 51190 1 0 0 Botje_1000.LHpdf 190 1. 1.E+10 1.E-06 1. Botje99 51191 1 0 0 Botje_1000.LHpdf 191 1. 1.E+10 1.E-06 1. Botje99 51192 1 0 0 Botje_1000.LHpdf 192 1. 1.E+10 1.E-06 1. Botje99 51193 1 0 0 Botje_1000.LHpdf 193 1. 1.E+10 1.E-06 1. Botje99 51194 1 0 0 Botje_1000.LHpdf 194 1. 1.E+10 1.E-06 1. Botje99 51195 1 0 0 Botje_1000.LHpdf 195 1. 1.E+10 1.E-06 1. Botje99 51196 1 0 0 Botje_1000.LHpdf 196 1. 1.E+10 1.E-06 1. Botje99 51197 1 0 0 Botje_1000.LHpdf 197 1. 1.E+10 1.E-06 1. Botje99 51198 1 0 0 Botje_1000.LHpdf 198 1. 1.E+10 1.E-06 1. Botje99 51199 1 0 0 Botje_1000.LHpdf 199 1. 1.E+10 1.E-06 1. Botje99 51200 1 0 0 Botje_1000.LHpdf 200 1. 1.E+10 1.E-06 1. Botje99 51201 1 0 0 Botje_1000.LHpdf 201 1. 1.E+10 1.E-06 1. Botje99 51202 1 0 0 Botje_1000.LHpdf 202 1. 1.E+10 1.E-06 1. Botje99 51203 1 0 0 Botje_1000.LHpdf 203 1. 1.E+10 1.E-06 1. Botje99 51204 1 0 0 Botje_1000.LHpdf 204 1. 1.E+10 1.E-06 1. Botje99 51205 1 0 0 Botje_1000.LHpdf 205 1. 1.E+10 1.E-06 1. Botje99 51206 1 0 0 Botje_1000.LHpdf 206 1. 1.E+10 1.E-06 1. Botje99 51207 1 0 0 Botje_1000.LHpdf 207 1. 1.E+10 1.E-06 1. Botje99 51208 1 0 0 Botje_1000.LHpdf 208 1. 1.E+10 1.E-06 1. Botje99 51209 1 0 0 Botje_1000.LHpdf 209 1. 1.E+10 1.E-06 1. Botje99 51210 1 0 0 Botje_1000.LHpdf 210 1. 1.E+10 1.E-06 1. Botje99 51211 1 0 0 Botje_1000.LHpdf 211 1. 1.E+10 1.E-06 1. Botje99 51212 1 0 0 Botje_1000.LHpdf 212 1. 1.E+10 1.E-06 1. Botje99 51213 1 0 0 Botje_1000.LHpdf 213 1. 1.E+10 1.E-06 1. Botje99 51214 1 0 0 Botje_1000.LHpdf 214 1. 1.E+10 1.E-06 1. Botje99 51215 1 0 0 Botje_1000.LHpdf 215 1. 1.E+10 1.E-06 1. Botje99 51216 1 0 0 Botje_1000.LHpdf 216 1. 1.E+10 1.E-06 1. Botje99 51217 1 0 0 Botje_1000.LHpdf 217 1. 1.E+10 1.E-06 1. Botje99 51218 1 0 0 Botje_1000.LHpdf 218 1. 1.E+10 1.E-06 1. Botje99 51219 1 0 0 Botje_1000.LHpdf 219 1. 1.E+10 1.E-06 1. Botje99 51220 1 0 0 Botje_1000.LHpdf 220 1. 1.E+10 1.E-06 1. Botje99 51221 1 0 0 Botje_1000.LHpdf 221 1. 1.E+10 1.E-06 1. Botje99 51222 1 0 0 Botje_1000.LHpdf 222 1. 1.E+10 1.E-06 1. Botje99 51223 1 0 0 Botje_1000.LHpdf 223 1. 1.E+10 1.E-06 1. Botje99 51224 1 0 0 Botje_1000.LHpdf 224 1. 1.E+10 1.E-06 1. Botje99 51225 1 0 0 Botje_1000.LHpdf 225 1. 1.E+10 1.E-06 1. Botje99 51226 1 0 0 Botje_1000.LHpdf 226 1. 1.E+10 1.E-06 1. Botje99 51227 1 0 0 Botje_1000.LHpdf 227 1. 1.E+10 1.E-06 1. Botje99 51228 1 0 0 Botje_1000.LHpdf 228 1. 1.E+10 1.E-06 1. Botje99 51229 1 0 0 Botje_1000.LHpdf 229 1. 1.E+10 1.E-06 1. Botje99 51230 1 0 0 Botje_1000.LHpdf 230 1. 1.E+10 1.E-06 1. Botje99 51231 1 0 0 Botje_1000.LHpdf 231 1. 1.E+10 1.E-06 1. Botje99 51232 1 0 0 Botje_1000.LHpdf 232 1. 1.E+10 1.E-06 1. Botje99 51233 1 0 0 Botje_1000.LHpdf 233 1. 1.E+10 1.E-06 1. Botje99 51234 1 0 0 Botje_1000.LHpdf 234 1. 1.E+10 1.E-06 1. Botje99 51235 1 0 0 Botje_1000.LHpdf 235 1. 1.E+10 1.E-06 1. Botje99 51236 1 0 0 Botje_1000.LHpdf 236 1. 1.E+10 1.E-06 1. Botje99 51237 1 0 0 Botje_1000.LHpdf 237 1. 1.E+10 1.E-06 1. Botje99 51238 1 0 0 Botje_1000.LHpdf 238 1. 1.E+10 1.E-06 1. Botje99 51239 1 0 0 Botje_1000.LHpdf 239 1. 1.E+10 1.E-06 1. Botje99 51240 1 0 0 Botje_1000.LHpdf 240 1. 1.E+10 1.E-06 1. Botje99 51241 1 0 0 Botje_1000.LHpdf 241 1. 1.E+10 1.E-06 1. Botje99 51242 1 0 0 Botje_1000.LHpdf 242 1. 1.E+10 1.E-06 1. Botje99 51243 1 0 0 Botje_1000.LHpdf 243 1. 1.E+10 1.E-06 1. Botje99 51244 1 0 0 Botje_1000.LHpdf 244 1. 1.E+10 1.E-06 1. Botje99 51245 1 0 0 Botje_1000.LHpdf 245 1. 1.E+10 1.E-06 1. Botje99 51246 1 0 0 Botje_1000.LHpdf 246 1. 1.E+10 1.E-06 1. Botje99 51247 1 0 0 Botje_1000.LHpdf 247 1. 1.E+10 1.E-06 1. Botje99 51248 1 0 0 Botje_1000.LHpdf 248 1. 1.E+10 1.E-06 1. Botje99 51249 1 0 0 Botje_1000.LHpdf 249 1. 1.E+10 1.E-06 1. Botje99 51250 1 0 0 Botje_1000.LHpdf 250 1. 1.E+10 1.E-06 1. Botje99 51251 1 0 0 Botje_1000.LHpdf 251 1. 1.E+10 1.E-06 1. Botje99 51252 1 0 0 Botje_1000.LHpdf 252 1. 1.E+10 1.E-06 1. Botje99 51253 1 0 0 Botje_1000.LHpdf 253 1. 1.E+10 1.E-06 1. Botje99 51254 1 0 0 Botje_1000.LHpdf 254 1. 1.E+10 1.E-06 1. Botje99 51255 1 0 0 Botje_1000.LHpdf 255 1. 1.E+10 1.E-06 1. Botje99 51256 1 0 0 Botje_1000.LHpdf 256 1. 1.E+10 1.E-06 1. Botje99 51257 1 0 0 Botje_1000.LHpdf 257 1. 1.E+10 1.E-06 1. Botje99 51258 1 0 0 Botje_1000.LHpdf 258 1. 1.E+10 1.E-06 1. Botje99 51259 1 0 0 Botje_1000.LHpdf 259 1. 1.E+10 1.E-06 1. Botje99 51260 1 0 0 Botje_1000.LHpdf 260 1. 1.E+10 1.E-06 1. Botje99 51261 1 0 0 Botje_1000.LHpdf 261 1. 1.E+10 1.E-06 1. Botje99 51262 1 0 0 Botje_1000.LHpdf 262 1. 1.E+10 1.E-06 1. Botje99 51263 1 0 0 Botje_1000.LHpdf 263 1. 1.E+10 1.E-06 1. Botje99 51264 1 0 0 Botje_1000.LHpdf 264 1. 1.E+10 1.E-06 1. Botje99 51265 1 0 0 Botje_1000.LHpdf 265 1. 1.E+10 1.E-06 1. Botje99 51266 1 0 0 Botje_1000.LHpdf 266 1. 1.E+10 1.E-06 1. Botje99 51267 1 0 0 Botje_1000.LHpdf 267 1. 1.E+10 1.E-06 1. Botje99 51268 1 0 0 Botje_1000.LHpdf 268 1. 1.E+10 1.E-06 1. Botje99 51269 1 0 0 Botje_1000.LHpdf 269 1. 1.E+10 1.E-06 1. Botje99 51270 1 0 0 Botje_1000.LHpdf 270 1. 1.E+10 1.E-06 1. Botje99 51271 1 0 0 Botje_1000.LHpdf 271 1. 1.E+10 1.E-06 1. Botje99 51272 1 0 0 Botje_1000.LHpdf 272 1. 1.E+10 1.E-06 1. Botje99 51273 1 0 0 Botje_1000.LHpdf 273 1. 1.E+10 1.E-06 1. Botje99 51274 1 0 0 Botje_1000.LHpdf 274 1. 1.E+10 1.E-06 1. Botje99 51275 1 0 0 Botje_1000.LHpdf 275 1. 1.E+10 1.E-06 1. Botje99 51276 1 0 0 Botje_1000.LHpdf 276 1. 1.E+10 1.E-06 1. Botje99 51277 1 0 0 Botje_1000.LHpdf 277 1. 1.E+10 1.E-06 1. Botje99 51278 1 0 0 Botje_1000.LHpdf 278 1. 1.E+10 1.E-06 1. Botje99 51279 1 0 0 Botje_1000.LHpdf 279 1. 1.E+10 1.E-06 1. Botje99 51280 1 0 0 Botje_1000.LHpdf 280 1. 1.E+10 1.E-06 1. Botje99 51281 1 0 0 Botje_1000.LHpdf 281 1. 1.E+10 1.E-06 1. Botje99 51282 1 0 0 Botje_1000.LHpdf 282 1. 1.E+10 1.E-06 1. Botje99 51283 1 0 0 Botje_1000.LHpdf 283 1. 1.E+10 1.E-06 1. Botje99 51284 1 0 0 Botje_1000.LHpdf 284 1. 1.E+10 1.E-06 1. Botje99 51285 1 0 0 Botje_1000.LHpdf 285 1. 1.E+10 1.E-06 1. Botje99 51286 1 0 0 Botje_1000.LHpdf 286 1. 1.E+10 1.E-06 1. Botje99 51287 1 0 0 Botje_1000.LHpdf 287 1. 1.E+10 1.E-06 1. Botje99 51288 1 0 0 Botje_1000.LHpdf 288 1. 1.E+10 1.E-06 1. Botje99 51289 1 0 0 Botje_1000.LHpdf 289 1. 1.E+10 1.E-06 1. Botje99 51290 1 0 0 Botje_1000.LHpdf 290 1. 1.E+10 1.E-06 1. Botje99 51291 1 0 0 Botje_1000.LHpdf 291 1. 1.E+10 1.E-06 1. Botje99 51292 1 0 0 Botje_1000.LHpdf 292 1. 1.E+10 1.E-06 1. Botje99 51293 1 0 0 Botje_1000.LHpdf 293 1. 1.E+10 1.E-06 1. Botje99 51294 1 0 0 Botje_1000.LHpdf 294 1. 1.E+10 1.E-06 1. Botje99 51295 1 0 0 Botje_1000.LHpdf 295 1. 1.E+10 1.E-06 1. Botje99 51296 1 0 0 Botje_1000.LHpdf 296 1. 1.E+10 1.E-06 1. Botje99 51297 1 0 0 Botje_1000.LHpdf 297 1. 1.E+10 1.E-06 1. Botje99 51298 1 0 0 Botje_1000.LHpdf 298 1. 1.E+10 1.E-06 1. Botje99 51299 1 0 0 Botje_1000.LHpdf 299 1. 1.E+10 1.E-06 1. Botje99 51300 1 0 0 Botje_1000.LHpdf 300 1. 1.E+10 1.E-06 1. Botje99 51301 1 0 0 Botje_1000.LHpdf 301 1. 1.E+10 1.E-06 1. Botje99 51302 1 0 0 Botje_1000.LHpdf 302 1. 1.E+10 1.E-06 1. Botje99 51303 1 0 0 Botje_1000.LHpdf 303 1. 1.E+10 1.E-06 1. Botje99 51304 1 0 0 Botje_1000.LHpdf 304 1. 1.E+10 1.E-06 1. Botje99 51305 1 0 0 Botje_1000.LHpdf 305 1. 1.E+10 1.E-06 1. Botje99 51306 1 0 0 Botje_1000.LHpdf 306 1. 1.E+10 1.E-06 1. Botje99 51307 1 0 0 Botje_1000.LHpdf 307 1. 1.E+10 1.E-06 1. Botje99 51308 1 0 0 Botje_1000.LHpdf 308 1. 1.E+10 1.E-06 1. Botje99 51309 1 0 0 Botje_1000.LHpdf 309 1. 1.E+10 1.E-06 1. Botje99 51310 1 0 0 Botje_1000.LHpdf 310 1. 1.E+10 1.E-06 1. Botje99 51311 1 0 0 Botje_1000.LHpdf 311 1. 1.E+10 1.E-06 1. Botje99 51312 1 0 0 Botje_1000.LHpdf 312 1. 1.E+10 1.E-06 1. Botje99 51313 1 0 0 Botje_1000.LHpdf 313 1. 1.E+10 1.E-06 1. Botje99 51314 1 0 0 Botje_1000.LHpdf 314 1. 1.E+10 1.E-06 1. Botje99 51315 1 0 0 Botje_1000.LHpdf 315 1. 1.E+10 1.E-06 1. Botje99 51316 1 0 0 Botje_1000.LHpdf 316 1. 1.E+10 1.E-06 1. Botje99 51317 1 0 0 Botje_1000.LHpdf 317 1. 1.E+10 1.E-06 1. Botje99 51318 1 0 0 Botje_1000.LHpdf 318 1. 1.E+10 1.E-06 1. Botje99 51319 1 0 0 Botje_1000.LHpdf 319 1. 1.E+10 1.E-06 1. Botje99 51320 1 0 0 Botje_1000.LHpdf 320 1. 1.E+10 1.E-06 1. Botje99 51321 1 0 0 Botje_1000.LHpdf 321 1. 1.E+10 1.E-06 1. Botje99 51322 1 0 0 Botje_1000.LHpdf 322 1. 1.E+10 1.E-06 1. Botje99 51323 1 0 0 Botje_1000.LHpdf 323 1. 1.E+10 1.E-06 1. Botje99 51324 1 0 0 Botje_1000.LHpdf 324 1. 1.E+10 1.E-06 1. Botje99 51325 1 0 0 Botje_1000.LHpdf 325 1. 1.E+10 1.E-06 1. Botje99 51326 1 0 0 Botje_1000.LHpdf 326 1. 1.E+10 1.E-06 1. Botje99 51327 1 0 0 Botje_1000.LHpdf 327 1. 1.E+10 1.E-06 1. Botje99 51328 1 0 0 Botje_1000.LHpdf 328 1. 1.E+10 1.E-06 1. Botje99 51329 1 0 0 Botje_1000.LHpdf 329 1. 1.E+10 1.E-06 1. Botje99 51330 1 0 0 Botje_1000.LHpdf 330 1. 1.E+10 1.E-06 1. Botje99 51331 1 0 0 Botje_1000.LHpdf 331 1. 1.E+10 1.E-06 1. Botje99 51332 1 0 0 Botje_1000.LHpdf 332 1. 1.E+10 1.E-06 1. Botje99 51333 1 0 0 Botje_1000.LHpdf 333 1. 1.E+10 1.E-06 1. Botje99 51334 1 0 0 Botje_1000.LHpdf 334 1. 1.E+10 1.E-06 1. Botje99 51335 1 0 0 Botje_1000.LHpdf 335 1. 1.E+10 1.E-06 1. Botje99 51336 1 0 0 Botje_1000.LHpdf 336 1. 1.E+10 1.E-06 1. Botje99 51337 1 0 0 Botje_1000.LHpdf 337 1. 1.E+10 1.E-06 1. Botje99 51338 1 0 0 Botje_1000.LHpdf 338 1. 1.E+10 1.E-06 1. Botje99 51339 1 0 0 Botje_1000.LHpdf 339 1. 1.E+10 1.E-06 1. Botje99 51340 1 0 0 Botje_1000.LHpdf 340 1. 1.E+10 1.E-06 1. Botje99 51341 1 0 0 Botje_1000.LHpdf 341 1. 1.E+10 1.E-06 1. Botje99 51342 1 0 0 Botje_1000.LHpdf 342 1. 1.E+10 1.E-06 1. Botje99 51343 1 0 0 Botje_1000.LHpdf 343 1. 1.E+10 1.E-06 1. Botje99 51344 1 0 0 Botje_1000.LHpdf 344 1. 1.E+10 1.E-06 1. Botje99 51345 1 0 0 Botje_1000.LHpdf 345 1. 1.E+10 1.E-06 1. Botje99 51346 1 0 0 Botje_1000.LHpdf 346 1. 1.E+10 1.E-06 1. Botje99 51347 1 0 0 Botje_1000.LHpdf 347 1. 1.E+10 1.E-06 1. Botje99 51348 1 0 0 Botje_1000.LHpdf 348 1. 1.E+10 1.E-06 1. Botje99 51349 1 0 0 Botje_1000.LHpdf 349 1. 1.E+10 1.E-06 1. Botje99 51350 1 0 0 Botje_1000.LHpdf 350 1. 1.E+10 1.E-06 1. Botje99 51351 1 0 0 Botje_1000.LHpdf 351 1. 1.E+10 1.E-06 1. Botje99 51352 1 0 0 Botje_1000.LHpdf 352 1. 1.E+10 1.E-06 1. Botje99 51353 1 0 0 Botje_1000.LHpdf 353 1. 1.E+10 1.E-06 1. Botje99 51354 1 0 0 Botje_1000.LHpdf 354 1. 1.E+10 1.E-06 1. Botje99 51355 1 0 0 Botje_1000.LHpdf 355 1. 1.E+10 1.E-06 1. Botje99 51356 1 0 0 Botje_1000.LHpdf 356 1. 1.E+10 1.E-06 1. Botje99 51357 1 0 0 Botje_1000.LHpdf 357 1. 1.E+10 1.E-06 1. Botje99 51358 1 0 0 Botje_1000.LHpdf 358 1. 1.E+10 1.E-06 1. Botje99 51359 1 0 0 Botje_1000.LHpdf 359 1. 1.E+10 1.E-06 1. Botje99 51360 1 0 0 Botje_1000.LHpdf 360 1. 1.E+10 1.E-06 1. Botje99 51361 1 0 0 Botje_1000.LHpdf 361 1. 1.E+10 1.E-06 1. Botje99 51362 1 0 0 Botje_1000.LHpdf 362 1. 1.E+10 1.E-06 1. Botje99 51363 1 0 0 Botje_1000.LHpdf 363 1. 1.E+10 1.E-06 1. Botje99 51364 1 0 0 Botje_1000.LHpdf 364 1. 1.E+10 1.E-06 1. Botje99 51365 1 0 0 Botje_1000.LHpdf 365 1. 1.E+10 1.E-06 1. Botje99 51366 1 0 0 Botje_1000.LHpdf 366 1. 1.E+10 1.E-06 1. Botje99 51367 1 0 0 Botje_1000.LHpdf 367 1. 1.E+10 1.E-06 1. Botje99 51368 1 0 0 Botje_1000.LHpdf 368 1. 1.E+10 1.E-06 1. Botje99 51369 1 0 0 Botje_1000.LHpdf 369 1. 1.E+10 1.E-06 1. Botje99 51370 1 0 0 Botje_1000.LHpdf 370 1. 1.E+10 1.E-06 1. Botje99 51371 1 0 0 Botje_1000.LHpdf 371 1. 1.E+10 1.E-06 1. Botje99 51372 1 0 0 Botje_1000.LHpdf 372 1. 1.E+10 1.E-06 1. Botje99 51373 1 0 0 Botje_1000.LHpdf 373 1. 1.E+10 1.E-06 1. Botje99 51374 1 0 0 Botje_1000.LHpdf 374 1. 1.E+10 1.E-06 1. Botje99 51375 1 0 0 Botje_1000.LHpdf 375 1. 1.E+10 1.E-06 1. Botje99 51376 1 0 0 Botje_1000.LHpdf 376 1. 1.E+10 1.E-06 1. Botje99 51377 1 0 0 Botje_1000.LHpdf 377 1. 1.E+10 1.E-06 1. Botje99 51378 1 0 0 Botje_1000.LHpdf 378 1. 1.E+10 1.E-06 1. Botje99 51379 1 0 0 Botje_1000.LHpdf 379 1. 1.E+10 1.E-06 1. Botje99 51380 1 0 0 Botje_1000.LHpdf 380 1. 1.E+10 1.E-06 1. Botje99 51381 1 0 0 Botje_1000.LHpdf 381 1. 1.E+10 1.E-06 1. Botje99 51382 1 0 0 Botje_1000.LHpdf 382 1. 1.E+10 1.E-06 1. Botje99 51383 1 0 0 Botje_1000.LHpdf 383 1. 1.E+10 1.E-06 1. Botje99 51384 1 0 0 Botje_1000.LHpdf 384 1. 1.E+10 1.E-06 1. Botje99 51385 1 0 0 Botje_1000.LHpdf 385 1. 1.E+10 1.E-06 1. Botje99 51386 1 0 0 Botje_1000.LHpdf 386 1. 1.E+10 1.E-06 1. Botje99 51387 1 0 0 Botje_1000.LHpdf 387 1. 1.E+10 1.E-06 1. Botje99 51388 1 0 0 Botje_1000.LHpdf 388 1. 1.E+10 1.E-06 1. Botje99 51389 1 0 0 Botje_1000.LHpdf 389 1. 1.E+10 1.E-06 1. Botje99 51390 1 0 0 Botje_1000.LHpdf 390 1. 1.E+10 1.E-06 1. Botje99 51391 1 0 0 Botje_1000.LHpdf 391 1. 1.E+10 1.E-06 1. Botje99 51392 1 0 0 Botje_1000.LHpdf 392 1. 1.E+10 1.E-06 1. Botje99 51393 1 0 0 Botje_1000.LHpdf 393 1. 1.E+10 1.E-06 1. Botje99 51394 1 0 0 Botje_1000.LHpdf 394 1. 1.E+10 1.E-06 1. Botje99 51395 1 0 0 Botje_1000.LHpdf 395 1. 1.E+10 1.E-06 1. Botje99 51396 1 0 0 Botje_1000.LHpdf 396 1. 1.E+10 1.E-06 1. Botje99 51397 1 0 0 Botje_1000.LHpdf 397 1. 1.E+10 1.E-06 1. Botje99 51398 1 0 0 Botje_1000.LHpdf 398 1. 1.E+10 1.E-06 1. Botje99 51399 1 0 0 Botje_1000.LHpdf 399 1. 1.E+10 1.E-06 1. Botje99 51400 1 0 0 Botje_1000.LHpdf 400 1. 1.E+10 1.E-06 1. Botje99 51401 1 0 0 Botje_1000.LHpdf 401 1. 1.E+10 1.E-06 1. Botje99 51402 1 0 0 Botje_1000.LHpdf 402 1. 1.E+10 1.E-06 1. Botje99 51403 1 0 0 Botje_1000.LHpdf 403 1. 1.E+10 1.E-06 1. Botje99 51404 1 0 0 Botje_1000.LHpdf 404 1. 1.E+10 1.E-06 1. Botje99 51405 1 0 0 Botje_1000.LHpdf 405 1. 1.E+10 1.E-06 1. Botje99 51406 1 0 0 Botje_1000.LHpdf 406 1. 1.E+10 1.E-06 1. Botje99 51407 1 0 0 Botje_1000.LHpdf 407 1. 1.E+10 1.E-06 1. Botje99 51408 1 0 0 Botje_1000.LHpdf 408 1. 1.E+10 1.E-06 1. Botje99 51409 1 0 0 Botje_1000.LHpdf 409 1. 1.E+10 1.E-06 1. Botje99 51410 1 0 0 Botje_1000.LHpdf 410 1. 1.E+10 1.E-06 1. Botje99 51411 1 0 0 Botje_1000.LHpdf 411 1. 1.E+10 1.E-06 1. Botje99 51412 1 0 0 Botje_1000.LHpdf 412 1. 1.E+10 1.E-06 1. Botje99 51413 1 0 0 Botje_1000.LHpdf 413 1. 1.E+10 1.E-06 1. Botje99 51414 1 0 0 Botje_1000.LHpdf 414 1. 1.E+10 1.E-06 1. Botje99 51415 1 0 0 Botje_1000.LHpdf 415 1. 1.E+10 1.E-06 1. Botje99 51416 1 0 0 Botje_1000.LHpdf 416 1. 1.E+10 1.E-06 1. Botje99 51417 1 0 0 Botje_1000.LHpdf 417 1. 1.E+10 1.E-06 1. Botje99 51418 1 0 0 Botje_1000.LHpdf 418 1. 1.E+10 1.E-06 1. Botje99 51419 1 0 0 Botje_1000.LHpdf 419 1. 1.E+10 1.E-06 1. Botje99 51420 1 0 0 Botje_1000.LHpdf 420 1. 1.E+10 1.E-06 1. Botje99 51421 1 0 0 Botje_1000.LHpdf 421 1. 1.E+10 1.E-06 1. Botje99 51422 1 0 0 Botje_1000.LHpdf 422 1. 1.E+10 1.E-06 1. Botje99 51423 1 0 0 Botje_1000.LHpdf 423 1. 1.E+10 1.E-06 1. Botje99 51424 1 0 0 Botje_1000.LHpdf 424 1. 1.E+10 1.E-06 1. Botje99 51425 1 0 0 Botje_1000.LHpdf 425 1. 1.E+10 1.E-06 1. Botje99 51426 1 0 0 Botje_1000.LHpdf 426 1. 1.E+10 1.E-06 1. Botje99 51427 1 0 0 Botje_1000.LHpdf 427 1. 1.E+10 1.E-06 1. Botje99 51428 1 0 0 Botje_1000.LHpdf 428 1. 1.E+10 1.E-06 1. Botje99 51429 1 0 0 Botje_1000.LHpdf 429 1. 1.E+10 1.E-06 1. Botje99 51430 1 0 0 Botje_1000.LHpdf 430 1. 1.E+10 1.E-06 1. Botje99 51431 1 0 0 Botje_1000.LHpdf 431 1. 1.E+10 1.E-06 1. Botje99 51432 1 0 0 Botje_1000.LHpdf 432 1. 1.E+10 1.E-06 1. Botje99 51433 1 0 0 Botje_1000.LHpdf 433 1. 1.E+10 1.E-06 1. Botje99 51434 1 0 0 Botje_1000.LHpdf 434 1. 1.E+10 1.E-06 1. Botje99 51435 1 0 0 Botje_1000.LHpdf 435 1. 1.E+10 1.E-06 1. Botje99 51436 1 0 0 Botje_1000.LHpdf 436 1. 1.E+10 1.E-06 1. Botje99 51437 1 0 0 Botje_1000.LHpdf 437 1. 1.E+10 1.E-06 1. Botje99 51438 1 0 0 Botje_1000.LHpdf 438 1. 1.E+10 1.E-06 1. Botje99 51439 1 0 0 Botje_1000.LHpdf 439 1. 1.E+10 1.E-06 1. Botje99 51440 1 0 0 Botje_1000.LHpdf 440 1. 1.E+10 1.E-06 1. Botje99 51441 1 0 0 Botje_1000.LHpdf 441 1. 1.E+10 1.E-06 1. Botje99 51442 1 0 0 Botje_1000.LHpdf 442 1. 1.E+10 1.E-06 1. Botje99 51443 1 0 0 Botje_1000.LHpdf 443 1. 1.E+10 1.E-06 1. Botje99 51444 1 0 0 Botje_1000.LHpdf 444 1. 1.E+10 1.E-06 1. Botje99 51445 1 0 0 Botje_1000.LHpdf 445 1. 1.E+10 1.E-06 1. Botje99 51446 1 0 0 Botje_1000.LHpdf 446 1. 1.E+10 1.E-06 1. Botje99 51447 1 0 0 Botje_1000.LHpdf 447 1. 1.E+10 1.E-06 1. Botje99 51448 1 0 0 Botje_1000.LHpdf 448 1. 1.E+10 1.E-06 1. Botje99 51449 1 0 0 Botje_1000.LHpdf 449 1. 1.E+10 1.E-06 1. Botje99 51450 1 0 0 Botje_1000.LHpdf 450 1. 1.E+10 1.E-06 1. Botje99 51451 1 0 0 Botje_1000.LHpdf 451 1. 1.E+10 1.E-06 1. Botje99 51452 1 0 0 Botje_1000.LHpdf 452 1. 1.E+10 1.E-06 1. Botje99 51453 1 0 0 Botje_1000.LHpdf 453 1. 1.E+10 1.E-06 1. Botje99 51454 1 0 0 Botje_1000.LHpdf 454 1. 1.E+10 1.E-06 1. Botje99 51455 1 0 0 Botje_1000.LHpdf 455 1. 1.E+10 1.E-06 1. Botje99 51456 1 0 0 Botje_1000.LHpdf 456 1. 1.E+10 1.E-06 1. Botje99 51457 1 0 0 Botje_1000.LHpdf 457 1. 1.E+10 1.E-06 1. Botje99 51458 1 0 0 Botje_1000.LHpdf 458 1. 1.E+10 1.E-06 1. Botje99 51459 1 0 0 Botje_1000.LHpdf 459 1. 1.E+10 1.E-06 1. Botje99 51460 1 0 0 Botje_1000.LHpdf 460 1. 1.E+10 1.E-06 1. Botje99 51461 1 0 0 Botje_1000.LHpdf 461 1. 1.E+10 1.E-06 1. Botje99 51462 1 0 0 Botje_1000.LHpdf 462 1. 1.E+10 1.E-06 1. Botje99 51463 1 0 0 Botje_1000.LHpdf 463 1. 1.E+10 1.E-06 1. Botje99 51464 1 0 0 Botje_1000.LHpdf 464 1. 1.E+10 1.E-06 1. Botje99 51465 1 0 0 Botje_1000.LHpdf 465 1. 1.E+10 1.E-06 1. Botje99 51466 1 0 0 Botje_1000.LHpdf 466 1. 1.E+10 1.E-06 1. Botje99 51467 1 0 0 Botje_1000.LHpdf 467 1. 1.E+10 1.E-06 1. Botje99 51468 1 0 0 Botje_1000.LHpdf 468 1. 1.E+10 1.E-06 1. Botje99 51469 1 0 0 Botje_1000.LHpdf 469 1. 1.E+10 1.E-06 1. Botje99 51470 1 0 0 Botje_1000.LHpdf 470 1. 1.E+10 1.E-06 1. Botje99 51471 1 0 0 Botje_1000.LHpdf 471 1. 1.E+10 1.E-06 1. Botje99 51472 1 0 0 Botje_1000.LHpdf 472 1. 1.E+10 1.E-06 1. Botje99 51473 1 0 0 Botje_1000.LHpdf 473 1. 1.E+10 1.E-06 1. Botje99 51474 1 0 0 Botje_1000.LHpdf 474 1. 1.E+10 1.E-06 1. Botje99 51475 1 0 0 Botje_1000.LHpdf 475 1. 1.E+10 1.E-06 1. Botje99 51476 1 0 0 Botje_1000.LHpdf 476 1. 1.E+10 1.E-06 1. Botje99 51477 1 0 0 Botje_1000.LHpdf 477 1. 1.E+10 1.E-06 1. Botje99 51478 1 0 0 Botje_1000.LHpdf 478 1. 1.E+10 1.E-06 1. Botje99 51479 1 0 0 Botje_1000.LHpdf 479 1. 1.E+10 1.E-06 1. Botje99 51480 1 0 0 Botje_1000.LHpdf 480 1. 1.E+10 1.E-06 1. Botje99 51481 1 0 0 Botje_1000.LHpdf 481 1. 1.E+10 1.E-06 1. Botje99 51482 1 0 0 Botje_1000.LHpdf 482 1. 1.E+10 1.E-06 1. Botje99 51483 1 0 0 Botje_1000.LHpdf 483 1. 1.E+10 1.E-06 1. Botje99 51484 1 0 0 Botje_1000.LHpdf 484 1. 1.E+10 1.E-06 1. Botje99 51485 1 0 0 Botje_1000.LHpdf 485 1. 1.E+10 1.E-06 1. Botje99 51486 1 0 0 Botje_1000.LHpdf 486 1. 1.E+10 1.E-06 1. Botje99 51487 1 0 0 Botje_1000.LHpdf 487 1. 1.E+10 1.E-06 1. Botje99 51488 1 0 0 Botje_1000.LHpdf 488 1. 1.E+10 1.E-06 1. Botje99 51489 1 0 0 Botje_1000.LHpdf 489 1. 1.E+10 1.E-06 1. Botje99 51490 1 0 0 Botje_1000.LHpdf 490 1. 1.E+10 1.E-06 1. Botje99 51491 1 0 0 Botje_1000.LHpdf 491 1. 1.E+10 1.E-06 1. Botje99 51492 1 0 0 Botje_1000.LHpdf 492 1. 1.E+10 1.E-06 1. Botje99 51493 1 0 0 Botje_1000.LHpdf 493 1. 1.E+10 1.E-06 1. Botje99 51494 1 0 0 Botje_1000.LHpdf 494 1. 1.E+10 1.E-06 1. Botje99 51495 1 0 0 Botje_1000.LHpdf 495 1. 1.E+10 1.E-06 1. Botje99 51496 1 0 0 Botje_1000.LHpdf 496 1. 1.E+10 1.E-06 1. Botje99 51497 1 0 0 Botje_1000.LHpdf 497 1. 1.E+10 1.E-06 1. Botje99 51498 1 0 0 Botje_1000.LHpdf 498 1. 1.E+10 1.E-06 1. Botje99 51499 1 0 0 Botje_1000.LHpdf 499 1. 1.E+10 1.E-06 1. Botje99 51500 1 0 0 Botje_1000.LHpdf 500 1. 1.E+10 1.E-06 1. Botje99 51501 1 0 0 Botje_1000.LHpdf 501 1. 1.E+10 1.E-06 1. Botje99 51502 1 0 0 Botje_1000.LHpdf 502 1. 1.E+10 1.E-06 1. Botje99 51503 1 0 0 Botje_1000.LHpdf 503 1. 1.E+10 1.E-06 1. Botje99 51504 1 0 0 Botje_1000.LHpdf 504 1. 1.E+10 1.E-06 1. Botje99 51505 1 0 0 Botje_1000.LHpdf 505 1. 1.E+10 1.E-06 1. Botje99 51506 1 0 0 Botje_1000.LHpdf 506 1. 1.E+10 1.E-06 1. Botje99 51507 1 0 0 Botje_1000.LHpdf 507 1. 1.E+10 1.E-06 1. Botje99 51508 1 0 0 Botje_1000.LHpdf 508 1. 1.E+10 1.E-06 1. Botje99 51509 1 0 0 Botje_1000.LHpdf 509 1. 1.E+10 1.E-06 1. Botje99 51510 1 0 0 Botje_1000.LHpdf 510 1. 1.E+10 1.E-06 1. Botje99 51511 1 0 0 Botje_1000.LHpdf 511 1. 1.E+10 1.E-06 1. Botje99 51512 1 0 0 Botje_1000.LHpdf 512 1. 1.E+10 1.E-06 1. Botje99 51513 1 0 0 Botje_1000.LHpdf 513 1. 1.E+10 1.E-06 1. Botje99 51514 1 0 0 Botje_1000.LHpdf 514 1. 1.E+10 1.E-06 1. Botje99 51515 1 0 0 Botje_1000.LHpdf 515 1. 1.E+10 1.E-06 1. Botje99 51516 1 0 0 Botje_1000.LHpdf 516 1. 1.E+10 1.E-06 1. Botje99 51517 1 0 0 Botje_1000.LHpdf 517 1. 1.E+10 1.E-06 1. Botje99 51518 1 0 0 Botje_1000.LHpdf 518 1. 1.E+10 1.E-06 1. Botje99 51519 1 0 0 Botje_1000.LHpdf 519 1. 1.E+10 1.E-06 1. Botje99 51520 1 0 0 Botje_1000.LHpdf 520 1. 1.E+10 1.E-06 1. Botje99 51521 1 0 0 Botje_1000.LHpdf 521 1. 1.E+10 1.E-06 1. Botje99 51522 1 0 0 Botje_1000.LHpdf 522 1. 1.E+10 1.E-06 1. Botje99 51523 1 0 0 Botje_1000.LHpdf 523 1. 1.E+10 1.E-06 1. Botje99 51524 1 0 0 Botje_1000.LHpdf 524 1. 1.E+10 1.E-06 1. Botje99 51525 1 0 0 Botje_1000.LHpdf 525 1. 1.E+10 1.E-06 1. Botje99 51526 1 0 0 Botje_1000.LHpdf 526 1. 1.E+10 1.E-06 1. Botje99 51527 1 0 0 Botje_1000.LHpdf 527 1. 1.E+10 1.E-06 1. Botje99 51528 1 0 0 Botje_1000.LHpdf 528 1. 1.E+10 1.E-06 1. Botje99 51529 1 0 0 Botje_1000.LHpdf 529 1. 1.E+10 1.E-06 1. Botje99 51530 1 0 0 Botje_1000.LHpdf 530 1. 1.E+10 1.E-06 1. Botje99 51531 1 0 0 Botje_1000.LHpdf 531 1. 1.E+10 1.E-06 1. Botje99 51532 1 0 0 Botje_1000.LHpdf 532 1. 1.E+10 1.E-06 1. Botje99 51533 1 0 0 Botje_1000.LHpdf 533 1. 1.E+10 1.E-06 1. Botje99 51534 1 0 0 Botje_1000.LHpdf 534 1. 1.E+10 1.E-06 1. Botje99 51535 1 0 0 Botje_1000.LHpdf 535 1. 1.E+10 1.E-06 1. Botje99 51536 1 0 0 Botje_1000.LHpdf 536 1. 1.E+10 1.E-06 1. Botje99 51537 1 0 0 Botje_1000.LHpdf 537 1. 1.E+10 1.E-06 1. Botje99 51538 1 0 0 Botje_1000.LHpdf 538 1. 1.E+10 1.E-06 1. Botje99 51539 1 0 0 Botje_1000.LHpdf 539 1. 1.E+10 1.E-06 1. Botje99 51540 1 0 0 Botje_1000.LHpdf 540 1. 1.E+10 1.E-06 1. Botje99 51541 1 0 0 Botje_1000.LHpdf 541 1. 1.E+10 1.E-06 1. Botje99 51542 1 0 0 Botje_1000.LHpdf 542 1. 1.E+10 1.E-06 1. Botje99 51543 1 0 0 Botje_1000.LHpdf 543 1. 1.E+10 1.E-06 1. Botje99 51544 1 0 0 Botje_1000.LHpdf 544 1. 1.E+10 1.E-06 1. Botje99 51545 1 0 0 Botje_1000.LHpdf 545 1. 1.E+10 1.E-06 1. Botje99 51546 1 0 0 Botje_1000.LHpdf 546 1. 1.E+10 1.E-06 1. Botje99 51547 1 0 0 Botje_1000.LHpdf 547 1. 1.E+10 1.E-06 1. Botje99 51548 1 0 0 Botje_1000.LHpdf 548 1. 1.E+10 1.E-06 1. Botje99 51549 1 0 0 Botje_1000.LHpdf 549 1. 1.E+10 1.E-06 1. Botje99 51550 1 0 0 Botje_1000.LHpdf 550 1. 1.E+10 1.E-06 1. Botje99 51551 1 0 0 Botje_1000.LHpdf 551 1. 1.E+10 1.E-06 1. Botje99 51552 1 0 0 Botje_1000.LHpdf 552 1. 1.E+10 1.E-06 1. Botje99 51553 1 0 0 Botje_1000.LHpdf 553 1. 1.E+10 1.E-06 1. Botje99 51554 1 0 0 Botje_1000.LHpdf 554 1. 1.E+10 1.E-06 1. Botje99 51555 1 0 0 Botje_1000.LHpdf 555 1. 1.E+10 1.E-06 1. Botje99 51556 1 0 0 Botje_1000.LHpdf 556 1. 1.E+10 1.E-06 1. Botje99 51557 1 0 0 Botje_1000.LHpdf 557 1. 1.E+10 1.E-06 1. Botje99 51558 1 0 0 Botje_1000.LHpdf 558 1. 1.E+10 1.E-06 1. Botje99 51559 1 0 0 Botje_1000.LHpdf 559 1. 1.E+10 1.E-06 1. Botje99 51560 1 0 0 Botje_1000.LHpdf 560 1. 1.E+10 1.E-06 1. Botje99 51561 1 0 0 Botje_1000.LHpdf 561 1. 1.E+10 1.E-06 1. Botje99 51562 1 0 0 Botje_1000.LHpdf 562 1. 1.E+10 1.E-06 1. Botje99 51563 1 0 0 Botje_1000.LHpdf 563 1. 1.E+10 1.E-06 1. Botje99 51564 1 0 0 Botje_1000.LHpdf 564 1. 1.E+10 1.E-06 1. Botje99 51565 1 0 0 Botje_1000.LHpdf 565 1. 1.E+10 1.E-06 1. Botje99 51566 1 0 0 Botje_1000.LHpdf 566 1. 1.E+10 1.E-06 1. Botje99 51567 1 0 0 Botje_1000.LHpdf 567 1. 1.E+10 1.E-06 1. Botje99 51568 1 0 0 Botje_1000.LHpdf 568 1. 1.E+10 1.E-06 1. Botje99 51569 1 0 0 Botje_1000.LHpdf 569 1. 1.E+10 1.E-06 1. Botje99 51570 1 0 0 Botje_1000.LHpdf 570 1. 1.E+10 1.E-06 1. Botje99 51571 1 0 0 Botje_1000.LHpdf 571 1. 1.E+10 1.E-06 1. Botje99 51572 1 0 0 Botje_1000.LHpdf 572 1. 1.E+10 1.E-06 1. Botje99 51573 1 0 0 Botje_1000.LHpdf 573 1. 1.E+10 1.E-06 1. Botje99 51574 1 0 0 Botje_1000.LHpdf 574 1. 1.E+10 1.E-06 1. Botje99 51575 1 0 0 Botje_1000.LHpdf 575 1. 1.E+10 1.E-06 1. Botje99 51576 1 0 0 Botje_1000.LHpdf 576 1. 1.E+10 1.E-06 1. Botje99 51577 1 0 0 Botje_1000.LHpdf 577 1. 1.E+10 1.E-06 1. Botje99 51578 1 0 0 Botje_1000.LHpdf 578 1. 1.E+10 1.E-06 1. Botje99 51579 1 0 0 Botje_1000.LHpdf 579 1. 1.E+10 1.E-06 1. Botje99 51580 1 0 0 Botje_1000.LHpdf 580 1. 1.E+10 1.E-06 1. Botje99 51581 1 0 0 Botje_1000.LHpdf 581 1. 1.E+10 1.E-06 1. Botje99 51582 1 0 0 Botje_1000.LHpdf 582 1. 1.E+10 1.E-06 1. Botje99 51583 1 0 0 Botje_1000.LHpdf 583 1. 1.E+10 1.E-06 1. Botje99 51584 1 0 0 Botje_1000.LHpdf 584 1. 1.E+10 1.E-06 1. Botje99 51585 1 0 0 Botje_1000.LHpdf 585 1. 1.E+10 1.E-06 1. Botje99 51586 1 0 0 Botje_1000.LHpdf 586 1. 1.E+10 1.E-06 1. Botje99 51587 1 0 0 Botje_1000.LHpdf 587 1. 1.E+10 1.E-06 1. Botje99 51588 1 0 0 Botje_1000.LHpdf 588 1. 1.E+10 1.E-06 1. Botje99 51589 1 0 0 Botje_1000.LHpdf 589 1. 1.E+10 1.E-06 1. Botje99 51590 1 0 0 Botje_1000.LHpdf 590 1. 1.E+10 1.E-06 1. Botje99 51591 1 0 0 Botje_1000.LHpdf 591 1. 1.E+10 1.E-06 1. Botje99 51592 1 0 0 Botje_1000.LHpdf 592 1. 1.E+10 1.E-06 1. Botje99 51593 1 0 0 Botje_1000.LHpdf 593 1. 1.E+10 1.E-06 1. Botje99 51594 1 0 0 Botje_1000.LHpdf 594 1. 1.E+10 1.E-06 1. Botje99 51595 1 0 0 Botje_1000.LHpdf 595 1. 1.E+10 1.E-06 1. Botje99 51596 1 0 0 Botje_1000.LHpdf 596 1. 1.E+10 1.E-06 1. Botje99 51597 1 0 0 Botje_1000.LHpdf 597 1. 1.E+10 1.E-06 1. Botje99 51598 1 0 0 Botje_1000.LHpdf 598 1. 1.E+10 1.E-06 1. Botje99 51599 1 0 0 Botje_1000.LHpdf 599 1. 1.E+10 1.E-06 1. Botje99 51600 1 0 0 Botje_1000.LHpdf 600 1. 1.E+10 1.E-06 1. Botje99 51601 1 0 0 Botje_1000.LHpdf 601 1. 1.E+10 1.E-06 1. Botje99 51602 1 0 0 Botje_1000.LHpdf 602 1. 1.E+10 1.E-06 1. Botje99 51603 1 0 0 Botje_1000.LHpdf 603 1. 1.E+10 1.E-06 1. Botje99 51604 1 0 0 Botje_1000.LHpdf 604 1. 1.E+10 1.E-06 1. Botje99 51605 1 0 0 Botje_1000.LHpdf 605 1. 1.E+10 1.E-06 1. Botje99 51606 1 0 0 Botje_1000.LHpdf 606 1. 1.E+10 1.E-06 1. Botje99 51607 1 0 0 Botje_1000.LHpdf 607 1. 1.E+10 1.E-06 1. Botje99 51608 1 0 0 Botje_1000.LHpdf 608 1. 1.E+10 1.E-06 1. Botje99 51609 1 0 0 Botje_1000.LHpdf 609 1. 1.E+10 1.E-06 1. Botje99 51610 1 0 0 Botje_1000.LHpdf 610 1. 1.E+10 1.E-06 1. Botje99 51611 1 0 0 Botje_1000.LHpdf 611 1. 1.E+10 1.E-06 1. Botje99 51612 1 0 0 Botje_1000.LHpdf 612 1. 1.E+10 1.E-06 1. Botje99 51613 1 0 0 Botje_1000.LHpdf 613 1. 1.E+10 1.E-06 1. Botje99 51614 1 0 0 Botje_1000.LHpdf 614 1. 1.E+10 1.E-06 1. Botje99 51615 1 0 0 Botje_1000.LHpdf 615 1. 1.E+10 1.E-06 1. Botje99 51616 1 0 0 Botje_1000.LHpdf 616 1. 1.E+10 1.E-06 1. Botje99 51617 1 0 0 Botje_1000.LHpdf 617 1. 1.E+10 1.E-06 1. Botje99 51618 1 0 0 Botje_1000.LHpdf 618 1. 1.E+10 1.E-06 1. Botje99 51619 1 0 0 Botje_1000.LHpdf 619 1. 1.E+10 1.E-06 1. Botje99 51620 1 0 0 Botje_1000.LHpdf 620 1. 1.E+10 1.E-06 1. Botje99 51621 1 0 0 Botje_1000.LHpdf 621 1. 1.E+10 1.E-06 1. Botje99 51622 1 0 0 Botje_1000.LHpdf 622 1. 1.E+10 1.E-06 1. Botje99 51623 1 0 0 Botje_1000.LHpdf 623 1. 1.E+10 1.E-06 1. Botje99 51624 1 0 0 Botje_1000.LHpdf 624 1. 1.E+10 1.E-06 1. Botje99 51625 1 0 0 Botje_1000.LHpdf 625 1. 1.E+10 1.E-06 1. Botje99 51626 1 0 0 Botje_1000.LHpdf 626 1. 1.E+10 1.E-06 1. Botje99 51627 1 0 0 Botje_1000.LHpdf 627 1. 1.E+10 1.E-06 1. Botje99 51628 1 0 0 Botje_1000.LHpdf 628 1. 1.E+10 1.E-06 1. Botje99 51629 1 0 0 Botje_1000.LHpdf 629 1. 1.E+10 1.E-06 1. Botje99 51630 1 0 0 Botje_1000.LHpdf 630 1. 1.E+10 1.E-06 1. Botje99 51631 1 0 0 Botje_1000.LHpdf 631 1. 1.E+10 1.E-06 1. Botje99 51632 1 0 0 Botje_1000.LHpdf 632 1. 1.E+10 1.E-06 1. Botje99 51633 1 0 0 Botje_1000.LHpdf 633 1. 1.E+10 1.E-06 1. Botje99 51634 1 0 0 Botje_1000.LHpdf 634 1. 1.E+10 1.E-06 1. Botje99 51635 1 0 0 Botje_1000.LHpdf 635 1. 1.E+10 1.E-06 1. Botje99 51636 1 0 0 Botje_1000.LHpdf 636 1. 1.E+10 1.E-06 1. Botje99 51637 1 0 0 Botje_1000.LHpdf 637 1. 1.E+10 1.E-06 1. Botje99 51638 1 0 0 Botje_1000.LHpdf 638 1. 1.E+10 1.E-06 1. Botje99 51639 1 0 0 Botje_1000.LHpdf 639 1. 1.E+10 1.E-06 1. Botje99 51640 1 0 0 Botje_1000.LHpdf 640 1. 1.E+10 1.E-06 1. Botje99 51641 1 0 0 Botje_1000.LHpdf 641 1. 1.E+10 1.E-06 1. Botje99 51642 1 0 0 Botje_1000.LHpdf 642 1. 1.E+10 1.E-06 1. Botje99 51643 1 0 0 Botje_1000.LHpdf 643 1. 1.E+10 1.E-06 1. Botje99 51644 1 0 0 Botje_1000.LHpdf 644 1. 1.E+10 1.E-06 1. Botje99 51645 1 0 0 Botje_1000.LHpdf 645 1. 1.E+10 1.E-06 1. Botje99 51646 1 0 0 Botje_1000.LHpdf 646 1. 1.E+10 1.E-06 1. Botje99 51647 1 0 0 Botje_1000.LHpdf 647 1. 1.E+10 1.E-06 1. Botje99 51648 1 0 0 Botje_1000.LHpdf 648 1. 1.E+10 1.E-06 1. Botje99 51649 1 0 0 Botje_1000.LHpdf 649 1. 1.E+10 1.E-06 1. Botje99 51650 1 0 0 Botje_1000.LHpdf 650 1. 1.E+10 1.E-06 1. Botje99 51651 1 0 0 Botje_1000.LHpdf 651 1. 1.E+10 1.E-06 1. Botje99 51652 1 0 0 Botje_1000.LHpdf 652 1. 1.E+10 1.E-06 1. Botje99 51653 1 0 0 Botje_1000.LHpdf 653 1. 1.E+10 1.E-06 1. Botje99 51654 1 0 0 Botje_1000.LHpdf 654 1. 1.E+10 1.E-06 1. Botje99 51655 1 0 0 Botje_1000.LHpdf 655 1. 1.E+10 1.E-06 1. Botje99 51656 1 0 0 Botje_1000.LHpdf 656 1. 1.E+10 1.E-06 1. Botje99 51657 1 0 0 Botje_1000.LHpdf 657 1. 1.E+10 1.E-06 1. Botje99 51658 1 0 0 Botje_1000.LHpdf 658 1. 1.E+10 1.E-06 1. Botje99 51659 1 0 0 Botje_1000.LHpdf 659 1. 1.E+10 1.E-06 1. Botje99 51660 1 0 0 Botje_1000.LHpdf 660 1. 1.E+10 1.E-06 1. Botje99 51661 1 0 0 Botje_1000.LHpdf 661 1. 1.E+10 1.E-06 1. Botje99 51662 1 0 0 Botje_1000.LHpdf 662 1. 1.E+10 1.E-06 1. Botje99 51663 1 0 0 Botje_1000.LHpdf 663 1. 1.E+10 1.E-06 1. Botje99 51664 1 0 0 Botje_1000.LHpdf 664 1. 1.E+10 1.E-06 1. Botje99 51665 1 0 0 Botje_1000.LHpdf 665 1. 1.E+10 1.E-06 1. Botje99 51666 1 0 0 Botje_1000.LHpdf 666 1. 1.E+10 1.E-06 1. Botje99 51667 1 0 0 Botje_1000.LHpdf 667 1. 1.E+10 1.E-06 1. Botje99 51668 1 0 0 Botje_1000.LHpdf 668 1. 1.E+10 1.E-06 1. Botje99 51669 1 0 0 Botje_1000.LHpdf 669 1. 1.E+10 1.E-06 1. Botje99 51670 1 0 0 Botje_1000.LHpdf 670 1. 1.E+10 1.E-06 1. Botje99 51671 1 0 0 Botje_1000.LHpdf 671 1. 1.E+10 1.E-06 1. Botje99 51672 1 0 0 Botje_1000.LHpdf 672 1. 1.E+10 1.E-06 1. Botje99 51673 1 0 0 Botje_1000.LHpdf 673 1. 1.E+10 1.E-06 1. Botje99 51674 1 0 0 Botje_1000.LHpdf 674 1. 1.E+10 1.E-06 1. Botje99 51675 1 0 0 Botje_1000.LHpdf 675 1. 1.E+10 1.E-06 1. Botje99 51676 1 0 0 Botje_1000.LHpdf 676 1. 1.E+10 1.E-06 1. Botje99 51677 1 0 0 Botje_1000.LHpdf 677 1. 1.E+10 1.E-06 1. Botje99 51678 1 0 0 Botje_1000.LHpdf 678 1. 1.E+10 1.E-06 1. Botje99 51679 1 0 0 Botje_1000.LHpdf 679 1. 1.E+10 1.E-06 1. Botje99 51680 1 0 0 Botje_1000.LHpdf 680 1. 1.E+10 1.E-06 1. Botje99 51681 1 0 0 Botje_1000.LHpdf 681 1. 1.E+10 1.E-06 1. Botje99 51682 1 0 0 Botje_1000.LHpdf 682 1. 1.E+10 1.E-06 1. Botje99 51683 1 0 0 Botje_1000.LHpdf 683 1. 1.E+10 1.E-06 1. Botje99 51684 1 0 0 Botje_1000.LHpdf 684 1. 1.E+10 1.E-06 1. Botje99 51685 1 0 0 Botje_1000.LHpdf 685 1. 1.E+10 1.E-06 1. Botje99 51686 1 0 0 Botje_1000.LHpdf 686 1. 1.E+10 1.E-06 1. Botje99 51687 1 0 0 Botje_1000.LHpdf 687 1. 1.E+10 1.E-06 1. Botje99 51688 1 0 0 Botje_1000.LHpdf 688 1. 1.E+10 1.E-06 1. Botje99 51689 1 0 0 Botje_1000.LHpdf 689 1. 1.E+10 1.E-06 1. Botje99 51690 1 0 0 Botje_1000.LHpdf 690 1. 1.E+10 1.E-06 1. Botje99 51691 1 0 0 Botje_1000.LHpdf 691 1. 1.E+10 1.E-06 1. Botje99 51692 1 0 0 Botje_1000.LHpdf 692 1. 1.E+10 1.E-06 1. Botje99 51693 1 0 0 Botje_1000.LHpdf 693 1. 1.E+10 1.E-06 1. Botje99 51694 1 0 0 Botje_1000.LHpdf 694 1. 1.E+10 1.E-06 1. Botje99 51695 1 0 0 Botje_1000.LHpdf 695 1. 1.E+10 1.E-06 1. Botje99 51696 1 0 0 Botje_1000.LHpdf 696 1. 1.E+10 1.E-06 1. Botje99 51697 1 0 0 Botje_1000.LHpdf 697 1. 1.E+10 1.E-06 1. Botje99 51698 1 0 0 Botje_1000.LHpdf 698 1. 1.E+10 1.E-06 1. Botje99 51699 1 0 0 Botje_1000.LHpdf 699 1. 1.E+10 1.E-06 1. Botje99 51700 1 0 0 Botje_1000.LHpdf 700 1. 1.E+10 1.E-06 1. Botje99 51701 1 0 0 Botje_1000.LHpdf 701 1. 1.E+10 1.E-06 1. Botje99 51702 1 0 0 Botje_1000.LHpdf 702 1. 1.E+10 1.E-06 1. Botje99 51703 1 0 0 Botje_1000.LHpdf 703 1. 1.E+10 1.E-06 1. Botje99 51704 1 0 0 Botje_1000.LHpdf 704 1. 1.E+10 1.E-06 1. Botje99 51705 1 0 0 Botje_1000.LHpdf 705 1. 1.E+10 1.E-06 1. Botje99 51706 1 0 0 Botje_1000.LHpdf 706 1. 1.E+10 1.E-06 1. Botje99 51707 1 0 0 Botje_1000.LHpdf 707 1. 1.E+10 1.E-06 1. Botje99 51708 1 0 0 Botje_1000.LHpdf 708 1. 1.E+10 1.E-06 1. Botje99 51709 1 0 0 Botje_1000.LHpdf 709 1. 1.E+10 1.E-06 1. Botje99 51710 1 0 0 Botje_1000.LHpdf 710 1. 1.E+10 1.E-06 1. Botje99 51711 1 0 0 Botje_1000.LHpdf 711 1. 1.E+10 1.E-06 1. Botje99 51712 1 0 0 Botje_1000.LHpdf 712 1. 1.E+10 1.E-06 1. Botje99 51713 1 0 0 Botje_1000.LHpdf 713 1. 1.E+10 1.E-06 1. Botje99 51714 1 0 0 Botje_1000.LHpdf 714 1. 1.E+10 1.E-06 1. Botje99 51715 1 0 0 Botje_1000.LHpdf 715 1. 1.E+10 1.E-06 1. Botje99 51716 1 0 0 Botje_1000.LHpdf 716 1. 1.E+10 1.E-06 1. Botje99 51717 1 0 0 Botje_1000.LHpdf 717 1. 1.E+10 1.E-06 1. Botje99 51718 1 0 0 Botje_1000.LHpdf 718 1. 1.E+10 1.E-06 1. Botje99 51719 1 0 0 Botje_1000.LHpdf 719 1. 1.E+10 1.E-06 1. Botje99 51720 1 0 0 Botje_1000.LHpdf 720 1. 1.E+10 1.E-06 1. Botje99 51721 1 0 0 Botje_1000.LHpdf 721 1. 1.E+10 1.E-06 1. Botje99 51722 1 0 0 Botje_1000.LHpdf 722 1. 1.E+10 1.E-06 1. Botje99 51723 1 0 0 Botje_1000.LHpdf 723 1. 1.E+10 1.E-06 1. Botje99 51724 1 0 0 Botje_1000.LHpdf 724 1. 1.E+10 1.E-06 1. Botje99 51725 1 0 0 Botje_1000.LHpdf 725 1. 1.E+10 1.E-06 1. Botje99 51726 1 0 0 Botje_1000.LHpdf 726 1. 1.E+10 1.E-06 1. Botje99 51727 1 0 0 Botje_1000.LHpdf 727 1. 1.E+10 1.E-06 1. Botje99 51728 1 0 0 Botje_1000.LHpdf 728 1. 1.E+10 1.E-06 1. Botje99 51729 1 0 0 Botje_1000.LHpdf 729 1. 1.E+10 1.E-06 1. Botje99 51730 1 0 0 Botje_1000.LHpdf 730 1. 1.E+10 1.E-06 1. Botje99 51731 1 0 0 Botje_1000.LHpdf 731 1. 1.E+10 1.E-06 1. Botje99 51732 1 0 0 Botje_1000.LHpdf 732 1. 1.E+10 1.E-06 1. Botje99 51733 1 0 0 Botje_1000.LHpdf 733 1. 1.E+10 1.E-06 1. Botje99 51734 1 0 0 Botje_1000.LHpdf 734 1. 1.E+10 1.E-06 1. Botje99 51735 1 0 0 Botje_1000.LHpdf 735 1. 1.E+10 1.E-06 1. Botje99 51736 1 0 0 Botje_1000.LHpdf 736 1. 1.E+10 1.E-06 1. Botje99 51737 1 0 0 Botje_1000.LHpdf 737 1. 1.E+10 1.E-06 1. Botje99 51738 1 0 0 Botje_1000.LHpdf 738 1. 1.E+10 1.E-06 1. Botje99 51739 1 0 0 Botje_1000.LHpdf 739 1. 1.E+10 1.E-06 1. Botje99 51740 1 0 0 Botje_1000.LHpdf 740 1. 1.E+10 1.E-06 1. Botje99 51741 1 0 0 Botje_1000.LHpdf 741 1. 1.E+10 1.E-06 1. Botje99 51742 1 0 0 Botje_1000.LHpdf 742 1. 1.E+10 1.E-06 1. Botje99 51743 1 0 0 Botje_1000.LHpdf 743 1. 1.E+10 1.E-06 1. Botje99 51744 1 0 0 Botje_1000.LHpdf 744 1. 1.E+10 1.E-06 1. Botje99 51745 1 0 0 Botje_1000.LHpdf 745 1. 1.E+10 1.E-06 1. Botje99 51746 1 0 0 Botje_1000.LHpdf 746 1. 1.E+10 1.E-06 1. Botje99 51747 1 0 0 Botje_1000.LHpdf 747 1. 1.E+10 1.E-06 1. Botje99 51748 1 0 0 Botje_1000.LHpdf 748 1. 1.E+10 1.E-06 1. Botje99 51749 1 0 0 Botje_1000.LHpdf 749 1. 1.E+10 1.E-06 1. Botje99 51750 1 0 0 Botje_1000.LHpdf 750 1. 1.E+10 1.E-06 1. Botje99 51751 1 0 0 Botje_1000.LHpdf 751 1. 1.E+10 1.E-06 1. Botje99 51752 1 0 0 Botje_1000.LHpdf 752 1. 1.E+10 1.E-06 1. Botje99 51753 1 0 0 Botje_1000.LHpdf 753 1. 1.E+10 1.E-06 1. Botje99 51754 1 0 0 Botje_1000.LHpdf 754 1. 1.E+10 1.E-06 1. Botje99 51755 1 0 0 Botje_1000.LHpdf 755 1. 1.E+10 1.E-06 1. Botje99 51756 1 0 0 Botje_1000.LHpdf 756 1. 1.E+10 1.E-06 1. Botje99 51757 1 0 0 Botje_1000.LHpdf 757 1. 1.E+10 1.E-06 1. Botje99 51758 1 0 0 Botje_1000.LHpdf 758 1. 1.E+10 1.E-06 1. Botje99 51759 1 0 0 Botje_1000.LHpdf 759 1. 1.E+10 1.E-06 1. Botje99 51760 1 0 0 Botje_1000.LHpdf 760 1. 1.E+10 1.E-06 1. Botje99 51761 1 0 0 Botje_1000.LHpdf 761 1. 1.E+10 1.E-06 1. Botje99 51762 1 0 0 Botje_1000.LHpdf 762 1. 1.E+10 1.E-06 1. Botje99 51763 1 0 0 Botje_1000.LHpdf 763 1. 1.E+10 1.E-06 1. Botje99 51764 1 0 0 Botje_1000.LHpdf 764 1. 1.E+10 1.E-06 1. Botje99 51765 1 0 0 Botje_1000.LHpdf 765 1. 1.E+10 1.E-06 1. Botje99 51766 1 0 0 Botje_1000.LHpdf 766 1. 1.E+10 1.E-06 1. Botje99 51767 1 0 0 Botje_1000.LHpdf 767 1. 1.E+10 1.E-06 1. Botje99 51768 1 0 0 Botje_1000.LHpdf 768 1. 1.E+10 1.E-06 1. Botje99 51769 1 0 0 Botje_1000.LHpdf 769 1. 1.E+10 1.E-06 1. Botje99 51770 1 0 0 Botje_1000.LHpdf 770 1. 1.E+10 1.E-06 1. Botje99 51771 1 0 0 Botje_1000.LHpdf 771 1. 1.E+10 1.E-06 1. Botje99 51772 1 0 0 Botje_1000.LHpdf 772 1. 1.E+10 1.E-06 1. Botje99 51773 1 0 0 Botje_1000.LHpdf 773 1. 1.E+10 1.E-06 1. Botje99 51774 1 0 0 Botje_1000.LHpdf 774 1. 1.E+10 1.E-06 1. Botje99 51775 1 0 0 Botje_1000.LHpdf 775 1. 1.E+10 1.E-06 1. Botje99 51776 1 0 0 Botje_1000.LHpdf 776 1. 1.E+10 1.E-06 1. Botje99 51777 1 0 0 Botje_1000.LHpdf 777 1. 1.E+10 1.E-06 1. Botje99 51778 1 0 0 Botje_1000.LHpdf 778 1. 1.E+10 1.E-06 1. Botje99 51779 1 0 0 Botje_1000.LHpdf 779 1. 1.E+10 1.E-06 1. Botje99 51780 1 0 0 Botje_1000.LHpdf 780 1. 1.E+10 1.E-06 1. Botje99 51781 1 0 0 Botje_1000.LHpdf 781 1. 1.E+10 1.E-06 1. Botje99 51782 1 0 0 Botje_1000.LHpdf 782 1. 1.E+10 1.E-06 1. Botje99 51783 1 0 0 Botje_1000.LHpdf 783 1. 1.E+10 1.E-06 1. Botje99 51784 1 0 0 Botje_1000.LHpdf 784 1. 1.E+10 1.E-06 1. Botje99 51785 1 0 0 Botje_1000.LHpdf 785 1. 1.E+10 1.E-06 1. Botje99 51786 1 0 0 Botje_1000.LHpdf 786 1. 1.E+10 1.E-06 1. Botje99 51787 1 0 0 Botje_1000.LHpdf 787 1. 1.E+10 1.E-06 1. Botje99 51788 1 0 0 Botje_1000.LHpdf 788 1. 1.E+10 1.E-06 1. Botje99 51789 1 0 0 Botje_1000.LHpdf 789 1. 1.E+10 1.E-06 1. Botje99 51790 1 0 0 Botje_1000.LHpdf 790 1. 1.E+10 1.E-06 1. Botje99 51791 1 0 0 Botje_1000.LHpdf 791 1. 1.E+10 1.E-06 1. Botje99 51792 1 0 0 Botje_1000.LHpdf 792 1. 1.E+10 1.E-06 1. Botje99 51793 1 0 0 Botje_1000.LHpdf 793 1. 1.E+10 1.E-06 1. Botje99 51794 1 0 0 Botje_1000.LHpdf 794 1. 1.E+10 1.E-06 1. Botje99 51795 1 0 0 Botje_1000.LHpdf 795 1. 1.E+10 1.E-06 1. Botje99 51796 1 0 0 Botje_1000.LHpdf 796 1. 1.E+10 1.E-06 1. Botje99 51797 1 0 0 Botje_1000.LHpdf 797 1. 1.E+10 1.E-06 1. Botje99 51798 1 0 0 Botje_1000.LHpdf 798 1. 1.E+10 1.E-06 1. Botje99 51799 1 0 0 Botje_1000.LHpdf 799 1. 1.E+10 1.E-06 1. Botje99 51800 1 0 0 Botje_1000.LHpdf 800 1. 1.E+10 1.E-06 1. Botje99 51801 1 0 0 Botje_1000.LHpdf 801 1. 1.E+10 1.E-06 1. Botje99 51802 1 0 0 Botje_1000.LHpdf 802 1. 1.E+10 1.E-06 1. Botje99 51803 1 0 0 Botje_1000.LHpdf 803 1. 1.E+10 1.E-06 1. Botje99 51804 1 0 0 Botje_1000.LHpdf 804 1. 1.E+10 1.E-06 1. Botje99 51805 1 0 0 Botje_1000.LHpdf 805 1. 1.E+10 1.E-06 1. Botje99 51806 1 0 0 Botje_1000.LHpdf 806 1. 1.E+10 1.E-06 1. Botje99 51807 1 0 0 Botje_1000.LHpdf 807 1. 1.E+10 1.E-06 1. Botje99 51808 1 0 0 Botje_1000.LHpdf 808 1. 1.E+10 1.E-06 1. Botje99 51809 1 0 0 Botje_1000.LHpdf 809 1. 1.E+10 1.E-06 1. Botje99 51810 1 0 0 Botje_1000.LHpdf 810 1. 1.E+10 1.E-06 1. Botje99 51811 1 0 0 Botje_1000.LHpdf 811 1. 1.E+10 1.E-06 1. Botje99 51812 1 0 0 Botje_1000.LHpdf 812 1. 1.E+10 1.E-06 1. Botje99 51813 1 0 0 Botje_1000.LHpdf 813 1. 1.E+10 1.E-06 1. Botje99 51814 1 0 0 Botje_1000.LHpdf 814 1. 1.E+10 1.E-06 1. Botje99 51815 1 0 0 Botje_1000.LHpdf 815 1. 1.E+10 1.E-06 1. Botje99 51816 1 0 0 Botje_1000.LHpdf 816 1. 1.E+10 1.E-06 1. Botje99 51817 1 0 0 Botje_1000.LHpdf 817 1. 1.E+10 1.E-06 1. Botje99 51818 1 0 0 Botje_1000.LHpdf 818 1. 1.E+10 1.E-06 1. Botje99 51819 1 0 0 Botje_1000.LHpdf 819 1. 1.E+10 1.E-06 1. Botje99 51820 1 0 0 Botje_1000.LHpdf 820 1. 1.E+10 1.E-06 1. Botje99 51821 1 0 0 Botje_1000.LHpdf 821 1. 1.E+10 1.E-06 1. Botje99 51822 1 0 0 Botje_1000.LHpdf 822 1. 1.E+10 1.E-06 1. Botje99 51823 1 0 0 Botje_1000.LHpdf 823 1. 1.E+10 1.E-06 1. Botje99 51824 1 0 0 Botje_1000.LHpdf 824 1. 1.E+10 1.E-06 1. Botje99 51825 1 0 0 Botje_1000.LHpdf 825 1. 1.E+10 1.E-06 1. Botje99 51826 1 0 0 Botje_1000.LHpdf 826 1. 1.E+10 1.E-06 1. Botje99 51827 1 0 0 Botje_1000.LHpdf 827 1. 1.E+10 1.E-06 1. Botje99 51828 1 0 0 Botje_1000.LHpdf 828 1. 1.E+10 1.E-06 1. Botje99 51829 1 0 0 Botje_1000.LHpdf 829 1. 1.E+10 1.E-06 1. Botje99 51830 1 0 0 Botje_1000.LHpdf 830 1. 1.E+10 1.E-06 1. Botje99 51831 1 0 0 Botje_1000.LHpdf 831 1. 1.E+10 1.E-06 1. Botje99 51832 1 0 0 Botje_1000.LHpdf 832 1. 1.E+10 1.E-06 1. Botje99 51833 1 0 0 Botje_1000.LHpdf 833 1. 1.E+10 1.E-06 1. Botje99 51834 1 0 0 Botje_1000.LHpdf 834 1. 1.E+10 1.E-06 1. Botje99 51835 1 0 0 Botje_1000.LHpdf 835 1. 1.E+10 1.E-06 1. Botje99 51836 1 0 0 Botje_1000.LHpdf 836 1. 1.E+10 1.E-06 1. Botje99 51837 1 0 0 Botje_1000.LHpdf 837 1. 1.E+10 1.E-06 1. Botje99 51838 1 0 0 Botje_1000.LHpdf 838 1. 1.E+10 1.E-06 1. Botje99 51839 1 0 0 Botje_1000.LHpdf 839 1. 1.E+10 1.E-06 1. Botje99 51840 1 0 0 Botje_1000.LHpdf 840 1. 1.E+10 1.E-06 1. Botje99 51841 1 0 0 Botje_1000.LHpdf 841 1. 1.E+10 1.E-06 1. Botje99 51842 1 0 0 Botje_1000.LHpdf 842 1. 1.E+10 1.E-06 1. Botje99 51843 1 0 0 Botje_1000.LHpdf 843 1. 1.E+10 1.E-06 1. Botje99 51844 1 0 0 Botje_1000.LHpdf 844 1. 1.E+10 1.E-06 1. Botje99 51845 1 0 0 Botje_1000.LHpdf 845 1. 1.E+10 1.E-06 1. Botje99 51846 1 0 0 Botje_1000.LHpdf 846 1. 1.E+10 1.E-06 1. Botje99 51847 1 0 0 Botje_1000.LHpdf 847 1. 1.E+10 1.E-06 1. Botje99 51848 1 0 0 Botje_1000.LHpdf 848 1. 1.E+10 1.E-06 1. Botje99 51849 1 0 0 Botje_1000.LHpdf 849 1. 1.E+10 1.E-06 1. Botje99 51850 1 0 0 Botje_1000.LHpdf 850 1. 1.E+10 1.E-06 1. Botje99 51851 1 0 0 Botje_1000.LHpdf 851 1. 1.E+10 1.E-06 1. Botje99 51852 1 0 0 Botje_1000.LHpdf 852 1. 1.E+10 1.E-06 1. Botje99 51853 1 0 0 Botje_1000.LHpdf 853 1. 1.E+10 1.E-06 1. Botje99 51854 1 0 0 Botje_1000.LHpdf 854 1. 1.E+10 1.E-06 1. Botje99 51855 1 0 0 Botje_1000.LHpdf 855 1. 1.E+10 1.E-06 1. Botje99 51856 1 0 0 Botje_1000.LHpdf 856 1. 1.E+10 1.E-06 1. Botje99 51857 1 0 0 Botje_1000.LHpdf 857 1. 1.E+10 1.E-06 1. Botje99 51858 1 0 0 Botje_1000.LHpdf 858 1. 1.E+10 1.E-06 1. Botje99 51859 1 0 0 Botje_1000.LHpdf 859 1. 1.E+10 1.E-06 1. Botje99 51860 1 0 0 Botje_1000.LHpdf 860 1. 1.E+10 1.E-06 1. Botje99 51861 1 0 0 Botje_1000.LHpdf 861 1. 1.E+10 1.E-06 1. Botje99 51862 1 0 0 Botje_1000.LHpdf 862 1. 1.E+10 1.E-06 1. Botje99 51863 1 0 0 Botje_1000.LHpdf 863 1. 1.E+10 1.E-06 1. Botje99 51864 1 0 0 Botje_1000.LHpdf 864 1. 1.E+10 1.E-06 1. Botje99 51865 1 0 0 Botje_1000.LHpdf 865 1. 1.E+10 1.E-06 1. Botje99 51866 1 0 0 Botje_1000.LHpdf 866 1. 1.E+10 1.E-06 1. Botje99 51867 1 0 0 Botje_1000.LHpdf 867 1. 1.E+10 1.E-06 1. Botje99 51868 1 0 0 Botje_1000.LHpdf 868 1. 1.E+10 1.E-06 1. Botje99 51869 1 0 0 Botje_1000.LHpdf 869 1. 1.E+10 1.E-06 1. Botje99 51870 1 0 0 Botje_1000.LHpdf 870 1. 1.E+10 1.E-06 1. Botje99 51871 1 0 0 Botje_1000.LHpdf 871 1. 1.E+10 1.E-06 1. Botje99 51872 1 0 0 Botje_1000.LHpdf 872 1. 1.E+10 1.E-06 1. Botje99 51873 1 0 0 Botje_1000.LHpdf 873 1. 1.E+10 1.E-06 1. Botje99 51874 1 0 0 Botje_1000.LHpdf 874 1. 1.E+10 1.E-06 1. Botje99 51875 1 0 0 Botje_1000.LHpdf 875 1. 1.E+10 1.E-06 1. Botje99 51876 1 0 0 Botje_1000.LHpdf 876 1. 1.E+10 1.E-06 1. Botje99 51877 1 0 0 Botje_1000.LHpdf 877 1. 1.E+10 1.E-06 1. Botje99 51878 1 0 0 Botje_1000.LHpdf 878 1. 1.E+10 1.E-06 1. Botje99 51879 1 0 0 Botje_1000.LHpdf 879 1. 1.E+10 1.E-06 1. Botje99 51880 1 0 0 Botje_1000.LHpdf 880 1. 1.E+10 1.E-06 1. Botje99 51881 1 0 0 Botje_1000.LHpdf 881 1. 1.E+10 1.E-06 1. Botje99 51882 1 0 0 Botje_1000.LHpdf 882 1. 1.E+10 1.E-06 1. Botje99 51883 1 0 0 Botje_1000.LHpdf 883 1. 1.E+10 1.E-06 1. Botje99 51884 1 0 0 Botje_1000.LHpdf 884 1. 1.E+10 1.E-06 1. Botje99 51885 1 0 0 Botje_1000.LHpdf 885 1. 1.E+10 1.E-06 1. Botje99 51886 1 0 0 Botje_1000.LHpdf 886 1. 1.E+10 1.E-06 1. Botje99 51887 1 0 0 Botje_1000.LHpdf 887 1. 1.E+10 1.E-06 1. Botje99 51888 1 0 0 Botje_1000.LHpdf 888 1. 1.E+10 1.E-06 1. Botje99 51889 1 0 0 Botje_1000.LHpdf 889 1. 1.E+10 1.E-06 1. Botje99 51890 1 0 0 Botje_1000.LHpdf 890 1. 1.E+10 1.E-06 1. Botje99 51891 1 0 0 Botje_1000.LHpdf 891 1. 1.E+10 1.E-06 1. Botje99 51892 1 0 0 Botje_1000.LHpdf 892 1. 1.E+10 1.E-06 1. Botje99 51893 1 0 0 Botje_1000.LHpdf 893 1. 1.E+10 1.E-06 1. Botje99 51894 1 0 0 Botje_1000.LHpdf 894 1. 1.E+10 1.E-06 1. Botje99 51895 1 0 0 Botje_1000.LHpdf 895 1. 1.E+10 1.E-06 1. Botje99 51896 1 0 0 Botje_1000.LHpdf 896 1. 1.E+10 1.E-06 1. Botje99 51897 1 0 0 Botje_1000.LHpdf 897 1. 1.E+10 1.E-06 1. Botje99 51898 1 0 0 Botje_1000.LHpdf 898 1. 1.E+10 1.E-06 1. Botje99 51899 1 0 0 Botje_1000.LHpdf 899 1. 1.E+10 1.E-06 1. Botje99 51900 1 0 0 Botje_1000.LHpdf 900 1. 1.E+10 1.E-06 1. Botje99 51901 1 0 0 Botje_1000.LHpdf 901 1. 1.E+10 1.E-06 1. Botje99 51902 1 0 0 Botje_1000.LHpdf 902 1. 1.E+10 1.E-06 1. Botje99 51903 1 0 0 Botje_1000.LHpdf 903 1. 1.E+10 1.E-06 1. Botje99 51904 1 0 0 Botje_1000.LHpdf 904 1. 1.E+10 1.E-06 1. Botje99 51905 1 0 0 Botje_1000.LHpdf 905 1. 1.E+10 1.E-06 1. Botje99 51906 1 0 0 Botje_1000.LHpdf 906 1. 1.E+10 1.E-06 1. Botje99 51907 1 0 0 Botje_1000.LHpdf 907 1. 1.E+10 1.E-06 1. Botje99 51908 1 0 0 Botje_1000.LHpdf 908 1. 1.E+10 1.E-06 1. Botje99 51909 1 0 0 Botje_1000.LHpdf 909 1. 1.E+10 1.E-06 1. Botje99 51910 1 0 0 Botje_1000.LHpdf 910 1. 1.E+10 1.E-06 1. Botje99 51911 1 0 0 Botje_1000.LHpdf 911 1. 1.E+10 1.E-06 1. Botje99 51912 1 0 0 Botje_1000.LHpdf 912 1. 1.E+10 1.E-06 1. Botje99 51913 1 0 0 Botje_1000.LHpdf 913 1. 1.E+10 1.E-06 1. Botje99 51914 1 0 0 Botje_1000.LHpdf 914 1. 1.E+10 1.E-06 1. Botje99 51915 1 0 0 Botje_1000.LHpdf 915 1. 1.E+10 1.E-06 1. Botje99 51916 1 0 0 Botje_1000.LHpdf 916 1. 1.E+10 1.E-06 1. Botje99 51917 1 0 0 Botje_1000.LHpdf 917 1. 1.E+10 1.E-06 1. Botje99 51918 1 0 0 Botje_1000.LHpdf 918 1. 1.E+10 1.E-06 1. Botje99 51919 1 0 0 Botje_1000.LHpdf 919 1. 1.E+10 1.E-06 1. Botje99 51920 1 0 0 Botje_1000.LHpdf 920 1. 1.E+10 1.E-06 1. Botje99 51921 1 0 0 Botje_1000.LHpdf 921 1. 1.E+10 1.E-06 1. Botje99 51922 1 0 0 Botje_1000.LHpdf 922 1. 1.E+10 1.E-06 1. Botje99 51923 1 0 0 Botje_1000.LHpdf 923 1. 1.E+10 1.E-06 1. Botje99 51924 1 0 0 Botje_1000.LHpdf 924 1. 1.E+10 1.E-06 1. Botje99 51925 1 0 0 Botje_1000.LHpdf 925 1. 1.E+10 1.E-06 1. Botje99 51926 1 0 0 Botje_1000.LHpdf 926 1. 1.E+10 1.E-06 1. Botje99 51927 1 0 0 Botje_1000.LHpdf 927 1. 1.E+10 1.E-06 1. Botje99 51928 1 0 0 Botje_1000.LHpdf 928 1. 1.E+10 1.E-06 1. Botje99 51929 1 0 0 Botje_1000.LHpdf 929 1. 1.E+10 1.E-06 1. Botje99 51930 1 0 0 Botje_1000.LHpdf 930 1. 1.E+10 1.E-06 1. Botje99 51931 1 0 0 Botje_1000.LHpdf 931 1. 1.E+10 1.E-06 1. Botje99 51932 1 0 0 Botje_1000.LHpdf 932 1. 1.E+10 1.E-06 1. Botje99 51933 1 0 0 Botje_1000.LHpdf 933 1. 1.E+10 1.E-06 1. Botje99 51934 1 0 0 Botje_1000.LHpdf 934 1. 1.E+10 1.E-06 1. Botje99 51935 1 0 0 Botje_1000.LHpdf 935 1. 1.E+10 1.E-06 1. Botje99 51936 1 0 0 Botje_1000.LHpdf 936 1. 1.E+10 1.E-06 1. Botje99 51937 1 0 0 Botje_1000.LHpdf 937 1. 1.E+10 1.E-06 1. Botje99 51938 1 0 0 Botje_1000.LHpdf 938 1. 1.E+10 1.E-06 1. Botje99 51939 1 0 0 Botje_1000.LHpdf 939 1. 1.E+10 1.E-06 1. Botje99 51940 1 0 0 Botje_1000.LHpdf 940 1. 1.E+10 1.E-06 1. Botje99 51941 1 0 0 Botje_1000.LHpdf 941 1. 1.E+10 1.E-06 1. Botje99 51942 1 0 0 Botje_1000.LHpdf 942 1. 1.E+10 1.E-06 1. Botje99 51943 1 0 0 Botje_1000.LHpdf 943 1. 1.E+10 1.E-06 1. Botje99 51944 1 0 0 Botje_1000.LHpdf 944 1. 1.E+10 1.E-06 1. Botje99 51945 1 0 0 Botje_1000.LHpdf 945 1. 1.E+10 1.E-06 1. Botje99 51946 1 0 0 Botje_1000.LHpdf 946 1. 1.E+10 1.E-06 1. Botje99 51947 1 0 0 Botje_1000.LHpdf 947 1. 1.E+10 1.E-06 1. Botje99 51948 1 0 0 Botje_1000.LHpdf 948 1. 1.E+10 1.E-06 1. Botje99 51949 1 0 0 Botje_1000.LHpdf 949 1. 1.E+10 1.E-06 1. Botje99 51950 1 0 0 Botje_1000.LHpdf 950 1. 1.E+10 1.E-06 1. Botje99 51951 1 0 0 Botje_1000.LHpdf 951 1. 1.E+10 1.E-06 1. Botje99 51952 1 0 0 Botje_1000.LHpdf 952 1. 1.E+10 1.E-06 1. Botje99 51953 1 0 0 Botje_1000.LHpdf 953 1. 1.E+10 1.E-06 1. Botje99 51954 1 0 0 Botje_1000.LHpdf 954 1. 1.E+10 1.E-06 1. Botje99 51955 1 0 0 Botje_1000.LHpdf 955 1. 1.E+10 1.E-06 1. Botje99 51956 1 0 0 Botje_1000.LHpdf 956 1. 1.E+10 1.E-06 1. Botje99 51957 1 0 0 Botje_1000.LHpdf 957 1. 1.E+10 1.E-06 1. Botje99 51958 1 0 0 Botje_1000.LHpdf 958 1. 1.E+10 1.E-06 1. Botje99 51959 1 0 0 Botje_1000.LHpdf 959 1. 1.E+10 1.E-06 1. Botje99 51960 1 0 0 Botje_1000.LHpdf 960 1. 1.E+10 1.E-06 1. Botje99 51961 1 0 0 Botje_1000.LHpdf 961 1. 1.E+10 1.E-06 1. Botje99 51962 1 0 0 Botje_1000.LHpdf 962 1. 1.E+10 1.E-06 1. Botje99 51963 1 0 0 Botje_1000.LHpdf 963 1. 1.E+10 1.E-06 1. Botje99 51964 1 0 0 Botje_1000.LHpdf 964 1. 1.E+10 1.E-06 1. Botje99 51965 1 0 0 Botje_1000.LHpdf 965 1. 1.E+10 1.E-06 1. Botje99 51966 1 0 0 Botje_1000.LHpdf 966 1. 1.E+10 1.E-06 1. Botje99 51967 1 0 0 Botje_1000.LHpdf 967 1. 1.E+10 1.E-06 1. Botje99 51968 1 0 0 Botje_1000.LHpdf 968 1. 1.E+10 1.E-06 1. Botje99 51969 1 0 0 Botje_1000.LHpdf 969 1. 1.E+10 1.E-06 1. Botje99 51970 1 0 0 Botje_1000.LHpdf 970 1. 1.E+10 1.E-06 1. Botje99 51971 1 0 0 Botje_1000.LHpdf 971 1. 1.E+10 1.E-06 1. Botje99 51972 1 0 0 Botje_1000.LHpdf 972 1. 1.E+10 1.E-06 1. Botje99 51973 1 0 0 Botje_1000.LHpdf 973 1. 1.E+10 1.E-06 1. Botje99 51974 1 0 0 Botje_1000.LHpdf 974 1. 1.E+10 1.E-06 1. Botje99 51975 1 0 0 Botje_1000.LHpdf 975 1. 1.E+10 1.E-06 1. Botje99 51976 1 0 0 Botje_1000.LHpdf 976 1. 1.E+10 1.E-06 1. Botje99 51977 1 0 0 Botje_1000.LHpdf 977 1. 1.E+10 1.E-06 1. Botje99 51978 1 0 0 Botje_1000.LHpdf 978 1. 1.E+10 1.E-06 1. Botje99 51979 1 0 0 Botje_1000.LHpdf 979 1. 1.E+10 1.E-06 1. Botje99 51980 1 0 0 Botje_1000.LHpdf 980 1. 1.E+10 1.E-06 1. Botje99 51981 1 0 0 Botje_1000.LHpdf 981 1. 1.E+10 1.E-06 1. Botje99 51982 1 0 0 Botje_1000.LHpdf 982 1. 1.E+10 1.E-06 1. Botje99 51983 1 0 0 Botje_1000.LHpdf 983 1. 1.E+10 1.E-06 1. Botje99 51984 1 0 0 Botje_1000.LHpdf 984 1. 1.E+10 1.E-06 1. Botje99 51985 1 0 0 Botje_1000.LHpdf 985 1. 1.E+10 1.E-06 1. Botje99 51986 1 0 0 Botje_1000.LHpdf 986 1. 1.E+10 1.E-06 1. Botje99 51987 1 0 0 Botje_1000.LHpdf 987 1. 1.E+10 1.E-06 1. Botje99 51988 1 0 0 Botje_1000.LHpdf 988 1. 1.E+10 1.E-06 1. Botje99 51989 1 0 0 Botje_1000.LHpdf 989 1. 1.E+10 1.E-06 1. Botje99 51990 1 0 0 Botje_1000.LHpdf 990 1. 1.E+10 1.E-06 1. Botje99 51991 1 0 0 Botje_1000.LHpdf 991 1. 1.E+10 1.E-06 1. Botje99 51992 1 0 0 Botje_1000.LHpdf 992 1. 1.E+10 1.E-06 1. Botje99 51993 1 0 0 Botje_1000.LHpdf 993 1. 1.E+10 1.E-06 1. Botje99 51994 1 0 0 Botje_1000.LHpdf 994 1. 1.E+10 1.E-06 1. Botje99 51995 1 0 0 Botje_1000.LHpdf 995 1. 1.E+10 1.E-06 1. Botje99 51996 1 0 0 Botje_1000.LHpdf 996 1. 1.E+10 1.E-06 1. Botje99 51997 1 0 0 Botje_1000.LHpdf 997 1. 1.E+10 1.E-06 1. Botje99 51998 1 0 0 Botje_1000.LHpdf 998 1. 1.E+10 1.E-06 1. Botje99 51999 1 0 0 Botje_1000.LHpdf 999 1. 1.E+10 1.E-06 1. Botje99 60000 1 0 0 ZEUS2002_TR.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60001 1 0 0 ZEUS2002_TR.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60002 1 0 0 ZEUS2002_TR.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60003 1 0 0 ZEUS2002_TR.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60004 1 0 0 ZEUS2002_TR.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60005 1 0 0 ZEUS2002_TR.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60006 1 0 0 ZEUS2002_TR.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60007 1 0 0 ZEUS2002_TR.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60008 1 0 0 ZEUS2002_TR.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60009 1 0 0 ZEUS2002_TR.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60010 1 0 0 ZEUS2002_TR.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60011 1 0 0 ZEUS2002_TR.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60012 1 0 0 ZEUS2002_TR.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60013 1 0 0 ZEUS2002_TR.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60014 1 0 0 ZEUS2002_TR.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60015 1 0 0 ZEUS2002_TR.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60016 1 0 0 ZEUS2002_TR.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60017 1 0 0 ZEUS2002_TR.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60018 1 0 0 ZEUS2002_TR.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60019 1 0 0 ZEUS2002_TR.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60020 1 0 0 ZEUS2002_TR.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60021 1 0 0 ZEUS2002_TR.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60022 1 0 0 ZEUS2002_TR.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)VFN(Thorne-Roberts)scheme 60100 1 0 0 ZEUS2002_ZM.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60101 1 0 0 ZEUS2002_ZM.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60102 1 0 0 ZEUS2002_ZM.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60103 1 0 0 ZEUS2002_ZM.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60104 1 0 0 ZEUS2002_ZM.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60105 1 0 0 ZEUS2002_ZM.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60106 1 0 0 ZEUS2002_ZM.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60107 1 0 0 ZEUS2002_ZM.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60108 1 0 0 ZEUS2002_ZM.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60109 1 0 0 ZEUS2002_ZM.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60110 1 0 0 ZEUS2002_ZM.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60111 1 0 0 ZEUS2002_ZM.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60112 1 0 0 ZEUS2002_ZM.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60113 1 0 0 ZEUS2002_ZM.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60114 1 0 0 ZEUS2002_ZM.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60115 1 0 0 ZEUS2002_ZM.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60116 1 0 0 ZEUS2002_ZM.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60117 1 0 0 ZEUS2002_ZM.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme 60118 1 0 0 ZEUS2002_ZM.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme 60119 1 0 0 ZEUS2002_ZM.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme 60120 1 0 0 ZEUS2002_ZM.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZMs-cheme 60121 1 0 0 ZEUS2002_ZM.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-scheme 60122 1 0 0 ZEUS2002_ZM.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)ZM-Scheme 60200 1 0 0 ZEUS2002_FF.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60201 1 0 0 ZEUS2002_FF.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60202 1 0 0 ZEUS2002_FF.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60203 1 0 0 ZEUS2002_FF.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60204 1 0 0 ZEUS2002_FF.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60205 1 0 0 ZEUS2002_FF.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60206 1 0 0 ZEUS2002_FF.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60207 1 0 0 ZEUS2002_FF.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60208 1 0 0 ZEUS2002_FF.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60209 1 0 0 ZEUS2002_FF.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60210 1 0 0 ZEUS2002_FF.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60211 1 0 0 ZEUS2002_FF.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60212 1 0 0 ZEUS2002_FF.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60213 1 0 0 ZEUS2002_FF.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60214 1 0 0 ZEUS2002_FF.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60215 1 0 0 ZEUS2002_FF.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60216 1 0 0 ZEUS2002_FF.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60217 1 0 0 ZEUS2002_FF.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60218 1 0 0 ZEUS2002_FF.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60219 1 0 0 ZEUS2002_FF.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60220 1 0 0 ZEUS2002_FF.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60221 1 0 0 ZEUS2002_FF.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60222 1 0 0 ZEUS2002_FF.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2002(NLO)FFN-scheme 60300 1 0 0 ZEUS2005_ZJ.LHpdf 0 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60301 1 0 0 ZEUS2005_ZJ.LHpdf 1 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60302 1 0 0 ZEUS2005_ZJ.LHpdf 2 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60303 1 0 0 ZEUS2005_ZJ.LHpdf 3 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60304 1 0 0 ZEUS2005_ZJ.LHpdf 4 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60305 1 0 0 ZEUS2005_ZJ.LHpdf 5 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60306 1 0 0 ZEUS2005_ZJ.LHpdf 6 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60307 1 0 0 ZEUS2005_ZJ.LHpdf 7 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60308 1 0 0 ZEUS2005_ZJ.LHpdf 8 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60309 1 0 0 ZEUS2005_ZJ.LHpdf 9 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60310 1 0 0 ZEUS2005_ZJ.LHpdf 10 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60311 1 0 0 ZEUS2005_ZJ.LHpdf 11 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60312 1 0 0 ZEUS2005_ZJ.LHpdf 12 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60313 1 0 0 ZEUS2005_ZJ.LHpdf 13 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60314 1 0 0 ZEUS2005_ZJ.LHpdf 14 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60315 1 0 0 ZEUS2005_ZJ.LHpdf 15 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60316 1 0 0 ZEUS2005_ZJ.LHpdf 16 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60317 1 0 0 ZEUS2005_ZJ.LHpdf 17 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60318 1 0 0 ZEUS2005_ZJ.LHpdf 18 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60319 1 0 0 ZEUS2005_ZJ.LHpdf 19 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60320 1 0 0 ZEUS2005_ZJ.LHpdf 20 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60321 1 0 0 ZEUS2005_ZJ.LHpdf 21 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 60322 1 0 0 ZEUS2005_ZJ.LHpdf 22 0.3 200000. 1.E-06 1. ZEUS2005(NL0)ZJ(Jet-Fit) 70050 1 0 0 H12000ms.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70051 1 0 0 H12000msE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70052 1 0 0 H12000msE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70053 1 0 0 H12000msE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70054 1 0 0 H12000msE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70055 1 0 0 H12000msE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70056 1 0 0 H12000msE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70057 1 0 0 H12000msE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70058 1 0 0 H12000msE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70059 1 0 0 H12000msE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70060 1 0 0 H12000msE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70061 1 0 0 H12000msE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70062 1 0 0 H12000msE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70063 1 0 0 H12000msE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70064 1 0 0 H12000msE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70065 1 0 0 H12000msE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70066 1 0 0 H12000msE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70067 1 0 0 H12000msE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70068 1 0 0 H12000msE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70069 1 0 0 H12000msE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70070 1 0 0 H12000msE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)msbar 70150 1 0 0 H12000dis.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70151 1 0 0 H12000disE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70152 1 0 0 H12000disE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70153 1 0 0 H12000disE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70154 1 0 0 H12000disE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70155 1 0 0 H12000disE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70156 1 0 0 H12000disE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70157 1 0 0 H12000disE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70158 1 0 0 H12000disE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70159 1 0 0 H12000disE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70160 1 0 0 H12000disE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70161 1 0 0 H12000disE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70162 1 0 0 H12000disE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70163 1 0 0 H12000disE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70164 1 0 0 H12000disE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70165 1 0 0 H12000disE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70166 1 0 0 H12000disE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70167 1 0 0 H12000disE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70168 1 0 0 H12000disE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70169 1 0 0 H12000disE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70170 1 0 0 H12000disE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(NLO)dis 70250 1 0 0 H12000lo.LHgrid 0 1.5 35000. 5.7E-05 1. H12000(LO) 70251 1 0 0 H12000loE.LHgrid 1 1.5 35000. 5.7E-05 1. H12000(LO) 70252 1 0 0 H12000loE.LHgrid 2 1.5 35000. 5.7E-05 1. H12000(LO) 70253 1 0 0 H12000loE.LHgrid 3 1.5 35000. 5.7E-05 1. H12000(LO) 70254 1 0 0 H12000loE.LHgrid 4 1.5 35000. 5.7E-05 1. H12000(LO) 70255 1 0 0 H12000loE.LHgrid 5 1.5 35000. 5.7E-05 1. H12000(LO) 70256 1 0 0 H12000loE.LHgrid 6 1.5 35000. 5.7E-05 1. H12000(LO) 70257 1 0 0 H12000loE.LHgrid 7 1.5 35000. 5.7E-05 1. H12000(LO) 70258 1 0 0 H12000loE.LHgrid 8 1.5 35000. 5.7E-05 1. H12000(LO) 70259 1 0 0 H12000loE.LHgrid 9 1.5 35000. 5.7E-05 1. H12000(LO) 70260 1 0 0 H12000loE.LHgrid 10 1.5 35000. 5.7E-05 1. H12000(LO) 70261 1 0 0 H12000loE.LHgrid 11 1.5 35000. 5.7E-05 1. H12000(LO) 70262 1 0 0 H12000loE.LHgrid 12 1.5 35000. 5.7E-05 1. H12000(LO) 70263 1 0 0 H12000loE.LHgrid 13 1.5 35000. 5.7E-05 1. H12000(LO) 70264 1 0 0 H12000loE.LHgrid 14 1.5 35000. 5.7E-05 1. H12000(LO) 70265 1 0 0 H12000loE.LHgrid 15 1.5 35000. 5.7E-05 1. H12000(LO) 70266 1 0 0 H12000loE.LHgrid 16 1.5 35000. 5.7E-05 1. H12000(LO) 70267 1 0 0 H12000loE.LHgrid 17 1.5 35000. 5.7E-05 1. H12000(LO) 70268 1 0 0 H12000loE.LHgrid 18 1.5 35000. 5.7E-05 1. H12000(LO) 70269 1 0 0 H12000loE.LHgrid 19 1.5 35000. 5.7E-05 1. H12000(LO) 70270 1 0 0 H12000loE.LHgrid 20 1.5 35000. 5.7E-05 1. H12000(LO) 80050 1 5 13 GRV98nlo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(NLO) 80051 1 5 14 GRV98nlo.LHgrid 1 0.8 2000000. 1.E-09 1. GRV98(NLO) 80060 1 5 12 GRV98lo.LHgrid 0 0.8 2000000. 1.E-09 1. GRV98(LO) thepeg-1.8.0.orig/PDF/RemnantHandler.cc0000644000175000017500000000474211747772425016000 0ustar sunsun// -*- C++ -*- // // RemnantHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RemnantHandler class. // #include "RemnantHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; RemnantHandler::RemnantHandler(bool multi) : isMultiCapable(multi) {} int RemnantHandler::nDim(const PartonBin &, bool) const { return 0; } void RemnantHandler:: boostRemnants(PartonBinInstance &) const {} void RemnantHandler::persistentOutput(PersistentOStream & os) const { os << isMultiCapable; } void RemnantHandler::persistentInput(PersistentIStream & is, int) { is >> isMultiCapable; } bool RemnantHandler:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double, Energy2 scale, const LorentzMomentum & p, const PVector & prev) const { if ( !oldp || !prev.empty() ) return false; vector rv; for ( int i = 0, N = pb.bin()->remDim(); i < N; ++i) rv.push_back(rnd()); newp->set5Momentum(generate(pb, pb.bin()->remDim()? &rv[0]: 0, scale, p)); boostRemnants(pb); return true; } bool RemnantHandler:: recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double, Energy2 scale, Energy2 shat, const LorentzMomentum & p, const PVector & prev) const { if ( !oldp || !prev.empty() ) return false; vector rv; int rd = pb.bin()->remDim(); for ( int i = 0; i < rd; ++i) rv.push_back(rnd()); newp->set5Momentum(generate(pb, rd > 0? &rv[0]: 0, scale, shat, p)); boostRemnants(pb); return true; } AbstractClassDescription RemnantHandler::initRemnantHandler; void RemnantHandler::Init() { static ClassDocumentation documentation ("This is the base class to be used by models describing remnants."); } RemnantHandlerException:: RemnantHandlerException(string p0, string p, string r, string mess) { theMessage << "Creating remnants for particle '" << p0 << "' when extracting " << "parton '" << p << "' using remnant handler '" << r << "' failed. " << mess; severity(warning); } thepeg-1.8.0.orig/PDF/Makefile.am0000644000175000017500000000663311747772425014624 0ustar sunsunmySOURCES = PartonExtractor.cc PDFBase.cc RemnantHandler.cc \ BeamParticleData.cc PolarizedBeamParticleData.cc \ PartonBin.cc NoPDF.cc NoRemnants.cc PDFCuts.cc \ PartonBinInstance.cc SoftRemnantHandler.cc DOCFILES = BeamParticleData.h PolarizedBeamParticleData.h \ NoPDF.h NoRemnants.h PDFBase.h PDFCuts.h \ PartonBin.h PartonExtractor.h RemnantHandler.h \ PDF.h PartonBinInstance.h SoftRemnantHandler.h INCLUDEFILES = $(DOCFILES) BeamParticleData.xh \ PDFBase.xh PartonExtractor.fh \ PartonExtractor.xh RemnantHandler.xh \ PDF.fh PartonBin.fh PolarizedBeamParticleData.fh INPUTFILES = PDFsets.index CLEANFILES = done-all-links noinst_LTLIBRARIES = libThePEGPDF.la pkglib_LTLIBRARIES = LeptonLeptonPDF.la UnResolvedRemnant.la \ GRVBase.la GRV94L.la GRV94M.la WeizsackerWilliamsPDF.la \ BudnevPDF.la if USELHAPDF pkglib_LTLIBRARIES += ThePEGLHAPDF.la LHAPDF_SOURCES = LHAPDF.cc LHAPDF.h LHAPDF_CPPFLAGS = \ -DLHAPDF_PKGDATADIR="\"$(LHAPDF_PKGDATADIR)\"" \ -DTHEPEG_PKGDATADIR="\"$(pkgdatadir)\"" ThePEGLHAPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LHAPDF_LDFLAGS) $(LIBTOOLVERSIONINFO) ThePEGLHAPDF_la_LIBADD = $(LHAPDF_LIBS) ThePEGLHAPDF_la_SOURCES = $(LHAPDF_SOURCES) ThePEGLHAPDF_la_CPPFLAGS = $(AM_CPPFLAGS) $(LHAPDF_CPPFLAGS) endif libThePEGPDF_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) libThePEGPDF_la_CPPFLAGS = $(AM_CPPFLAGS) # Version info should be updated if any interface or persistent I/O # function is changed LeptonLeptonPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LeptonLeptonPDF_la_SOURCES = LeptonLeptonPDF.cc LeptonLeptonPDF.h # Version info should be updated if any interface or persistent I/O # function is changed WeizsackerWilliamsPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) WeizsackerWilliamsPDF_la_SOURCES = WeizsackerWilliamsPDF.cc WeizsackerWilliamsPDF.h # Version info should be updated if any interface or persistent I/O # function is changed BudnevPDF_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) BudnevPDF_la_SOURCES = BudnevPDF.cc BudnevPDF.h # Version info should be updated if any interface or persistent I/O # function is changed UnResolvedRemnant_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) UnResolvedRemnant_la_SOURCES = UnResolvedRemnant.cc UnResolvedRemnant.h # Version info should be updated if any interface or persistent I/O # function is changed GRVBase_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRVBase_la_SOURCES = GRVBase.cc GRVBase.h # Version info should be updated if any interface or persistent I/O # function is changed GRV94L_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRV94L_la_SOURCES = GRV94L.cc GRV94L.h # Version info should be updated if any interface or persistent I/O # function is changed GRV94M_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) GRV94M_la_SOURCES = GRV94M.cc GRV94M.h dist_pkgdata_DATA = PDFsets.index all-local: done-all-links done-all-links: @EMPTY@ifdef SHOWCOMMAND for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done echo "stamp" > done-all-links @EMPTY@else @echo "sym-linking input files files..." @for file in $(INPUTFILES); do \ if test ! -f $$file; then $(LN_S) $(srcdir)/$$file $$file; fi; done @echo "stamp" > done-all-links @EMPTY@endif include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/PDF/PartonBin.cc0000644000175000017500000000465111747772425014771 0ustar sunsun// -*- C++ -*- // // PartonBin.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PartonBin class. // #include "PartonBin.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDF/PDFBase.h" #include "ThePEG/PDF/NoPDF.h" #include "ThePEG/PDF/RemnantHandler.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Utilities/Maths.h" using namespace ThePEG; PartonBin::PartonBin() : thePDFDim(), theRemDim() {} PartonBin:: PartonBin(tcPDPtr p, tPBPtr inc, tcPDPtr pi, tcPDFPtr pdf, const PDFCuts & newCuts) : theParticle(p), theIncomingBin(inc), theParton(pi), thePDF(pdf), thePDFDim(0), theRemDim(0), theCuts(newCuts) { if ( pdf ) theRemnantHandler = pdf->remnantHandler(); } PartonBin::~PartonBin() {} int PartonBin::nDim(bool doscale) { if ( !incoming() ) return 0; if ( dynamic_ptr_cast::tcp>(pdf()) ) thePDFDim = 0; else if ( doscale ) thePDFDim = 2; else thePDFDim = 1; theRemDim = remnantHandler()->nDim(*this, !doscale); return pdfDim() + remDim() + incoming()->nDim(true); } tPBPtr PartonBin::getFirst() { return incoming()? incoming()->getFirst(): tPBPtr(this); } void PartonBin::persistentOutput(PersistentOStream & os) const { os << theParticle << theIncomingBin << theOutgoing << theParton << thePDF << theRemnantHandler << thePDFDim << theRemDim << cuts().lMin() << cuts().lMax() << ounit(cuts().scaleMin(), GeV2) << ounit(cuts().scaleMax(), GeV2) << ounit(cuts().sMax(), GeV2); } void PartonBin::persistentInput(PersistentIStream & is, int) { double lmin = 0.0; double lmax = 0.0; Energy2 scmin = ZERO; Energy2 scmax = ZERO; Energy2 smax = ZERO; is >> theParticle >> theIncomingBin >> theOutgoing >> theParton >> thePDF >> theRemnantHandler >> thePDFDim >> theRemDim >> lmin >> lmax >> iunit(scmin, GeV2) >> iunit(scmax, GeV2) >> iunit(smax, GeV2); theCuts = PDFCuts(Interval(lmin, lmax), SInterval(scmin, scmax), smax); } ClassDescription PartonBin::initPartonBin; void PartonBin::Init() {} thepeg-1.8.0.orig/PDF/SoftRemnantHandler.h0000644000175000017500000001547011747772425016476 0ustar sunsun// -*- C++ -*- // // SoftRemnantHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SoftRemnantHandler_H #define ThePEG_SoftRemnantHandler_H // This is the declaration of the SoftRemnantHandler class. #include "ThePEG/PDF/RemnantHandler.h" #include "ThePEG/PDT/RemnantDecayer.fh" namespace ThePEG { /** * SoftRemnantHandler inherits from the RemnantHandler and implements * the generation of a single collinear RemnantParticle when anything * is extracted from anything else. Such a RemnantParticle needs to be * decayed by a special RemnantDecayer and the SoftRemnantHandler * needs to be assign such a decayer to work properly. * * @see \ref SoftRemnantHandlerInterfaces "The interfaces" * defined for SoftRemnantHandler. */ class SoftRemnantHandler: public RemnantHandler { public: /** @name Virtual functions mandated by the RemnantHandler base class. */ //@{ /** * Return true if this remnant handler can handle extracting all * specified \a partons form the given \a particle. */ virtual bool canHandle(tcPDPtr particle, const cPDVector & partons) const; /** * Generate momenta. Generates the momenta of the extracted parton * in the particle cms (but with the parton \f$x\f$ still the * positive light-cone fraction) as given by the last argument, \a * p. If the particle is space-like the positive and negative * light-cone momenta are \f$\sqrt{-m^2}\f$ and \f$-sqrt{-m^2}\f$ * respectively. If the \a scale is negative, it means that the \a * doScale in the previous call to nDim() was true, otherwise the * given scale should be the virtuality of the extracted * parton. Generated quantities which are not returned in the * momentum may be saved in the PartonBin, \a pb, for later use. In * particular, if the nDim() random numbers, \a r, are not enough to * generate with weight one, the resulting weight should be stored * with the remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, const LorentzMomentum & p, bool fixedPartonMomentum = false) const; /** * Generate the momentum of the extracted parton with the \a parent * momentum given by the last argument. If the \a scale is negative, * it means that the doScale in the previous call to nDim() was * true, otherwise the given \a scale should be the virtuality of * the extracted parton. \a shat is the total invariant mass squared * of the hard sub-system produced by the extracted parton and the * primary parton entering from the other side. Generated quantities * which are not returned in the momentum may be saved in the * PartonBinInstance, \a pb, for later use. In particular, if the * nDim() random numbers, \a r, are not enough to generate with * weight one, the resulting weight should be stored with the * remnantWeight() method of the parton bin. */ virtual Lorentz5Momentum generate(PartonBinInstance & pb, const double * r, Energy2 scale, Energy2 shat, const LorentzMomentum & parent, bool fixedPartonMomentum = false) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, const LorentzMomentum & p, const PVector & prev = PVector()) const; /** * Redo the remnant generation for the given particle bin, \a pb. If * \a oldp is non-null it corresponds to the previously extracted * parton which should be replaced by \a newp. If \a oldp is null it * means \a newp should be extracted in addition to the previously * extracted ones available in \a prev. In either case \a shat is * the total invariant mass squared of the hard sub-system produced * by the extracted parton and the primary parton entering from the other * side. * * @return false if the generation failed. */ virtual bool recreateRemnants(PartonBinInstance & pb, tPPtr oldp, tPPtr newp, double newl, Energy2 scale, Energy2 shat, const LorentzMomentum & p, const PVector & prev = PVector()) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * A pointer to a RemnantDecayer object which is able to decay the * produced RemnantParticle objects. */ RemDecPtr remdec; /** * Utility function for the interface. */ void setDecayer(RemDecPtr rd); private: /** * Describe a concrete class with persistent data. */ static ClassDescription initSoftRemnantHandler; /** * Private and non-existent assignment operator. */ SoftRemnantHandler & operator=(const SoftRemnantHandler &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of SoftRemnantHandler. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of SoftRemnantHandler. */ typedef RemnantHandler NthBase; }; /** This template specialization informs ThePEG about the name of the * SoftRemnantHandler class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SoftRemnantHandler"; } }; /** @endcond */ } #endif /* ThePEG_SoftRemnantHandler_H */ thepeg-1.8.0.orig/PDF/BeamParticleData.xh0000644000175000017500000000157311747772425016251 0ustar sunsun// -*- C++ -*- // // BeamParticleData.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BeamParticleData_XH #define ThePEG_BeamParticleData_XH // // This is the declarations of the exception classes used by the // BeamParticleData class. // // #include "BeamParticleData.fh" #include "ThePEG/Interface/InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by BeamParticleData if a specified PDF cannot * handle the particle. */ struct BeamParticleWrongPDF: public InterfaceException { /** Standard constructor. */ BeamParticleWrongPDF(string p, string pdf); }; /** @endcond */ } #endif /* ThePEG_BeamParticleData_XH */ thepeg-1.8.0.orig/README0000644000175000017500000001050111747772425013024 0ustar sunsunToolkit for High Energy Physics Event Generation - ThePEG To compile and install ThePEG follow these steps: 1: run the configure script. To override the defaults: set eg. the following environment variables CXX: (default g++) your favorite C++ compiler. Must be standard compliant. g++ version 4.0 or later will do nicely. To overwrite the default install prefix (/usr/local) use the --prefix=/custom/install/path argument to configure. If the LHAPDF library is installed under /usr/local/lib it will be used. If it is installed elsewhere, use --with-LHAPDF=/Path/to/library to specify where. If a standard Sun java compiler is available a java GUI called 'thepeg' will be installed. To avoid this use --without-javagui. 'configure --help' will list other environment variables and options which will influence the installation. 2: Do 'make check'. this will compile the main ThePEG library and two programs in the src directory. These will then be run as follows ./setupThePEG SimpleLEP.in to setup an event generator which is dumped in SimpleLEP.run ./runThePEG SimpleLEP.run to run the event generator. Some output will be written in SimpleLEP.out, SimpleLEP.log and SimpleLEP.tex. 3: Install ThePEG with 'make install'. This will put all the shared libraries in the lib/ThePEG directory under the install path. The default repository file 'ThePEGDefaults.rpo' will also be placed there. The executables 'setupThePEG' and 'runThePEG' are installed in the bin directory under the install path. In the bin directory is also installed a java-based setup program called 'thepeg' which enables you to setup and run event generators using a GUI. All header files will be installed in the 'include/ThePEG' directory under the install path, and some sample setup files and a sample makefile is installed in the 'share/ThePEG' directory together with an emacs lisp file 'ThePEG.el' with some functions for creating skeletons of new ThePEG classes. Note that ThePEG is a framework for implementing event generator models, and by itself it does not contain enough physics models to generate realistic events for any collider. Instead programs such as Pythia7 or Herwig++ should be installed to allow for proper event generation. There is currently no up-to-date manual avaliable. However, the general structure is described in "PYTHIA version 7-0.0 - a proof-of-concept version" Comput. Phys. Commun. 134 (2001) 365. (see also http://www.thep.lu.se/Pythia7/Doc/Proof/). This describes the Pythia7 program before it was broken up into the basic event generator platform - ThePEG - and the Pythia-specific parts in Pythia7. A brief description of ThePEG is also included in "Herwig++ Physics and Manual" [arXiv:0803.0883]. In addition, there is Doxygen-generated documentation of the classes in http://projects.hepforge.org/thepeg/doxygen The doxygen documentation can also be generated locally by 'make html', in which it will end up in the Doc/refman-html directory. A subsequent 'make install' will place the documentation in share/ThePEG/Doc/refman-html. Briefly, the running of ThePEG is divided into two steps: 1: The program 'setupThePEG' is used to set up an event generator and saving it to a file. Here you collect together the components needed for a specific event generation run, and parameters and switches of the components can be set to preferred values. See the file SimpleLEP.in in the src subdirectory for an example. 2: The program 'runThePEG' is used to run the generator saved to a file. =========================================================================== Toolkit for High Energy Physics Event Generation - ThePEG Copyright (C) 1999-2011 Leif Lonnblad This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . thepeg-1.8.0.orig/Makefile.in0000644000175000017500000006274711756366734014236 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/Config/ar-lib \ $(top_srcdir)/Config/config.guess \ $(top_srcdir)/Config/config.sub \ $(top_srcdir)/Config/install-sh $(top_srcdir)/Config/ltmain.sh \ $(top_srcdir)/Config/missing $(top_srcdir)/configure AUTHORS \ COPYING ChangeLog INSTALL NEWS ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ cscope distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags CSCOPE = cscope DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @JAVAGUI_TRUE@JAVADIR = java MAINDIRS = include Config Utilities Helicity Interface LesHouches Vectors \ PDT PDF Persistency Handlers MatrixElement Pointer ACDC \ StandardModel Repository EventRecord Cuts Analysis lib src Doc DIST_SUBDIRS = $(MAINDIRS) java SUBDIRS = $(MAINDIRS) $(JAVADIR) EXTRA_DIST = GUIDELINES DISTCHECK_CONFIGURE_FLAGS = --enable-unitchecks --without-LHAPDF ACLOCAL_AMFLAGS = -I m4 DISTCLEANFILES = config.thepeg all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done cscopelist-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) cscopelist); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist-recursive cscopelist cscopelist: cscopelist-recursive $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) \ cscopelist-recursive ctags-recursive install-am install-strip \ tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-cscope \ clean-generic clean-libtool cscope cscopelist \ cscopelist-recursive ctags ctags-recursive dist dist-all \ dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic \ distclean-libtool distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/StandardModel/0000755000175000017500000000000011756460367014667 5ustar sunsunthepeg-1.8.0.orig/StandardModel/SimpleAlphaEM.h0000644000175000017500000000533311747772425017466 0ustar sunsun// -*- C++ -*- // // SimpleAlphaEM.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SimpleAlphaEM_H #define ThePEG_SimpleAlphaEM_H // This is the declaration of the SimpleAlphaEM class. #include "AlphaEMBase.h" namespace ThePEG { /** * SimpleAlphaEM inherits from AlphaEMBase and implements a simple * running of the electromagnetic coupling as parameterized by * H.~Buckhardt et al. * * @see \ref SimpleAlphaEMInterfaces "The interfaces" * defined for SimpleAlphaEM. */ class SimpleAlphaEM: public AlphaEMBase { public: /** * The \f$\alpha_{EM}\f$. Return the value of the coupling at a * given \a scale using the given standard model object, \a sm. */ virtual double value(Energy2 scale, const StandardModelBase &) const; /** * Return the number of loops contributing to * the running this coupling. */ virtual unsigned int nloops () const { return 1; } public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initSimpleAlphaEM; /** * Private and non-existent assignment operator. */ SimpleAlphaEM & operator=(const SimpleAlphaEM &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of SimpleAlphaEM. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of SimpleAlphaEM. */ typedef AlphaEMBase NthBase; }; /** This template specialization informs ThePEG about the name of the * SimpleAlphaEM class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SimpleAlphaEM"; } /** Return the name of the shared library be loaded to get access to * the SimpleAlphaEM class and every other class it uses * (except the base class). */ static string library() { return "SimpleAlphaEM.so"; } }; /** @endcond */ } #endif /* ThePEG_SimpleAlphaEM_H */ thepeg-1.8.0.orig/StandardModel/AlphaEMBase.h0000644000175000017500000000347511747772425017114 0ustar sunsun// -*- C++ -*- // // AlphaEMBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_AlphaEMBase_H #define ThePEG_AlphaEMBase_H // This is the declaration of the AlphaEMBase class. #include "RunningCoupling.h" namespace ThePEG { /** * AlphaEMBase an abstract base class used by the StandardModelBase * class to implement the electro-magnetic coupling. Concrete * sub-classes must implement the value(Energy2, const * StandardModelBase &) function. * * @see \ref AlphaEMBaseInterfaces "The interfaces" * defined for AlphaEMBase. * @see StandardModelBase */ class AlphaEMBase: public RunningCoupling { public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initAlphaEMBase; /** * Private and non-existent assignment operator. */ AlphaEMBase & operator=(const AlphaEMBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of AlphaEMBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of AlphaEMBase. */ typedef RunningCoupling NthBase; }; /** This template specialization informs ThePEG about the name of the * AlphaEMBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::AlphaEMBase"; } }; /** @endcond */ } #endif /* ThePEG_AlphaEMBase_H */ thepeg-1.8.0.orig/StandardModel/RunningCoupling.cc0000644000175000017500000000256611754473600020320 0ustar sunsun// -*- C++ -*- // // RunningCoupling.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RunningCoupling class. // #include "RunningCoupling.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; AbstractClassDescription RunningCoupling::initRunningCoupling; void RunningCoupling::persistentOutput(PersistentOStream & os) const { os << theScaleFactor; } void RunningCoupling::persistentInput(PersistentIStream & is, int) { is >> theScaleFactor; } void RunningCoupling::Init() { static ClassDocumentation documentation ("An abstract base class used to implement running couplings."); static Parameter interfaceScaleFactor ("ScaleFactor", "The scale factor used to globally rescale the argument of the running coupling", &RunningCoupling::theScaleFactor, 1.0, 0.0, 0, false, false, Interface::lowerlim); interfaceScaleFactor.rank(-1); } thepeg-1.8.0.orig/StandardModel/StandardModelBase.cc0000644000175000017500000003374211747772425020524 0ustar sunsun// -*- C++ -*- // // StandardModelBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StandardModelBase class. // #include "StandardModelBase.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/ParticleData.h" using namespace ThePEG; StandardModelBase::StandardModelBase() : theFamilies(3), theAlphaEM(1.0/137.04), theAlphaEMMZ(1.0/128.91), theSin2ThetaW(0.232), theGF(1.16637e-5/GeV2), theEnu(0.0), theEe(-1.0), theEu(2.0/3.0), theEd(-1.0/3.0), theVnu(1.0), theVe(-0.072), theVu(0.381333333), theVd(-0.690666666), theAnu(1.0), theAe(-1.0), theAu(1.0), theAd(-1.0), recalculateEW(1), theNc(3), theAlphaS(0.2), theElectroWeakScheme(0), theBosonWidthOption(0) {} StandardModelBase::~StandardModelBase() {} IBPtr StandardModelBase::clone() const { return new_ptr(*this); } IBPtr StandardModelBase::fullclone() const { return new_ptr(*this); } void StandardModelBase::doinit() { // calculation of the electroweak parameters // get the default values PDPtr Wplus = getParticleData(ParticleID::Wplus); PDPtr Z0 = getParticleData(ParticleID::Z0 ); Energy mw = Wplus->mass(), mz = Z0->mass(); double sw2 = sin2ThetaW(); double alpha = theAlphaEMMZ; // recalculate if needed if(theElectroWeakScheme==1) { sw2 = 1.-sqr(mw/mz); alpha = sqrt(2.)*fermiConstant()*sqr(mw)*sw2/Constants::pi; } else if(theElectroWeakScheme==2) { sw2 = 1.-sqr(mw/mz); } else if(theElectroWeakScheme==3) { mw = sqrt(4.*Constants::pi*alpha/4./sqrt(2.)/fermiConstant()/sw2); mz = mw/sqrt(1.-sw2); } else if(theElectroWeakScheme==4) { mz = mw/sqrt(1.-sw2); alpha = 4.*sqrt(2.)*fermiConstant()*sqr(mw)*sw2/4./Constants::pi; } else if(theElectroWeakScheme==5) { mw = mz*sqrt(1.-sw2); } // reset if needed if(theElectroWeakScheme!=0) { recalculateEW = true; theSin2ThetaW = sw2; theAlphaEMMZ = alpha; ostringstream os; os << mw/GeV; generator()->preinitInterface(Wplus, "NominalMass", "set", os .str()); ostringstream os2; os2 << mz/GeV; generator()->preinitInterface(Z0 , "NominalMass", "set", os2.str()); } if ( recalculateEW ) { theAnu = theEnu < 0? -1.0: 1.0; theAe = theEe < 0? -1.0: 1.0; theAd = theEd < 0? -1.0: 1.0; theAu = theEu < 0? -1.0: 1.0; theVnu = theAnu - 4.0*theEnu*sin2ThetaW(); theVe = theAe - 4.0*theEe*sin2ThetaW(); theVd = theAd - 4.0*theEd*sin2ThetaW(); theVu = theAu - 4.0*theEu*sin2ThetaW(); } theRunningAlphaEM->init(); theCKM->init(); theRunningAlphaS->init(); theCKM2Matrix = theCKM->getMatrix(families()); // calculate W/Z widths if needed if(theBosonWidthOption!=0) { InvEnergy2 GF = 4.*Constants::pi*alpha/4./sqrt(2.)/sqr(mw)/sw2; double aSpi = theBosonWidthOption > 1 ? .1184/Constants::pi : 0.; double C = 1.+aSpi + sqr(aSpi)*(1.409-12.77*aSpi-80.0*sqr(aSpi)); Energy widthW = GF*pow<3,1>(mw)/(6.*sqrt(2.)*Constants::pi)* 3.*(1.+C*(CKM(1,1)+CKM(1,2)+CKM(1,3)+CKM(2,1)+CKM(2,2)+CKM(2,3))); Energy widthZ = 0.25*GF*pow<3,1>(mz)/(6.*sqrt(2.)*Constants::pi)* (3. *(sqr(theVnu)+sqr(theAnu)) + 3. *(sqr(theVe )+sqr(theAe )) + 9.*C*(sqr(theVd )+sqr(theAd )) + 6.*C*(sqr(theVu )+sqr(theAu ))); ostringstream os; os << widthW/GeV; generator()->preinitInterface(Wplus, "Width" , "set", os .str()); ostringstream os2; os2 << widthZ/GeV; generator()->preinitInterface(Z0 , "Width" , "set", os2.str()); } Interfaced::doinit(); } double StandardModelBase::CKM(unsigned int uFamily, unsigned int dFamily) const { if ( theCKM2Matrix.empty() ) theCKM2Matrix = theCKM->getMatrix(families()); if ( uFamily >= theCKM2Matrix.size() ) return 0.0; const vector & row = theCKM2Matrix[uFamily]; if ( dFamily >= row.size() ) return 0.0; return row[dFamily]; } double StandardModelBase::CKM(const ParticleData & uType, const ParticleData & dType) const { int uFamily = abs(uType.id() - 1)/2; int dFamily = abs(dType.id())/2; return CKM(uFamily, dFamily); } void StandardModelBase::persistentOutput(PersistentOStream & os) const { os << theFamilies << theAlphaEM << theAlphaEMMZ << theRunningAlphaEM << theSin2ThetaW << theEnu << theEe << theEu << theEd << theVnu << theVe << theVu << theVd << theAnu << theAe << theAu << theAd << recalculateEW << theCKM << theNc << theAlphaS << theRunningAlphaS << ounit(theGF,1./GeV2) << theElectroWeakScheme << theBosonWidthOption; } void StandardModelBase::persistentInput(PersistentIStream & is, int) { is >> theFamilies >> theAlphaEM >> theAlphaEMMZ >> theRunningAlphaEM >> theSin2ThetaW >> theEnu >> theEe >> theEu >> theEd >> theVnu >> theVe >> theVu >> theVd >> theAnu >> theAe >> theAu >> theAd >> recalculateEW >> theCKM >> theNc >> theAlphaS >> theRunningAlphaS >> iunit(theGF,1./GeV2) >> theElectroWeakScheme >> theBosonWidthOption; } ClassDescription StandardModelBase::initStandardModelBase; void StandardModelBase::Init() { static ClassDocumentation documentation ("The ThePEG::StandardModelBase class provides the base class" " for all models and an implementation of the couplings and parameters" " of the Standard Model."); static Parameter interfaceFamilies ("NumberOfFamilies", "The number of families assumed in the Standard model.", &StandardModelBase::theFamilies, 3, 0, 5, false, false, true); static Parameter interfaceAlphaEM ("EW/AlphaEM", "The electro-magnetic coupling constant at zero momentum transfer.", &StandardModelBase::theAlphaEM, 1.0/137.04, 0.0, 1.0, false, false, true); static Parameter interfaceAlphaEMMZ ("EW/AlphaEMMZ", "The electro-magnetic coupling constant at the Z mass.", &StandardModelBase::theAlphaEMMZ, 1.0/128.91, 0.0, 1.0, false, false, true); static Reference interfaceRunningAlphaEM ("EW/RunningAlphaEM", "Reference to an object capable of calculating the running " "electro-magnetic coupling at a given scale", &StandardModelBase::theRunningAlphaEM, false, false, true, false); static Parameter interfaceSin2ThetaW ("EW/Sin2ThetaW", "The square of the sine of the weak mixing angel", &StandardModelBase::theSin2ThetaW, 0.232, 0.0, 1.0, false, false, true); static Parameter interfaceFermiConstant ("EW/FermiConstant", "The Fermi constants G_F", &StandardModelBase::theGF, 1./GeV2, 1.16637e-5/GeV2, 1.e-5/GeV2, 2.e-5/GeV2, false, false, Interface::limited); static Parameter interfaceEnu ("EW/e_nu", "The coupling between a neutrino and a photon.", &StandardModelBase::theEnu, 0.0, 0.0, 0.0, false, false, false); static Parameter interfaceEe ("EW/e_e", "The coupling between a charged lepton and a photon.", &StandardModelBase::theEe, -1.0, 0.0, 0.0, false, false, false); static Parameter interfaceEu ("EW/e_u", "The coupling between an up-type quark and a photon.", &StandardModelBase::theEu, 2.0/3.0, 0.0, 0.0, false, false, false); static Parameter interfaceEd ("EW/e_d", "The coupling between a down-type quark and a photon.", &StandardModelBase::theEd, -1.0/3.0, 0.0, 0.0, false, false, false); static Parameter interfaceVnu ("EW/v_nu", "The vector coupling between a neutrino and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theVnu, 1.0, 0.0, 0.0, false, false, false); static Parameter interfaceVe ("EW/v_e", "The vector coupling between a charged lepton and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theVe, -0.072, 0.0, 0.0, false, false, false); static Parameter interfaceVu ("EW/v_u", "The vector coupling between an up-type quark and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theVu, 0.381333333, 0.0, 0.0, false, false, false); static Parameter interfaceVd ("EW/v_d", "The vector coupling between a down-type quark and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theVd, -0.690666666, 0.0, 0.0, false, false, false); static Parameter interfaceAnu ("EW/a_nu", "The axial coupling between a neutrino and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theAnu, 1.0, 0.0, 0.0, false, false, false); static Parameter interfaceAe ("EW/a_e", "The axial coupling between a charged lepton and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theAe, -1.0, 0.0, 0.0, false, false, false); static Parameter interfaceAu ("EW/a_u", "The axial coupling between an up-type quark and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theAu, 1.0, 0.0, 0.0, false, false, false); static Parameter interfaceAd ("EW/a_d", "The axial coupling between a down-type quark and a Z^0. " "See also command interface EW/RecalculateEW", &StandardModelBase::theAd, -1.0, 0.0, 0.0, false, false, false); static Switch interfaceRecalculateEW ("EW/RecalculateEW", "Recalculate all parameters which depend directly on " "\\f$\\sin^2\\theta_W\\f$ " "in the initialization disregarding the values previously set. " "This affects only " "EW/v_nu, " "EW/v_e, " "EW/v_u, " "EW/v_d, " "EW/a_nu, " "EW/a_e, " "EW/a_u and " "EW/a_d.", &StandardModelBase::recalculateEW, 1, false, false); static SwitchOption interfaceRecalculateEWOn (interfaceRecalculateEW, "On", "On", 1); static SwitchOption interfaceRecalculateEWOff (interfaceRecalculateEW, "Off", "Off", 0); static Reference interfaceCKM ("EW/CKM", "Reference to an object capable of calculating the square of the " "elements of the Cabibbo-Kobayashi-Maskawa flavour mixing matrix", &StandardModelBase::theCKM, false, false, true, false); static Switch interfaceElectroWeakScheme ("EW/Scheme", "Option for the definition of the electroweak parameters", &StandardModelBase::theElectroWeakScheme, 0, false, false); static SwitchOption interfaceElectroWeakSchemeDefault (interfaceElectroWeakScheme, "Default", "Use the best values for all the electroweak parameters, which can be inconsistent.", 0); static SwitchOption interfaceElectroWeakSchemeGMuScheme (interfaceElectroWeakScheme, "GMuScheme", "Use the G_mu scheme, input parameters mW,mZ and GF", 1); static SwitchOption interfaceElectroWeakSchemealphaMZScheme (interfaceElectroWeakScheme, "alphaMZScheme", "Use the alpha_MZ scheme, input parameters mW, mZ and alpha(mZ)", 2); static SwitchOption interfaceElectroWeakSchemeNoMass (interfaceElectroWeakScheme, "NoMass", "Input parameters alpha(mZ),GF,sin2thetaW", 3); static SwitchOption interfaceElectroWeakSchememW (interfaceElectroWeakScheme, "mW", "Input parameters mW, GF and sin2thetaW", 4); static SwitchOption interfaceElectroWeakSchememZ (interfaceElectroWeakScheme, "mZ", "Input parameters mZ, alphaEM and sin2thetaW", 5); static Switch interfaceEWBosonWidth ("EW/BosonWidth", "Option for the calculation of the W and Z boson widths", &StandardModelBase::theBosonWidthOption, 0, false, false); static SwitchOption interfaceEWBosonWidthExperiment (interfaceEWBosonWidth, "Experiment", "Use the values from the ParticleData objects", 0); static SwitchOption interfaceEWBosonWidthLeadingOrder (interfaceEWBosonWidth, "LeadingOrder", "Calculate them using leading-order formulae", 1); static SwitchOption interfaceEWBosonWidthHigherOrder (interfaceEWBosonWidth, "HigherOrder", "Calculate them including higher order QCD corrections", 2); static Parameter interfaceNc ("QCD/Nc", "The number of colours assumed in the Standard model.", &StandardModelBase::theNc, 3, 0, 10, false, false, true); static Parameter interfaceAlphaS ("QCD/AlphaS", "The (fixed) strong coupling constant.", &StandardModelBase::theAlphaS, 0.2, 0.0, 100.0, false, false, true); static Reference interfaceRunningAlphaS ("QCD/RunningAlphaS", "Reference to an object capable of calculating the running " "stron coupling at a given scale", &StandardModelBase::theRunningAlphaS, false, false, true, false); interfaceRunningAlphaEM.rank(10); interfaceRunningAlphaS.rank(9); interfaceSin2ThetaW.rank(8); interfaceCKM.rank(7); } thepeg-1.8.0.orig/StandardModel/StandardModelBase.fh0000644000175000017500000000037311747772425020526 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_StandardModelBase_FH #define ThePEG_StandardModelBase_FH // // This is the forward declaration of the StandardModelBase class. // namespace ThePEG { class StandardModelBase; } #endif /* ThePEG_StandardModelBase_FH */ thepeg-1.8.0.orig/StandardModel/StandardModelBase.h0000644000175000017500000002500411747772425020356 0ustar sunsun// -*- C++ -*- // // StandardModelBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardModelBase_H #define ThePEG_StandardModelBase_H // This is the declaration of the StandardModelBase class. #include "ThePEG/Config/ThePEG.h" #include "AlphaEMBase.h" #include "CKMBase.h" #include "AlphaSBase.h" // #include "StandardModelBase.fh" // #include "StandardModelBase.xh" namespace ThePEG { /** * StandardModelBase is used to handle standard model parameters in an * EventGenerator. It uses AlphaEMBase, AlphaSBase and CKMBase to help * with the implementation of the electro-magnetic and QCD couplings * and the flavour mixing matrix. This means that StandardModelBase * does not need to be inherited from when it comes to standard model * parameters. Beyond the standard model parameters should be * implemented as sub-classes. * * @see \ref StandardModelBaseInterfaces "The interfaces" * defined for StandardModelBase. * @see EventGenerator * @see AlphaEMBase * @see AlphaSBase * @see CKMBase */ class StandardModelBase: public Interfaced { /** Declare a pointer to an AlphaEMBase object. */ typedef Ptr::pointer AEMPtr; /** Declare a pointer to an AlphaSBase object. */ typedef Ptr::pointer ASPtr; /** Declare a pointer to n CKMBase object. */ typedef Ptr::pointer CKMPtr; /** Declare a transient pointer to an AlphaEMBase object. */ typedef Ptr::transient_pointer tAEMPtr; /** Declare a transient pointer to an AlphaSBase object. */ typedef Ptr::transient_pointer tASPtr; /** Declare a transient pointer to a CKMBase object. */ typedef Ptr::transient_pointer tCKMPtr; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ StandardModelBase(); /** * Destructor. */ virtual ~StandardModelBase(); //@} public: /** * Return the number of families assumed in the standard model. */ unsigned int families() const { return theFamilies; } public: /** @name Functions accessing electro-weak parameters. */ //@{ /** * Constant \f$\alpha_{EM}(q^2=0)\f$. */ double alphaEM() const { return theAlphaEM; } /** * Constant \f$\alpha_{EM}(q^2=m_Z^2)\f$. */ double alphaEMMZ() const { return theAlphaEMMZ; } /** * The electromagnetic coupling for vertex classes * in a well defined self-consistent EW scheme if requested */ double alphaEMME(Energy2 scale) { if(theElectroWeakScheme==0) return alphaEM(scale); else if(scale>1e-6*GeV2) return theAlphaEMMZ; else return theAlphaEMMZ; } /** * Running \f$\alpha_{EM}\f$. */ double alphaEM(Energy2 scale) const { return theRunningAlphaEM->value(scale, *this); } /** * Return a pointer to the object handling \f$\alpha_{EM}\f$. */ tAEMPtr alphaEMPtr() const { return theRunningAlphaEM; } /** * Return \f$\sin^2(\theta_W)\f$. */ double sin2ThetaW() const { return theSin2ThetaW; } /** * The Fermi constant */ InvEnergy2 fermiConstant() const {return theGF;} /** * The neutrino-photon coupling. */ double enu() const { return theEnu; } /** * The charged lepton-photon coupling. */ double ee() const { return theEe; } /** * The up-type-photon coupling. */ double eu() const { return theEu; } /** * The down-type-photon coupling. */ double ed() const { return theEd; } /** * The vector neutrino-\f$Z^0\f$ coupling. */ double vnu() const { return theVnu; } /** * The vector charged lepton-\f$Z^0\f$ coupling. */ double ve() const { return theVe; } /** * The vector up-type-\f$Z^0\f$ coupling. */ double vu() const { return theVu; } /** * The vector down-type-\f$Z^0\f$ coupling. */ double vd() const { return theVd; } /** * The axial neutrino-\f$Z^0\f$ coupling. */ double anu() const { return theAnu; } /** * The axial charged lepton-\f$Z^0\f$ coupling. */ double ae() const { return theAe; } /** * The axial up-type-\f$Z^0\f$ coupling. */ double au() const { return theAu; } /** * The axial down-type-\f$Z^0\f$ coupling. */ double ad() const { return theAd; } /** * Return a pointer to the CKMBase object used. */ tCKMPtr CKM() const { return theCKM; } /** * Return a square of the element of the Cabibbo-Kobayashi-Maskawa * Matrix. The fatrix element for the \a uf up-type family and \a df * down-type family. */ double CKM(unsigned int uf, unsigned int df) const; /** * Return the square of the elements of the Cabibbo-Kobayashi-Maskawa * Matrix. */ double CKM(const ParticleData & uType, const ParticleData & dType) const; //@} public: /** @name Functions accessing QCD parameters. */ //@{ /** * Return the number of colours. */ unsigned int Nc() const { return theNc; } /** * Return the number of avtive quark flavours for a given \a scale. */ unsigned int Nf(Energy2 scale) const { return theRunningAlphaS->Nf(scale); } /** * Return the constant strong coupling constant. */ double alphaS() const { return theAlphaS; } /** * Return the running strong coupling for a given \a scale */ double alphaS(Energy2 scale) const { return theRunningAlphaS->value(scale, *this); } /** * Return a pointer to the object handling \f$\alpha_S\f$. */ tASPtr alphaSPtr() const { return theRunningAlphaS; } /** * Return the \f$\Lambda_{QCD}\f$ for \a nflav active flavours. */ Energy LambdaQCD(unsigned int nflav) const { return theRunningAlphaS->LambdaQCD(nflav); } /** * Return the \f$\Lambda_{QCD}\f$ for the given \a scale. */ Energy LambdaQCD(Energy2 scale) const { return LambdaQCD(Nf(scale)); } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); /** * Overloaded function from Interfaced */ virtual bool preInitialize() const { return true; } protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** * The number of families. */ unsigned int theFamilies; /** * The constant \f$\alpha_{EM}\f$. */ double theAlphaEM; /** * The constant \f$\alpha_{EM}\f$. */ double theAlphaEMMZ; /** * Pointer to an object capable of calculating the running * \f$\alpha_{EM}\f$. */ AEMPtr theRunningAlphaEM; /** * The \f$\sin^2(\theta_W)\f$ */ double theSin2ThetaW; /** * The Fermi contants \f$G_F\f$ */ InvEnergy2 theGF; /** * Coupling between a fundamental fermion and the photon. */ double theEnu; /** * Coupling between a fundamental fermion and the photon. */ double theEe; /** * Coupling between a fundamental fermion and the photon. */ double theEu; /** * Coupling between a fundamental fermion and the photon. */ double theEd; /** * Vector coupling between a fundamental fermion and Z^0. */ double theVnu; /** * Vector coupling between a fundamental fermion and Z^0. */ double theVe; /** * Vector coupling between a fundamental fermion and Z^0. */ double theVu; /** * Vector coupling between a fundamental fermion and Z^0. */ double theVd; /** * Axial coupling between a fundamental fermions and Z^0. */ double theAnu; /** * Axial coupling between a fundamental fermions and Z^0. */ double theAe; /** * Axial coupling between a fundamental fermions and Z^0. */ double theAu; /** * Axial coupling between a fundamental fermions and Z^0. */ double theAd; /** * If true, the electro-weak couplings are derived from * \f$\theta_W\f$ in the initialization. */ long recalculateEW; /** * A pointer to an object representing the Cabibbo-Kobayashi-Maskawa * matrix. */ CKMPtr theCKM; /** * The matrix of squared CKM elements set from theCKM at initialization. */ mutable vector< vector > theCKM2Matrix; /** * The number of colours; */ unsigned int theNc; /** * The fixed strong coupling. */ double theAlphaS; /** * Pointer to an object capable of calculating the running * \f$\alpha_{S}\f$. */ ASPtr theRunningAlphaS; /** * Electroweak scheme */ unsigned int theElectroWeakScheme; /** * Option for the calculation of the W/Z widths */ unsigned int theBosonWidthOption; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStandardModelBase; /** * Private and non-existent assignment operator. */ StandardModelBase & operator=(const StandardModelBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of StandardModelBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of StandardModelBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * StandardModelBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::StandardModelBase"; } }; /** @endcond */ } #endif /* ThePEG_StandardModelBase_H */ thepeg-1.8.0.orig/StandardModel/RunningCoupling.h0000644000175000017500000001006411754473600020152 0ustar sunsun// -*- C++ -*- // // RunningCoupling.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad, (C) 2009 Simon Platzer // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RunningCoupling_H #define ThePEG_RunningCoupling_H // This is the declaration of the RunningCoupling class. #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Repository/EventGenerator.h" #include "StandardModelBase.fh" namespace ThePEG { /** * RunningCoupling an abstract base class unifying the treatment * of running couplings in ThePEG. * * @see \ref RunningCouplingInterfaces "The interfaces" * defined for RunningCoupling. * @see StandardModelBase */ class RunningCoupling: public Interfaced { public: /** * The default constructor. */ RunningCoupling () : theScaleFactor(1.) {} /**@name Methods to be implemented by a derived class */ //@{ /** * Return the value of the coupling at a given \a scale using the * given standard model object, \a sm. */ virtual double value (Energy2 scale, const StandardModelBase & sm) const = 0; /** * Return the number of loops contributing to * the running this coupling. The default returns * zero to ensure backward compatibility. */ virtual unsigned int nloops () const { return 0; } //@} /** * Return the value of the coupling at a given \a scale using the * StandardModelBase object used by the EventGenerator. */ double value(Energy2 scale) const { return value(scale,*(generator()->standardModel())); } /** * Return an overestimate to the running coupling at the * given scale. This is defined to aid veto algorithms * and by default returns the coupling itself, using the EventGenerators's * StandardModelBase object. */ virtual double overestimateValue (Energy2 scale) const { return value(scale); } /** * Return the ratio of the exact to the overestimated value * of the running coupling. The default implementation returns * one in accordance with the default implementation of * overestimateValue */ virtual double ratioToOverestimate (Energy2) const { return 1.; } /** * Return the scale factor, which may be used to globally * rescale the argument of the running coupling. */ double scaleFactor () const { return theScaleFactor; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractClassDescription initRunningCoupling; /** * Private and non-existent assignment operator. */ RunningCoupling & operator=(const RunningCoupling &); /** * The scale factor used to rescale the argument of * the running coupling. */ double theScaleFactor; }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of RunningCoupling. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of RunningCoupling. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * RunningCoupling class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RunningCoupling"; } }; /** @endcond */ } #endif /* ThePEG_RunningCoupling_H */ thepeg-1.8.0.orig/StandardModel/CKMBase.cc0000644000175000017500000000153711747772425016412 0ustar sunsun// -*- C++ -*- // // CKMBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the CKMBase class. // #include "CKMBase.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription CKMBase::initCKMBase; void CKMBase::Init() { static ClassDocumentation documentation ("An abstract base classused by the StandardModelBase to implement " "the Cabibbo-Kobayashi-Mascawa mixing matrix."); } thepeg-1.8.0.orig/StandardModel/O1AlphaS.cc0000644000175000017500000001022311747772425016545 0ustar sunsun// -*- C++ -*- // // O1AlphaS.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the O1AlphaS class. // #include "O1AlphaS.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr O1AlphaS::clone() const { return new_ptr(*this); } IBPtr O1AlphaS::fullclone() const { return new_ptr(*this); } double O1AlphaS::value(Energy2 scale, const StandardModelBase &) const { Energy2 theScale = scaleFactor()*scale; return 12.0*Constants::pi/((33.0-2.0*Nf(theScale))* log(max(theScale, sqr(Q0))/sqr(LambdaQCD(Nf(theScale))))); } vector O1AlphaS::flavourThresholds() const { vector thresholds; for ( long f = 1; f <= theMaxFlav; ++f ) { PDPtr p = getParticleData(f); if ( p ) thresholds.push_back(sqr(p->mass() + p->CC()->mass())); } std::sort(thresholds.begin(), thresholds.end()); return thresholds; } vector O1AlphaS::LambdaQCDs() const { vector lambdas(theMaxFlav + 1); vector thresholds = flavourThresholds(); lambdas[theLambdaFlavour] = theLambdaQCD; for ( int f = theLambdaFlavour - 1; f >= 0; --f ) { if ( thresholds[f] > ZERO ) { lambdas[f] = sqrt(thresholds[f]* exp(-log(thresholds[f]/sqr(lambdas[f + 1]))* (33.0-2.0*(f+1))/(33.0-2.0*f))); } else { lambdas[f] = lambdas[f + 1]; } } for ( int f = theLambdaFlavour; f < theMaxFlav; ++f ) { if ( thresholds[f] > ZERO ) { lambdas[f + 1] = sqrt(thresholds[f]* exp(-log(thresholds[f]/sqr(lambdas[f]))* (33.0-2.0*f)/(33.0-2.0*(f+1)))); } else { lambdas[f + 1] = lambdas[f]; } } return lambdas; } void O1AlphaS::persistentOutput(PersistentOStream & os) const { os << ounit(theLambdaQCD, GeV) << theLambdaFlavour << theMaxFlav << ounit(Q0, GeV); } void O1AlphaS::persistentInput(PersistentIStream & is, int) { is >> iunit(theLambdaQCD, GeV) >> theLambdaFlavour >> theMaxFlav >> iunit(Q0, GeV); } ClassDescription O1AlphaS::initO1AlphaS; void O1AlphaS::Init() { static ClassDocumentation documentation ("O1AlphaS inherits from AlphaSBase and implements the leading order " "running QCD coupling. The value is determined by the " "LambdaQCD parameter at a given number of " "flavours, LambdaFlav. Optionally the coupling " "can be frozen under some minimum scale, " "FreezeScale to avoid divergencies or negative " "couplings."); static Parameter interfaceLambdaQCD ("LambdaQCD", "The \\f$\\Lambda_{QCD}\\f$ in GeV for " "LambdaFlav active " "flavours. The value for other numbers of active flavours is derived by " "assuming that \\f$\\alpha_S\\f$ is continuous.", &O1AlphaS::theLambdaQCD, GeV, 0.25*GeV, ZERO, ZERO, false, false, Interface::lowerlim); static Parameter interfaceMaxFlav ("MaxFlav", "The maximum number of flavours used to calculate \\f$\\alpha_S\\f$.", &O1AlphaS::theMaxFlav, 6, 3, 8, false, false, true); typedef void (ThePEG::O1AlphaS::*IFN)(int); static Parameter interfaceLambdaFlavour ("LambdaFlav", "The number of active flavours for which LambdaQCD is specified.", &O1AlphaS::theLambdaFlavour, 4, 3, 8, false, false, true, (IFN)0, 0, 0, &O1AlphaS::getMaxFlav, 0); static Parameter interfaceFreezeScale ("FreezeScale", "The scale in units of GeV below which \\f$\\alpha_S\\f$ is frozen.", &O1AlphaS::Q0, GeV, ZERO, ZERO, ZERO, true, false, Interface::lowerlim); interfaceLambdaQCD.rank(10); interfaceLambdaFlavour.rank(9); interfaceFreezeScale.rank(8); } thepeg-1.8.0.orig/StandardModel/O1AlphaS.h0000644000175000017500000001106011747772425016407 0ustar sunsun// -*- C++ -*- // // O1AlphaS.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_O1AlphaS_H #define ThePEG_O1AlphaS_H // This is the declaration of the O1AlphaS class. #include "AlphaSBase.h" namespace ThePEG { /** * O1AlphaS inherits from AlphaSBase and implements the leading order * running QCD coupling. The value is determined by a * \f$\Lambda_{QCD}\f$ parameter at a given number of * flavours. Optionally the coupling can be frozen under some minimum * scale to avoid divergencies or negative couplings. * * @see \ref O1AlphaSInterfaces "The interfaces" * defined for O1AlphaS. */ class O1AlphaS: public AlphaSBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ O1AlphaS() : theLambdaQCD(0.25*GeV), theLambdaFlavour(4), theMaxFlav(6), Q0(ZERO) {} //@} public: /** @name Virtual functions mandated by the sub-class. */ //@{ /** * The \f$\alpha_S\f$. Return the QCD coupling for a given \a scale * using the given standard model object \a sm. */ virtual double value(Energy2 scale, const StandardModelBase &) const; /** * Return the number of loops contributing to * the running this coupling. */ virtual unsigned int nloops () const { return 1; } /** * Return the flavour thresholds used. The returned vector contains * (in position i) the scales when the active number of * flavours changes from i to i+1. */ virtual vector flavourThresholds() const; /** * Return the \f$\Lambda_{QCD}\f$ used for different numbers of * active flavours. */ virtual vector LambdaQCDs() const; //@} /** * Return the maximum number of active flavours. */ int getMaxFlav() const { return theMaxFlav; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The \f$\Lambda_{QCD}\f$ for the number of flavours specified by * theLambdaFlavour. Other \f$\Lambda_{QCD}\f$ values for other * numbers of active flavours are calculated from * flavourThresholds() using a continuity requirement. */ Energy theLambdaQCD; /** * The number of flavours for which theLambdaQCD is given. */ int theLambdaFlavour; /** * The maximum number of active flavours. */ int theMaxFlav; /** * The scale below which \f$\alpha_S\f$ is frozen. */ Energy Q0; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initO1AlphaS; /** * Private and non-existent assignment operator. */ O1AlphaS & operator=(const O1AlphaS &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of O1AlphaS. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of O1AlphaS. */ typedef AlphaSBase NthBase; }; /** This template specialization informs ThePEG about the name of the * O1AlphaS class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::O1AlphaS"; } /** Return the name of the shared library be loaded to get access to * the O1AlphaS class and every other class it uses * (except the base class). */ static string library() { return "O1AlphaS.so"; } }; /** @endcond */ } #endif /* ThePEG_O1AlphaS_H */ thepeg-1.8.0.orig/StandardModel/CKMBase.h0000644000175000017500000000401011747772425016241 0ustar sunsun// -*- C++ -*- // // CKMBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_CKMBase_H #define ThePEG_CKMBase_H // This is the declaration of the CKMBase class. #include "ThePEG/Interface/Interfaced.h" #include "StandardModelBase.fh" namespace ThePEG { /** * CKMBase is an abstract base classused by the StandardModelBase to * implement the Cabibbo-Kobayashi-Mascawa mixing matrix. Concrete * sub-classes must implement the getMatrix(unsigned int) function. * * @see \ref CKMBaseInterfaces "The interfaces" * defined for CKMBase. * @see StandardModelBase */ class CKMBase: public Interfaced { public: /** * Return the matrix of squared CKM matrix elements. The returned * matrix should be for \a nf families. This function must be * overridden by sub-classes. */ virtual vector< vector > getMatrix(unsigned int nf) const = 0; public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * Describe an abstract class without persistent data. */ static AbstractNoPIOClassDescription initCKMBase; /** * Private and non-existent assignment operator. */ CKMBase & operator=(const CKMBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of CKMBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of CKMBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * CKMBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::CKMBase"; } }; /** @endcond */ } #endif /* ThePEG_CKMBase_H */ thepeg-1.8.0.orig/StandardModel/SimpleAlphaEM.cc0000644000175000017500000000351411747772425017623 0ustar sunsun// -*- C++ -*- // // SimpleAlphaEM.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleAlphaEM class. // #include "SimpleAlphaEM.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/StandardModel/StandardModelBase.h" using namespace ThePEG; IBPtr SimpleAlphaEM::clone() const { return new_ptr(*this); } IBPtr SimpleAlphaEM::fullclone() const { return new_ptr(*this); } double SimpleAlphaEM::value(Energy2 scale, const StandardModelBase & sm) const { useMe(); double alem = sm.alphaEM(); double alem3pi = alem/(3.0*Constants::pi); double rpigg; double Q2 = scaleFactor()*scale/GeV2; if(Q2<=2e-6) rpigg=0.; else if ( Q2 < 0.09 ) rpigg = alem3pi*(13.4916 + log(Q2)) + 0.00835*log(1.0 + Q2); else if ( Q2 < 9.0 ) rpigg=alem3pi*(16.3200 + 2.0*log(Q2)) + 0.00238*log(1.0 + 3.927*Q2); else if ( Q2 < 10000.0 ) rpigg=alem3pi*(13.4955 + 3.0*log(Q2)) + 0.00165 + 0.00299*log(1.0 + Q2); else rpigg=alem3pi*(13.4955 + 3.0*log(Q2)) + 0.00221 + 0.00293*log(1.0 + Q2); return alem/(1.0-rpigg); } NoPIOClassDescription SimpleAlphaEM::initSimpleAlphaEM; void SimpleAlphaEM::Init() { static ClassDocumentation interfaceDocumentation ("This class implements a running \\f$\\alpha_{\\mbox{EM}}\\f$ according " "to Buckhardt et al.", "In the running of $\\alpha_{EM}$, the parametrization of " "H.~Buckhardt et al. was used. See \\cite{KLEISSCERN9808v3pp129}.", "\\bibitem{KLEISSCERN9808v3pp129} R.~Kleiss et al, " "CERN 89-08, vol.~3, pp 129-131."); } thepeg-1.8.0.orig/StandardModel/AlphaEMBase.cc0000644000175000017500000000142411747772425017242 0ustar sunsun// -*- C++ -*- // // AlphaEMBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the AlphaEMBase class. // #include "AlphaEMBase.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription AlphaEMBase::initAlphaEMBase; void AlphaEMBase::Init() { static ClassDocumentation documentation ("An abstract base class used by the StandardModelBase class to " "implement the electro-magnetic coupling."); } thepeg-1.8.0.orig/StandardModel/Makefile.in0000644000175000017500000005771111756366735016753 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = StandardModel ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) O1AlphaS_la_LIBADD = am_O1AlphaS_la_OBJECTS = O1AlphaS.lo O1AlphaS_la_OBJECTS = $(am_O1AlphaS_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent O1AlphaS_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(O1AlphaS_la_LDFLAGS) $(LDFLAGS) -o $@ SimpleAlphaEM_la_LIBADD = am_SimpleAlphaEM_la_OBJECTS = SimpleAlphaEM.lo SimpleAlphaEM_la_OBJECTS = $(am_SimpleAlphaEM_la_OBJECTS) SimpleAlphaEM_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(SimpleAlphaEM_la_LDFLAGS) \ $(LDFLAGS) -o $@ StandardCKM_la_LIBADD = am_StandardCKM_la_OBJECTS = StandardCKM.lo StandardCKM_la_OBJECTS = $(am_StandardCKM_la_OBJECTS) StandardCKM_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(StandardCKM_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGSM_la_LIBADD = am__objects_1 = StandardModelBase.lo RunningCoupling.lo AlphaEMBase.lo \ CKMBase.lo AlphaSBase.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGSM_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGSM_la_OBJECTS = $(am_libThePEGSM_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(O1AlphaS_la_SOURCES) $(SimpleAlphaEM_la_SOURCES) \ $(StandardCKM_la_SOURCES) $(libThePEGSM_la_SOURCES) DIST_SOURCES = $(O1AlphaS_la_SOURCES) $(SimpleAlphaEM_la_SOURCES) \ $(StandardCKM_la_SOURCES) $(libThePEGSM_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = StandardModelBase.cc RunningCoupling.cc AlphaEMBase.cc CKMBase.cc AlphaSBase.cc DOCFILES = RunningCoupling.h AlphaEMBase.h AlphaSBase.h CKMBase.h \ StandardModelBase.h INCLUDEFILES = $(DOCFILES) StandardModelBase.fh noinst_LTLIBRARIES = libThePEGSM.la pkglib_LTLIBRARIES = O1AlphaS.la SimpleAlphaEM.la StandardCKM.la libThePEGSM_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed O1AlphaS_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) O1AlphaS_la_SOURCES = O1AlphaS.cc O1AlphaS.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleAlphaEM_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleAlphaEM_la_SOURCES = SimpleAlphaEM.cc SimpleAlphaEM.h # Version info should be updated if any interface or persistent I/O # function is changed StandardCKM_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) StandardCKM_la_SOURCES = StandardCKM.cc StandardCKM.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu StandardModel/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu StandardModel/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } O1AlphaS.la: $(O1AlphaS_la_OBJECTS) $(O1AlphaS_la_DEPENDENCIES) $(EXTRA_O1AlphaS_la_DEPENDENCIES) $(AM_V_CXXLD)$(O1AlphaS_la_LINK) -rpath $(pkglibdir) $(O1AlphaS_la_OBJECTS) $(O1AlphaS_la_LIBADD) $(LIBS) SimpleAlphaEM.la: $(SimpleAlphaEM_la_OBJECTS) $(SimpleAlphaEM_la_DEPENDENCIES) $(EXTRA_SimpleAlphaEM_la_DEPENDENCIES) $(AM_V_CXXLD)$(SimpleAlphaEM_la_LINK) -rpath $(pkglibdir) $(SimpleAlphaEM_la_OBJECTS) $(SimpleAlphaEM_la_LIBADD) $(LIBS) StandardCKM.la: $(StandardCKM_la_OBJECTS) $(StandardCKM_la_DEPENDENCIES) $(EXTRA_StandardCKM_la_DEPENDENCIES) $(AM_V_CXXLD)$(StandardCKM_la_LINK) -rpath $(pkglibdir) $(StandardCKM_la_OBJECTS) $(StandardCKM_la_LIBADD) $(LIBS) libThePEGSM.la: $(libThePEGSM_la_OBJECTS) $(libThePEGSM_la_DEPENDENCIES) $(EXTRA_libThePEGSM_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGSM_la_OBJECTS) $(libThePEGSM_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AlphaEMBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/AlphaSBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CKMBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/O1AlphaS.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RunningCoupling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleAlphaEM.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardCKM.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/StandardModelBase.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/StandardModel/AlphaSBase.cc0000644000175000017500000000237211747772425017146 0ustar sunsun// -*- C++ -*- // // AlphaSBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the AlphaSBase class. // #include "AlphaSBase.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; void AlphaSBase::doinit() { theFlavourThresholds = flavourThresholds(); theLambdaQCDs = LambdaQCDs(); RunningCoupling::doinit(); } void AlphaSBase::persistentOutput(PersistentOStream & os) const { os << ounit(theFlavourThresholds, GeV2) << ounit(theLambdaQCDs, GeV); } void AlphaSBase::persistentInput(PersistentIStream & is, int) { is >> iunit(theFlavourThresholds, GeV2) >> iunit(theLambdaQCDs, GeV); } AbstractClassDescription AlphaSBase::initAlphaSBase; void AlphaSBase::Init() { static ClassDocumentation documentation ("An abstract base class used by the StandardModelBase to implement the " "QCD coupling."); } thepeg-1.8.0.orig/StandardModel/StandardCKM.cc0000644000175000017500000000666011747772425017302 0ustar sunsun// -*- C++ -*- // // StandardCKM.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the StandardCKM class. // #include "StandardCKM.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr StandardCKM::clone() const { return new_ptr(*this); } IBPtr StandardCKM::fullclone() const { return new_ptr(*this); } vector< vector > StandardCKM::getMatrix(unsigned int nFamilies) const { vector< vector > ckm(nFamilies, vector(nFamilies, 0.0)); for ( unsigned int i = 0; i < nFamilies; ++i ) ckm[i][i] = 1.0; if ( nFamilies <= 1 ) return ckm; double s12 = sin(theta12); double c12 = cos(theta12); if ( nFamilies == 2 ) { ckm[0][0] = sqr(c12); ckm[0][1] = sqr(s12); ckm[1][0] = sqr(s12); ckm[1][1] = sqr(c12); return ckm; } double s13 = sin(theta13); double c13 = cos(theta13); double s23 = sin(theta23); double c23 = cos(theta23); double cd = cos(delta); ckm[0][0] = sqr(c12*c13); ckm[0][1] = sqr(s12*c13); ckm[0][2] = sqr(s13); ckm[1][0] = sqr(s12*c23)+sqr(c12*s23*s13)+2.0*s12*c23*c12*s23*s13*cd; ckm[1][1] = sqr(c12*c23)+sqr(s12*s23*s13)-2.0*c12*c23*s12*s23*s13*cd; ckm[1][2] = sqr(s23*c13); ckm[2][0] = sqr(s12*s23)+sqr(c12*c23*s13)-2.0*s12*s23*c12*c23*s13*cd; ckm[2][1] = sqr(c12*s23)+sqr(s12*c23*s13)+2.0*c12*s23*s12*c23*s13*cd; ckm[2][2] = sqr(c23*c13); return ckm; } void StandardCKM::persistentOutput(PersistentOStream & os) const { os << theta12 << theta13 << theta23 << delta; } void StandardCKM::persistentInput(PersistentIStream & is, int) { is >> theta12 >> theta13 >> theta23 >> delta; } ClassDescription StandardCKM::initStandardCKM; void StandardCKM::Init() { static ClassDocumentation documentation ("Implements the standard parameterization of the CKM matrix in terms " "of three angles and a phase."); static Parameter interfaceTheta12 ("theta_12", "The mixing angle between the first and second generation in the standard " "parameterization of the CKM matrix", &StandardCKM::theta12, 0.222357, 0.0, Constants::twopi, false, false, true); static Parameter interfaceTheta13 ("theta_13", "The mixing angle between the first and third generation in the standard " "parameterization of the CKM matrix", &StandardCKM::theta13, 0.0003150, 0.0, Constants::twopi, false, false, true); static Parameter interfaceTheta23 ("theta_23", "The mixing angle between the second and third generation in the standard " "parameterization of the CKM matrix", &StandardCKM::theta23, 0.039009, 0.0, Constants::twopi, false, false, true); static Parameter interfaceDelta ("delta", "The phase angle in the standard " "parameterization of the CKM matrix", &StandardCKM::delta, 1.35819, 0.0, Constants::twopi, false, false, true); interfaceTheta12.rank(10); interfaceTheta13.rank(9); interfaceTheta23.rank(8); interfaceDelta.rank(7); } thepeg-1.8.0.orig/StandardModel/StandardCKM.h0000644000175000017500000000672711747772425017150 0ustar sunsun// -*- C++ -*- // // StandardCKM.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardCKM_H #define ThePEG_StandardCKM_H // This is the declaration of the StandardCKM class. #include "CKMBase.h" namespace ThePEG { /** * StandardCKM inherits from CKMBase and implements the standard * parameterization of the CKM matrix in terms of three angles and a * phase. * * @see \ref StandardCKMInterfaces "The interfaces" * defined for StandardCKM. */ class StandardCKM: public CKMBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ StandardCKM() : theta12(0.222357), theta13(0.0003150), theta23(0.039009), delta(1.35819) {} //@} public: /** * Return the matrix of squared CKM matrix elements. The returned * matrix should be for \a nf families. */ virtual vector< vector > getMatrix(unsigned int nFamilies) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The \f$\theta_{12}\f$ angle. */ double theta12; /** * The \f$\theta_{13}\f$ angle. */ double theta13; /** * The \f$\theta_{23}\f$ angle. */ double theta23; /** * The \f$\delta\f$ angle describing the phase. */ double delta; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initStandardCKM; /** * Private and non-existent assignment operator. */ StandardCKM & operator=(const StandardCKM &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of StandardCKM. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of StandardCKM. */ typedef CKMBase NthBase; }; /** This template specialization informs ThePEG about the name of the * StandardCKM class and the shared object where it is * defined. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::StandardCKM"; } /** Return the name of the shared library be loaded to get access to * the StandardCKM class and every other class it uses * (except the base class). */ static string library() { return "StandardCKM.so"; } }; /** @endcond */ } #endif /* ThePEG_StandardCKM_H */ thepeg-1.8.0.orig/StandardModel/AlphaSBase.h0000644000175000017500000001013711747772425017006 0ustar sunsun// -*- C++ -*- // // AlphaSBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_AlphaSBase_H #define ThePEG_AlphaSBase_H // This is the declaration of the AlphaSBase class. #include "RunningCoupling.h" namespace ThePEG { /** * AlphaSBase is an abstract base class used by the StandardModelBase * to implement the QCD coupling, \f$\alpha_S\f$. The AlphaSBase also * encodes the number of active flavours at a given scale and the * \f$\Lambda_{QCD}\f$ for a given number of active flavours or for a * given scale. * * @see \ref AlphaSBaseInterfaces "The interfaces" * defined for AlphaSBase. * @see StandardModelBase */ class AlphaSBase: public RunningCoupling { public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return the flavour thresholds used. The returned vector contains * (in position i) the scales when the active number of * flavours changes from i to i+1. */ virtual vector flavourThresholds() const = 0; /** * Return the \f$\Lambda_{QCD}\f$ used for different numbers of * active flavours. */ virtual vector LambdaQCDs() const = 0; //@} /** @name Access information about number of flavours and \f$\Lambda_{QCD}\f$. */ //@{ /** * Return the number of avtive quark flavours. */ unsigned int Nf(Energy2 scale) const { unsigned int i = 0; while ( i < theFlavourThresholds.size() && theFlavourThresholds[i] < scale ) ++i; return i; } /** * Return the \f$\Lambda_{QCD}\f$ used for \a nflav active flavours. */ Energy LambdaQCD(unsigned int nflav) const { return theLambdaQCDs[nflav]; } /** * Return the \f$\Lambda_{QCD}\f$ used for corresponding given \a scale. */ Energy LambdaQCD(Energy2 scale) const { return theLambdaQCDs[Nf(scale)]; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); //@} private: /** * Flavour thresholds, set from the virtual functions in the * initialization. */ vector theFlavourThresholds; /** * The values of \f$\Lambda_{QCD}\f$ corresponding to * theFlavourThresholds, set from the virtual functions in the * initialization. */ vector theLambdaQCDs; private: /** * Describe an abstract class with persistent data. */ static AbstractClassDescription initAlphaSBase; /** * Private and non-existent assignment operator. */ AlphaSBase & operator=(const AlphaSBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of AlphaSBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of AlphaSBase. */ typedef RunningCoupling NthBase; }; /** This template specialization informs ThePEG about the name of the * AlphaSBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::AlphaSBase"; } }; /** @endcond */ } #endif /* ThePEG_AlphaSBase_H */ thepeg-1.8.0.orig/StandardModel/Makefile.am0000644000175000017500000000210011747772425016715 0ustar sunsunmySOURCES = StandardModelBase.cc RunningCoupling.cc AlphaEMBase.cc CKMBase.cc AlphaSBase.cc DOCFILES = RunningCoupling.h AlphaEMBase.h AlphaSBase.h CKMBase.h \ StandardModelBase.h INCLUDEFILES = $(DOCFILES) StandardModelBase.fh noinst_LTLIBRARIES = libThePEGSM.la pkglib_LTLIBRARIES = O1AlphaS.la SimpleAlphaEM.la StandardCKM.la libThePEGSM_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed O1AlphaS_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) O1AlphaS_la_SOURCES = O1AlphaS.cc O1AlphaS.h # Version info should be updated if any interface or persistent I/O # function is changed SimpleAlphaEM_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) SimpleAlphaEM_la_SOURCES = SimpleAlphaEM.cc SimpleAlphaEM.h # Version info should be updated if any interface or persistent I/O # function is changed StandardCKM_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) StandardCKM_la_SOURCES = StandardCKM.cc StandardCKM.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/ACDC/0000755000175000017500000000000011756460367012640 5ustar sunsunthepeg-1.8.0.orig/ACDC/ACDCGen.icc0000644000175000017500000006071711747772425014460 0ustar sunsun// -*- C++ -*- // // ACDCGen.icc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ACDCGenerator { template inline ACDCGen::ACDCGen(Rnd * r) : theRnd(r), theNAcc(0), theN(0), theNI(1, 0), theSumW(1, 0.0), theSumW2(1, 0.0), theEps(100*std::numeric_limits::epsilon()), theMargin(1.1), theNTry(100), theMaxTry(10000), useCheapRandom(false), theFunctions(1), theDimensions(1, 0), thePrimaryCells(1), theSumMaxInts(1, 0.0), theLast(0), theLastCell(0), theLastF(0.0) { maxsize = 0; } template inline ACDCGen::ACDCGen() : theRnd(0), theNAcc(0), theN(0), theNI(1, 0), theSumW(1, 0.0), theSumW2(1, 0.0), theEps(100*std::numeric_limits::epsilon()), theMargin(1.1), theNTry(100), theMaxTry(10000), useCheapRandom(false), theFunctions(1), theDimensions(1, 0), thePrimaryCells(1), theSumMaxInts(1, 0.0), theLast(0), theLastCell(0), theLastF(0.0) { maxsize = 0; } template inline ACDCGen::~ACDCGen() { clear(); } template inline void ACDCGen::setRnd(Rnd * r) { theRnd = r; } template inline void ACDCGen::clear() { theNAcc = 0; theN = 0; theNI = vector(1, 0); theSumW = DVector(1, 0.0); theSumW2 = DVector(1, 0.0); theFunctions = FncVector(1); theDimensions = DimVector(1, 0); for ( int i = 0, N = thePrimaryCells.size(); i < N; ++i ) if ( thePrimaryCells[i] ) delete thePrimaryCells[i]; thePrimaryCells = CellVector(1); theSumMaxInts = DVector(1, 0.0); theLast = 0; theLastCell = 0; theLastPoint.clear(); theLastF = 0.0; levels.clear(); } template inline bool ACDCGen:: addFunction(DimType dim, FncPtrType fnc, double maxrat) { if ( maxrat < 0.0 ) maxrat = 1.0/nTry(); typedef map PointMap; theLast = theFunctions.size(); theFunctions.push_back(fnc); theNI.push_back(0); theSumW.push_back(0.0); theSumW2.push_back(0.0); theDimensions.push_back(dim); // Generate nTry() points with non-zero function value DVector x(dim); PointMap pmap; long itry = 0; while ( pmap.size() < nTry() ) { if ( ++itry > maxTry() ) { thePrimaryCells.push_back(new ACDCGenCell(0.0)); theSumMaxInts.push_back(theSumMaxInts.back() + cells().back()->doMaxInt()); return false; } rnd(dim, x); double val = FncTraits::value(fnc, x); if ( val > 0.0 ) { pmap[val] = x; itry = 0; } } // Create the root cell and set its overestimated function value to // the smallest non-zero value found double minf = pmap.begin()->first; double maxf = (--pmap.end())->first; minf = max(minf, maxrat*maxf); // thePrimaryCells.push_back(new ACDCGenCell(pmap.begin()->first)); thePrimaryCells.push_back(new ACDCGenCell(minf)); theLastF = pmap.begin()->first; pmap.erase(pmap.begin()); theSumMaxInts.push_back(theSumMaxInts.back() + cells().back()->doMaxInt()); // Start the divide-and-conquer procedure using the point with the // highest function value found. theLastF = (--pmap.end())->first; theLastPoint = (--pmap.end())->second; pmap.erase(--pmap.end()); DVector up(dim, 1.0); DVector lo(dim, 0.0); theLastCell = cells().back()->getCell(lo, lastPoint(), up); if ( lastF() > lastCell()->g() ) { compensate(lo, up); levels.clear(); } // For each other generated point check that it's below the // overestimated value of the corresponding cell. If not start the // divide-and-conquer using that point. while ( !pmap.empty() ) { theLastPoint = pmap.begin()->second; theLastF = pmap.begin()->first; pmap.erase(pmap.begin()); DVector up(dim, 1.0); DVector lo(dim, 0.0); theLastCell = cells().back()->getCell(lo, lastPoint(), up); if ( lastF() > lastCell()->g() ) { compensate(lo, up); levels.clear(); } } // cells().back()->smooth(1.0/nTry()); return true; } template inline void ACDCGen::chooseCell(DVector & lo, DVector & up) { if ( compensating() ) { // If we are compensating, we must choose the cell to be compensated. up = levels.back().up; lo = levels.back().lo; theLastCell = levels.back().cell; theLast = levels.back().index; } else { // Otherwise, first choose the function to be used and choose the // corresponding root cell. theLast = upper_bound(sumMaxInts().begin(), sumMaxInts().end(), rnd()*sumMaxInts().back()) - sumMaxInts().begin(); if(theLast>=sumMaxInts().size()) { throw ThePEG::Exception() << "Selected a function outside the allowed range" << " in ACDCGen::chooseCell(). This is usually due" << " to a floating point error (nan or inf) in the" << " calculation of the weight" << ThePEG::Exception::abortnow; } up = DVector(lastDimension(), 1.0); lo = DVector(lastDimension(), 0.0); theLastCell = lastPrimary(); } // Now select randomly a sub-cell of the chosen cell if ( cheapRandom() ) { theLastCell = lastCell()->generate(lo, up, theRnd); } else { DVector rndv(lastDimension()); rnd(lastDimension(), rndv); theLastCell = lastCell()->generate(lo, up, rndv); } } template inline typename ACDCGen::FncPtrType ACDCGen::generate() { long itry = 0; while ( true ) { if ( ++itry > maxTry() ) return FncPtrType(); ++theN; // First choose a function and a cell to generate in. DVector up; DVector lo; chooseCell(lo, up); // Now choose a point in that cell according to a flat distribution. DimType D = lastDimension(); theLastPoint.resize(D); for ( DimType d = 0; d < D; ++d ) theLastPoint[d] = rnd(lo[d], up[d]); // Calculate the function value in this point theLastF = FncTraits::value(lastFunction(), theLastPoint); if ( theLastF <= 0.0 ) continue; // If we are compensating we require the function value to be // above the previous overestimate of the function. if ( compensating() && lastF() < levels.back().g ) theLastF = 0.0; double w = lastF()/lastCell()->g(); if ( w > 1.0 ) { // If the value was above the overestimate then we must start // the compensation procedure and the curren point is disregarded. --theN; compensate(lo, up); continue; } // Accept the point according to the ratio of the true and // overestimated function value. theSumW[last()] += w; theSumW2[last()] += w*w; ++theNI[last()]; if ( w > rnd() ) { ++theNAcc; return lastFunction(); } } } template inline void ACDCGen::reject() { theSumW[last()] -= 1.0; theSumW2[last()] -= 1.0; --theNAcc; } template inline bool ACDCGen::compensating() { while ( levels.size() && levels.back().lastN < N() ) levels.pop_back(); // Leave all levels which has reached there 'expiry date'. return !levels.empty(); } template inline long ACDCGen::compleft() const { if ( levels.empty() ) return 0; long left = 1; for ( int i = 0, Ni = levels.size(); i < Ni; ++i ) left = max(left, levels[i].lastN - N()); return left; } template inline void ACDCGen:: compensate(const DVector & lo, const DVector & up) { //Save the previous overestimated integral and create a new //compensation level. double i0 = maxInt(); Level level; level.g = lastCell()->g(); // Start the divide-and-conquer algorithm slicing up the selected // cell and specify it as the cell to compensate. Slicer slicer(lastDimension(), *this, lo, up); level.cell = slicer.first; level.index = last(); level.up = slicer.firstup; level.lo = slicer.firstlo; // Now calculate the the new overestimated total integral and // calculate the number of attempted points needed to compensate. double rat = (doMaxInt())/i0; level.lastN = long(N()*rat); // If we are already compensating increase also the previous // compensation levels. for ( size_type i = 0; i < levels.size(); ++i ) levels[i].lastN = long(levels[i].lastN*rat); levels.insert(levels.end(), level); maxsize = std::max(maxsize, levels.size()); } template inline void ACDCGen::eps(double newEps) { theEps = newEps; } template inline void ACDCGen::margin(double newMargin) { theMargin = newMargin; } template inline long ACDCGen::N() const { return theN; } template inline long ACDCGen::n() const { return theNAcc; } template inline typename ACDCGen::size_type ACDCGen::nTry() const { return theNTry; } template inline void ACDCGen::nTry(size_type newNTry) { theNTry = newNTry; } template inline long ACDCGen::maxTry() const { return theMaxTry; } template inline void ACDCGen::maxTry(long newMaxTry) { theMaxTry = newMaxTry; } template inline bool ACDCGen::cheapRandom() const { return useCheapRandom; } template inline void ACDCGen::cheapRandom(bool b) { useCheapRandom = b; } template inline double ACDCGen::maxInt() const { return theSumMaxInts.back(); } template inline double ACDCGen::doMaxInt() { for ( size_type i = 1, imax = functions().size(); i < imax; ++i ) theSumMaxInts[i] = sumMaxInts()[i - 1] + cells()[i]->doMaxInt(); return maxInt(); } template inline int ACDCGen::nBins() const { int sum = 0; for ( size_type i = 1; i < functions().size(); ++i ) sum += cell(i)->nBins(); return sum; } template inline int ACDCGen::depth() const { int mx = 0; for ( size_type i = 1; i < functions().size(); ++i ) mx = max(mx, cell(i)->depth()); return mx; } template inline double ACDCGen::efficiency() const { return N() > 0? double(n())/double(N()): 0.0; } template inline double ACDCGen::integral(FncPtrType f) const { if ( N() <= 0 ) return maxInt(); double sumw = 0.0; for ( size_type i = 1; i < functions().size(); ++i ) if ( functions()[i] == f || !f ) sumw += theSumW[i]; return maxInt()*sumw/N(); } template inline double ACDCGen::integralErr(FncPtrType f) const { if ( N() <= 0 ) return maxInt(); double sumw2 = 0.0; double sumw = 0.0; for ( size_type i = 1; i < functions().size(); ++i ) if ( functions()[i] == f || !f ) { sumw2 += theSumW2[i]; sumw += theSumW[i]; } if ( f ) return maxInt()*sqrt(sumw2)/N(); return maxInt()*sqrt(max(0.,sumw2 - sumw*sumw/N()))/N(); } template inline double ACDCGen::eps() const { return theEps; } template inline double ACDCGen::margin() const { return theMargin; } template inline double ACDCGen::rnd() const { return RndTraits::rnd(theRnd); } template inline double ACDCGen::rnd(double lo, double up) const { return RndTraits::rnd(theRnd, lo, up); } template inline void ACDCGen:: rnd(const DVector & lo, const DVector & up, DVector & r) const { RndTraits::rnd(theRnd, lo.begin(), lo.end(), up.begin(), r.begin()); } template inline void ACDCGen:: rnd(DimType D, DVector & r) const { RndTraits::rnd(theRnd, D, r.begin()); } template inline long ACDCGen::rndInt(long x) const { return RndTraits::rndInt(theRnd, x); } template inline const typename ACDCGen::FncVector & ACDCGen::functions() const { return theFunctions; } template inline typename ACDCGen::FncPtrType ACDCGen::function(size_type i) const { return functions()[i]; } template inline typename ACDCGen::FncPtrType ACDCGen::lastFunction() const { return function(last()); } template inline const typename ACDCGen::DimVector & ACDCGen::dimensions() const { return theDimensions; } template inline DimType ACDCGen::dimension(size_type i) const { return dimensions()[i]; } template inline DimType ACDCGen::lastDimension() const { return dimension(last()); } template inline const typename ACDCGen::CellVector & ACDCGen::cells() const { return thePrimaryCells; } template inline ACDCGenCell * ACDCGen::cell(size_type i) const { return cells()[i]; } template inline ACDCGenCell * ACDCGen::lastPrimary() const { return cell(last()); } template inline const DVector & ACDCGen::sumMaxInts() const { return theSumMaxInts; } template inline typename ACDCGen::size_type ACDCGen::last() const { return theLast; } template inline typename ACDCGen::size_type ACDCGen::size() const { return cells().size() - 1; } template inline ACDCGenCell * ACDCGen::lastCell() const { return theLastCell; } template inline const DVector & ACDCGen::lastPoint() const { return theLastPoint; } template inline double ACDCGen::lastF() const { return theLastF; } template typename ACDCGen::size_type ACDCGen::maxsize = 0; template vector ACDCGen::extractCellInfo() const { vector ret; for ( size_type i = 1; i < cells().size(); ++i ) { DVector lo(dimension(i), 0.0); DVector up(dimension(i), 1.0); cell(i)->extract(lo, up, ret); } return ret; } template ACDCGen::Slicer:: Slicer(DimType Din, ACDCGen & gen, const DVector & loin, const DVector & upin) : D(Din), lo(loin), up(upin), xcl(loin), xcu(upin), xhl(loin), xhu(upin), fhl(Din, 0.0), fhu(Din, 0.0), xsel(gen.lastPoint()), fsel(gen.lastF()), current(gen.lastCell()), first(gen.lastCell()), firstlo(loin), firstup(upin),f(gen.lastFunction()), epsilon(gen.eps()), margin(gen.margin()), minf(0.0), wholecomp(false) { divideandconquer(); } template ACDCGen::Slicer::~Slicer() { // Added for debugging purposes. } template void ACDCGen::Slicer::divideandconquer() { // If the current function value was just a little above the // overestimate, just increase the overestimate of this cell and // we're done. if ( fsel < current->g()*margin ) { current->g(current->g()*margin); return; } // First initialize and slice up the current cell and save the // resulting for the compensation procedure. init(); slice(); if ( !wholecomp ) { first = current; firstlo = lo; firstup = up; } // Find the largest function value in the current cell and as long // as it is above the current overestimate, increase the // overestimate and repeat the slicing. while ( shiftmaxmin() > current->g() ) { current->g(minf*margin); if ( current->g() > fsel ) return; init(); slice(); } } template double ACDCGen::Slicer::shiftmaxmin() { // Find the largest diagonal DVector test = xsel; double scale = 0.0; for ( DimType d = 0; d < D; ++d ) if ( fhl[d] > fsel || fhu[d] > fsel ) scale += 1.0; scale = sqrt(scale); for ( DimType d = 0; d < D; ++d ) { if ( fhl[d] > fsel && fhl[d] > fhu[d] ) test[d] = test[d] + (xhl[d] - test[d])/scale; if ( fhu[d] > fsel && fhu[d] > fhl[d] ) test[d] = test[d] + (xhu[d] - test[d])/scale; } // Find the largest value above overestimate DimType dsel = -1; double x = 0; minf = fsel; for ( DimType d = 0; d < D; ++d ) { // Find the point with the function minimum value above the // current overestimate. minf = std::min(minf, fhl[d]); minf = std::min(minf, fhu[d]); // Find points with the maximum function value and shift the // current point to it. if ( fhu[d] > fsel ) { fsel = fhu[d]; dsel = d; x = xhu[d]; } if ( fhl[d] > fsel ) { fsel = fhl[d]; dsel = d; x = xhl[d]; } } // Check also the largest diagonal // double ftest = (*f)(test); // if ( ftest > fsel ) { // xsel = test; // fsel = ftest; // dsel = -1; // } if ( dsel >= 0 ) xsel[dsel] = x; minf = std::max(minf, current->g()); return fsel; } template void ACDCGen::Slicer::dohalf(DimType d) { xcl[d] = lo[d]; // Find the point closest below the current point in the given // dimension with a function value below the current overestimate, // also find the one furthest away from the current point with a // function value above the current overestimate. Use a crude // iterative mid-point selection. while ( true ) { xhl[d] = (xsel[d] + xcl[d])*0.5; std::swap(xsel[d], xhl[d]); fhl[d] = FncTraits::value(f, xsel); std::swap(xsel[d], xhl[d]); if ( fhl[d] > current->g() ) break; if ( xsel[d] - xcl[d] < epsilon ) break; xcl[d] = xhl[d]; } // Check if the current slicing is worth doing... double cut = ( up[d] - xcl[d] )/( up[d] - lo[d] ); if ( cut < 1.0 - current->g()/fsel && cut > 0.0 ) rateslice.insert(std::make_pair(cut, -1-d)); // Find the point closest above the current point in the given // dimension with a function value below the current overestimate, // also find the one furthest away from the current point with a // function value above the current overestimate. Use a crude // iterative mid-point selection. xcu[d] = up[d]; while ( true ) { xhu[d] = (xsel[d] + xcu[d])*0.5; std::swap(xsel[d], xhu[d]); fhu[d] = FncTraits::value(f, xsel); std::swap(xsel[d], xhu[d]); if ( fhu[d] > current->g() ) break; if ( xcu[d] - xsel[d] < epsilon ) break; xcu[d] = xhu[d]; } // Check if the current slicing is worth doing... cut = ( xcu[d] - lo[d] )/( up[d] - lo[d] ); if ( cut < 1.0 - current->g()/fsel && cut > 0.0 ) rateslice.insert(std::make_pair(cut, 1+d)); } template void ACDCGen::Slicer::init() { for ( DimType d = 0; d < D; ++d ) dohalf(d); } template void ACDCGen::Slicer::slice() { while ( !rateslice.empty() ) { // Perform the slicing which reduces the volume of the cell the // most first. DimType d = rateslice.begin()->second; rateslice.erase(rateslice.begin()); if ( d > 0 ) { // Slice from above. d = d - 1; current->splitme(lo[d], xcu[d], up[d], d); checkdiag(current->upper(), d, xcu[d], up[d]); current = current->lower(); up[d] = xcu[d]; } else { // Slice from below.. d = -d - 1; current->splitme(lo[d], xcl[d], up[d], d); checkdiag(current->lower(), d, lo[d], xcl[d]); current = current->upper(); lo[d] = xcl[d]; } dohalf(d); } } template void ACDCGen::Slicer:: checkdiag(ACDCGenCell * cell, DimType dc, double lod, double upd) { return; // Look at the midpoint in the dc direction in which a cell has been // chopped off. if ( upd - lod <= epsilon ) return; DVector newlo = lo; DVector newup = up; newlo[dc] = lod; newup[dc] = upd; DVector newsel = xsel; newsel[dc] = 0.5*(lod + upd); double newfsel = FncTraits::value(f, newsel); double newfh = newfsel; DVector newxsel = newsel; vector dir(D, 0); // For each other direction look at the mid point between the point // chosen above and the borders of the cell. Save the point which // gives the highest function value. for ( DimType d = 0; d < D; ++d ) { if ( d == dc ) continue; double xdum = 0.5*(newlo[d] + newsel[d]); swap(xdum, newsel[d]); double fh1 = FncTraits::value(f, newsel); if ( fh1 > newfsel ) { newfsel = fh1; newxsel = newsel; } if ( fh1 > newfh ) dir[d] = -1; swap(xdum, newsel[d]); xdum = 0.5*(newsel[d] + newup[d]); swap(xdum, newsel[d]); double fh2 = FncTraits::value(f, newsel); if ( fh2 > newfsel ) { newfsel = fh2; newxsel = newsel; } if ( fh2 > newfh && fh2 > fh1 ) dir[d] = 1; swap(xdum, newsel[d]); } // Now check along the diagonal where we found the highest values. for ( DimType d = 0; d < D; ++d ) { if ( dir[d] == 0 ) continue; if ( dir[d] > 0 ) newsel[d] = 0.5*(newsel[d] + newup[d]); else newsel[d] = 0.5*(newlo[d] + newsel[d]); } newfh = FncTraits::value(f, newsel); if ( newfh > newfsel ) { newfsel = newfh; newxsel = newsel; } if ( newfsel < cell->g() ) return; // If this the highest value is above the overestimate, also this // cell needs to be divided up and conquered. wholecomp = true; Slicer dummy(D, *this, cell, newlo, newxsel, newup, newfsel); } template ACDCGen::Slicer:: Slicer(DimType Din, const Slicer & s, ACDCGenCell * cellin, const DVector & loin, const DVector & xselin, const DVector & upin, double fselin) : D(Din), lo(loin), up(upin), xcl(loin), xcu(upin), xhl(loin), xhu(upin), fhl(Din, 0.0), fhu(Din, 0.0), xsel(xselin), fsel(fselin), current(cellin), first(cellin), firstlo(loin), firstup(upin),f(s.f), epsilon(s.epsilon), margin(s.margin), minf(0.0), wholecomp(false) { divideandconquer(); } template template void ACDCGen::output(POStream & os) const { os << theNAcc << theN << theEps << theMargin << theNTry << theMaxTry << useCheapRandom << theLast << theLastPoint << theLastF << theFunctions.size() << levels.size(); for ( int i = 1, N = theFunctions.size(); i < N; ++i ) os << theFunctions[i] << theDimensions [i] << theSumMaxInts[i] << *thePrimaryCells[i] << theNI[i] << theSumW[i] << theSumW2[i]; os << thePrimaryCells[theLast]->getIndex(theLastCell); for ( int i = 0, N = levels.size(); i < N; ++i ) os << levels[i].lastN << levels[i].g << levels[i].index << levels[i].up << levels[i].lo << thePrimaryCells[levels[i].index]->getIndex(levels[i].cell); } template template void ACDCGen::input(PIStream & is) { clear(); long fsize = 0; long lsize = 0; is >> theNAcc >> theN >> theEps >> theMargin >> theNTry >> theMaxTry >> useCheapRandom >> theLast >> theLastPoint >> theLastF >> fsize >> lsize; while ( --fsize ) { theFunctions.push_back(FncPtrType()); theDimensions.push_back(DimType()); theSumMaxInts.push_back(0.0); theNI.push_back(0); theSumW.push_back(0.0); theSumW2.push_back(0.0); thePrimaryCells.push_back(new ACDCGenCell(0.0)); is >> theFunctions.back() >> theDimensions.back() >> theSumMaxInts.back() >> *thePrimaryCells.back() >> theNI.back() >> theSumW.back() >> theSumW2.back(); } long index = -1; is >> index; theLastCell = thePrimaryCells[theLast]->getCell(index); while ( lsize-- ) { levels.push_back(Level()); is >> levels.back().lastN >> levels.back().g >> levels.back().index >> levels.back().up >> levels.back().lo >> index; levels.back().cell = thePrimaryCells[levels.back().index]->getCell(index); } } } thepeg-1.8.0.orig/ACDC/ACDCTraits.h0000644000175000017500000000615111747772425014676 0ustar sunsun// -*- C++ -*- // // ACDCTraits.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ACDCTraits_H #define ACDCTraits_H namespace ACDCGenerator { /** * ACDCTraitsType is an empty non-polymorphic base class for all * traits classes in ACDCGenerator. */ struct ACDCTraitsType {}; /** * ACDCFncTraits defines the interface to functions to be sampled by * ACDCGen. It only defines one function which defines how the * functions are called. If the default implementation is not * suitable, ACDCFncTraits may be specialized for a function class * implementing a function with the same signature. */ template struct ACDCFncTraits: public ACDCTraitsType { /** * Call a function to be sampled by ACDCGen. * @return (*f)(x). */ static inline double value(const FncPtr & f, const DVector & x) { return (*f)(x); } }; /** * ACDCRandomTraits defines the interface to random number generator * objects to be used by ACDCGen. If this default implementation is * not suitable, ACDCRandomTraits may be specialized for any class as * long as functions with the same signature are present. */ template struct ACDCRandomTraits: public ACDCTraitsType { /** * Return a flat random number in the interval ]0,1[. */ static inline double rnd(Rnd * r) { return r->flat(); } /** * Return a flat random number in the interval ]\a xl,\a xu[. */ static inline double rnd(Rnd * r, double xl, double xu) { return xl + (xu - xl)*rnd(r); } /** * Generate a set of random numbers. * @param r the random generator. * @param l an input iterator giving the lower limit of the interval * of the first requested random number. * @param lend an input iterator marking the end of the range of * requested random numbers. * @param u an input iterator giving the upper limit of the interval * of the first requested random number. * @param res the ouput iterator used to output the random numbers. */ template static inline void rnd(Rnd * r, InputIterator l, InputIterator lend, InputIterator u, OutputIterator res) { for ( ; l != lend; ++l ) *res++ = *l + (*u++ - *l)*rnd(r); } /** * Generate \a D random numbers. The numbers are put into the * OutputIterator \a res. */ template static inline void rnd(Rnd * r, int D, OutputIterator res) { for ( int d = 0; d < D; ++d ) *res++ = rnd(r); } /** * Return true with probability \a x. */ static inline bool rndBool(Rnd * r, double x) { return rnd(r) < x; } /** * Return true with probability \a x(\a x + \a y). */ static inline bool rndBool(Rnd * r, double x, double y) { return rndBool(r, x/(x + y)); } /** * Return a random integer in the interval [0,\a x[. */ static inline long rndInt(Rnd * r, long x) { return long(rnd(r, 0.0, double(x))); } }; } #endif thepeg-1.8.0.orig/ACDC/ACDCGen.h0000644000175000017500000004420711747772425014145 0ustar sunsun// -*- C++ -*- // // ACDCGen.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ACDCGen_H #define ACDCGen_H #include "ACDCGenConfig.h" #include "ACDCTraits.h" #include "ACDCGenCell.h" #include "ThePEG/Utilities/Exception.h" namespace ACDCGenerator { /** * ACDCGen is a general class for sampling multi-dimensional * functions. ACDCGen can sample several functions simultaneously, * selecting different functions according to the relative * probabilities determined by their total integrals. The functions * are sampled on a unit hypercube. Function object of any class can * be used as long as the ACDCFncTraits class is specialized * correctly. ACDCFncTraits can also be used to rescale values in the * unit hypercube to any desired range. ACDCGen needs a random number * generator. Again, random number generators of any class can be used * as long as the ACDCRandomTraits class is specialized correctly. * * To give an unweighted samlpe ACDCGen uses a compensating * algorithm. Before the production sampling begins, the functions are * sampled randomly in the hypercube a user-defined number of times to * find an approximate maxumum value. The hypercube is then divided * into cells each of which have an approximate maximum value of the * function, to enable efficient sampling. The maxima are only * approximate though and, if a function value is found above the * maximum in a cell the ACDCGen will go into a compensating mode. The * cell is then first subdivided further and in the following this * cell will be over-sampled to compensate for that fact that it was * under-sampled before. In this way the probability of obtaining a * biased sample is reduced. Also rather functions with large peaks * are then sampled rather efficiently. Functions with narrow peaks * should, however, be avoided since there is no guarantee that the * peack is actually hit. */ template class ACDCGen { public: /** Template argument typedef. */ typedef Rnd RndType; /** Template argument typedef. */ typedef ACDCRandomTraits RndTraits; /** Template argument typedef. */ typedef FncPtr FncPtrType; /** A vector of cells. */ typedef vector CellVector; /** A vector of function objects. */ typedef vector FncVector; /** A vector of integers. */ typedef vector DimVector; /** The size type of the vectors used. */ typedef DimVector::size_type size_type; /** Template argument typedef. */ typedef ACDCFncTraits FncTraits; public: /** * Standard constructor requiring a random generator object to be * used. */ inline ACDCGen(Rnd * r); /** * Default Constructor. */ inline ACDCGen(); /** * Destructor. */ inline ~ACDCGen(); /** * Add a function of a given dimension, \a dim, according to which * points will be generated. Note that each function, \a f, added * like this will have its own tree of cells. The \a maxrat argument * determines the lowest ratio of values allowed between the cell * with lowest and highest value. If negative it is given by 1/nTry(). */ inline bool addFunction(DimType dim, FncPtrType f, double maxrat = -1.0); /** * Remove all added functions and reset the generator; */ inline void clear(); public: /** * Generate a point, choosing between the different functions * specified. The chosen function is returned, while the generated * point is obtained by the function lastPoint(). */ inline FncPtrType generate(); /** * Reject the last generated point. Only used in the evaluation of * the total integral. */ inline void reject(); /** * Return the last generated point. * @return a vector of doubles, each in the interval ]0,1[. */ inline const DVector & lastPoint() const; /** * Return the value of the last chosen function in the last point. */ inline double lastF() const; /** * Return the function chosen for the last generated point. */ inline FncPtrType lastFunction() const; /** * return the index of the function chosen for the last generated * point. */ inline size_type last() const; public: /** @name Functions influencing the efficiency of the generation. */ //@{ /** * Set the minimum cell size considered for this generation. The * default is the machine limit for double precision times a * hundred. */ inline void eps(double newEps); /** * Set the safety margin used to multiply the highest found function * value in a cell when setting its overestimated value. (Default is * 1.1.) */ inline void margin(double newMargin); /** * Set the number of points (with non-zero function value) used to * initialize the tree of cells to use in the generation for each * function. */ inline void nTry(size_type newNTry); /** * Set the maximum number of attempts to generate a phase space * point, or to find non-zero points in the initialization. */ inline void maxTry(long); //@} public: /** @name Information about the current generation. */ //@{ /** * Return the current Monte Carlo estimate of the integral of the * specified function (or all functions if NULL) over the unit volume. */ inline double integral(FncPtrType f = FncPtrType()) const; /** * Return the error on the current Monte Carlo estimate of the * integral of the specified function (or all functions if NULL) * over the unit volume. */ inline double integralErr(FncPtrType f = FncPtrType()) const; /** * The number of accepted points so far. */ inline long n() const; /** * The number of calls to generate() so far. Note that the number of * calls to the specified functions may be larger. It is up to the * user to keep track of those. */ inline long N() const; /** * The ratio of the number of accepted and number of tried points * n()/N(); */ inline double efficiency() const; /** * Return the number of active cells created so far. */ inline int nBins() const; /** * Return the maximum depth of any tree of cells used. */ inline int depth() const; /** * Return the current overestimation of the full integral of all * specified functions over the unit volume. */ inline double maxInt() const; //@} /** @name Access to member variables. */ //@{ /** * The minimum cell size considered for this generation. */ inline double eps() const; /** * The safety margin used to multiply the highest found function * value in a cell when setting its overestimated value. */ inline double margin() const; /** * The number of points used to initialize the tree of cells to use * in the generation. */ inline size_type nTry() const; /** * The maximum number of attempts to generate a phase space point, * or to find non-zero points in the initialization. */ inline long maxTry() const; /** * Returns true if generating random numbers are so cheap that a new * one can be thrown everytime a sub-cell is chosen. Otherwise * random numbers used for this will be reused. */ inline bool cheapRandom() const; /** * The number of functions used. */ inline size_type size() const; /** * Returns true if the generator is currently in a state of * compensating an erroneous overestimation of one of the specified * functions. If so, the integral and the generated points are not * statistically correct. */ inline bool compensating(); /** * Return an estimate of how many points need to be sampled before * the generator finishes compensating. */ inline long compleft() const; /** * Return a vector with information about all cells. */ vector extractCellInfo() const; //@} public: /** @name Functions related to the random number generator. */ //@{ /** * Set to true if generating random numbers are so cheap that a new * one can be thrown everytime a sub-cell is chosen. Otherwise * random numbers used for this will be reused. */ inline void cheapRandom(bool b); /** * Set a new random number generator. */ inline void setRnd(Rnd * r); /** * Double precision number in the interval ]0,1[. */ inline double rnd() const; /** * Double precision number in the interval ]lo,up[. */ inline double rnd(double lo, double up) const; /** * Fill the r vector with doubles r[i] in the interval ]lo[i],up[i][. */ inline void rnd(const DVector & lo, const DVector & up, DVector & r)const; /** * Fill the D first elements in the r vector with doubles in the * interval ]0,1[. */ inline void rnd(DimType D, DVector & r) const; /** * Integer in the interval [0,x[ */ inline long rndInt(long x) const; //@} public: /** * This function is to be used in ThePEG for output to * a persistent stream and will not work properly for normal * ostreams. */ template void output(POStream &) const; /** * This function is to be used in ThePEG for input from a persistent * stream and will not work properly for normal istreams. */ template void input(PIStream &); private: /** * Calculate the overestimated integral for all functions. */ inline double doMaxInt(); /** * Return the vector of functions. */ inline const FncVector & functions() const; /** * Return the i'th function. */ inline FncPtrType function(size_type i) const; /** * Return a vector with the dimensions of all functions. */ inline const DimVector & dimensions() const; /** * Return the dimension of the i'th function. */ inline DimType dimension(size_type i) const; /** * Return the dimension of the function chosen for the last * generated point. */ inline DimType lastDimension() const; /** * Return the roots of all cell trees. */ inline const CellVector & cells() const; /** * Return the root cell for the i'th function. */ inline ACDCGenCell * cell(size_type i) const; /** * Return the root cell for the function chosen for the last * generated point. */ inline ACDCGenCell * lastPrimary() const; /** * Return a vector with the incremental sum of overestimated * integrals for each function. */ inline const DVector & sumMaxInts() const; /** * Return the cell chosen for the last generated point. */ inline ACDCGenCell * lastCell() const; /** * Choose a function according to its overestimated integral and * choose a cell to generate a point in. */ inline void chooseCell(DVector & lo, DVector & up); /** * Start the compensation procedure for the last chosen cell when a * function velue has been found which exceeds the previous * overestimation. */ inline void compensate(const DVector & lo, const DVector & up); private: /** * The random number generator to be used for this Generator. */ RndType * theRnd; /** * The number of accepted points (weight > 0) so far. */ long theNAcc; /** * The number of attempted points so far. */ long theN; /** * The number of attempts per function so far. */ vector theNI; /** * The summed weights per function so far. */ DVector theSumW; /** * The summed squared weights per function so far. */ DVector theSumW2; /** * The smallest possible division allowed. */ double theEps; /** * The factor controlling the loss of efficiency when compensating. */ double theMargin; /** * The number of points to use to find initial average. */ size_type theNTry; /** * The maximum number of attempts to generate a phase space point, * or to find non-zero points in the initialization. */ long theMaxTry; /** * True if generating random numbers are so cheap that a new one can * be thrown everytime a sub-cell is chosen. Otherwise random * numbers used for this will be reused. */ bool useCheapRandom; /** * A vector of functions. */ FncVector theFunctions; /** * The dimensions of the functions in theFunctions. */ DimVector theDimensions; /** * The root of the cell tree for the functions in theFunctions. */ CellVector thePrimaryCells; /** * The accumulated sum of overestimated integrals of the functions * in theFunctions. */ DVector theSumMaxInts; /** * The last index chosen */ size_type theLast; /** * The last cell chosen. */ ACDCGenCell * theLastCell; /** * The last point generated. */ DVector theLastPoint; /** * The function value of the last point. */ double theLastF; /** * A helper struct representing a level of compensation. */ struct Level { /** * The number of attempts after which this level disapprears. */ long lastN; /** * The previous max value in the Cell to compensate. */ double g; /** * The cell which is being compensated. */ ACDCGenCell * cell; /** * The index corresponding to the cell being compensated. */ size_type index; /** * The integration limits for the cell being compensated. */ DVector up; /** * The integration limits for the cell being compensated. */ DVector lo; }; /** * A vector (stack) of levels */ typedef vector LevelVector; /** * The vector (stack) of levels */ LevelVector levels; /** * This is a help struct to perform the divide-and-conquer slicing * of cells before starting the compensation procedure. */ struct Slicer { /** * The constructor takes the number of dimensions of the function * approximated by the current cell, the ACDCGen object * controlling the generation and the lower-left and upper-right * corners of the cell to be sliced. */ Slicer(DimType, ACDCGen &, const DVector &, const DVector &); /** * The constructor used internally when diagonally chopped-off * cells need to be sliced themselves. */ Slicer(DimType Din, const Slicer & s, ACDCGenCell * cellin, const DVector & loin, const DVector & xselin, const DVector & upin, double fselin); /** * Destructor. */ ~Slicer(); /** * Called from both constructors to do the actual work. */ void divideandconquer(); /** * Initialize the procedure, finding the slicing points around the * current point */ void init(); /** * Do the slicing and increase the overestimate of the function in * the resulting cell. If a point with a higher function value has * been found repeat the slicing around that point etc. */ void slice(); /** * After slicing a cell, find the maximum function value found in * the resulting cell. Also set the minimum value found. */ double shiftmaxmin(); /** * Find the slice point of the current cell in the direction given. */ void dohalf(DimType); /** * If split is in more than one dimensions check the overestimate * for the chopped-off cell. */ void checkdiag(ACDCGenCell * cell, DimType d, double lod, double upd); /** * The dimension of the cell to be sliced. */ DimType D; /** * The lower-left corner of the current cell. */ DVector lo; /** * The upper-right corner of the current cell. */ DVector up; /** * The lower-left point found closest to the current * point which gives a function value below the overestimate. */ DVector xcl; /** * The upper-right point found closest to the current point which * gives a function value below the overestimate. */ DVector xcu; /** * The lower-left point furthest away from the * current point which gives a function value abov the * overestimate. */ DVector xhl; /** * The upper-right point furthest away from the * current point which gives a function value abov the * overestimate. */ DVector xhu; /** * The function values found for the xhl point. */ DVector fhl; /** * The function values found for the xhu point. */ DVector fhu; /** * The current point around which we are slicing. */ DVector xsel; /** * The function value in the current point. */ double fsel; /** * The current cell. */ ACDCGenCell * current; /** * The cell which resulted from the first slicing procedure. This * is the first one to get an increased overestimate and is the * one to be compensated. All other cells with increased * overestimates are sub-cells to this one */ ACDCGenCell * first; /** * The lower-left corner of the 'first' cell. */ DVector firstlo; /** * The upper-right corner of the 'first' cell. */ DVector firstup; /** * A pointer to the function to be used. */ FncPtr f; /** * The epsilon() value obtained from the controlling * ACDCGen object. */ double epsilon; /** * The margin() value obtained from the controlling * ACDCGen object. */ double margin; /** * The dimensions to slice in rated by the resulting fractional * volume of the resulting slice. If the dimension is negative it * means that the cell should be slized from below. */ multimap rateslice; /** * The minimu function value found in the current sliced cell (set * by shiftmaxmin()). */ double minf; /** * If true, then the whole original cell should compensated in the * continued generation. */ bool wholecomp; }; public: /** The maximum recursion depth of the compensation so far. */ static size_type maxsize; private: /** * Copy constructor is private and not implemented. */ ACDCGen(const ACDCGen &); /** * Assignment is private and not implemented. */ ACDCGen & operator=(const ACDCGen &); }; } #include "ACDCGen.icc" #endif thepeg-1.8.0.orig/ACDC/ACDCGenConfig.h0000644000175000017500000000272111747772425015266 0ustar sunsun// -*- C++ -*- // // ACDCGenConfig.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ACDCGenConfig_H #define ACDCGenConfig_H /** @file ACDCGenConfig.h is the main config header file for * ACDCGen. Do not make changes in this file. If you need to modify * anything, edit a copy of the file which can be included instead of * this file using the macro ACDC_ALT_CONFIG. * * ACDCGen uses some classes and functions from the standard * library. These are here imported into the ACDCGenerator * namespace. If alternative classes with the same API are needed * these should be imported with the same name into the namespace in * the ACDC_ALT_CONFIG file. */ #ifndef ACDC_ALT_CONFIG #include #include #include /** The namespace in which all ACDCGen classes are defined. */ namespace ACDCGenerator { using std::vector; using std::multimap; using std::numeric_limits; using std::map; using std::max; using std::min; using std::swap; using std::make_pair; /** The integer type used to represent the dimension of the a * functions to be sampled- */ typedef short DimType; } #else #include ACDC_ALT_CONFIG #endif namespace ACDCGenerator { /** A vector of doubles. */ typedef vector DVector; } #endif thepeg-1.8.0.orig/ACDC/ACDCGenCell.h0000644000175000017500000001534211747772425014743 0ustar sunsun// -*- C++ -*- // // ACDCGenCell.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ACDCGenCell_H #define ACDCGenCell_H #include "ACDCGenConfig.h" #include "ACDCTraits.h" namespace ACDCGenerator { struct ACDCGenCellInfo; /** ACDCGenCell is the class representing a generation cell in ACDCGen. */ class ACDCGenCell { public: /** * Constructor taking the maximum value as argument. */ inline ACDCGenCell(double newG); /** * Constructor taking the maximum value and the volume as argument. */ inline ACDCGenCell(double newG, double newV); /** * The destuctor will also delete all child cells. */ inline ~ACDCGenCell(); /** * Choose a cell recursively according to their relative * overestimated integrals. * @param lo the lower-left corner of the chosen cell. * @param up the upper-right corner of the chosen cell. * @param rnd the random generator object used to throw dice to * choose sub-cell. * @return a pointer to the chosen cell. */ template inline ACDCGenCell * generate(DVector & lo, DVector & up, RndType * rnd); /** * Choose a cell recursively according to their relative * overestimated integrals. * @param lo the lower-left corner of the chosen cell. * @param up the upper-right corner of the chosen cell. * @param rndv a pre-generated set of random numbers (one for each * dimension) used to choose sub-cell and then rescales that random * number to be reused by the sub-cell. * @return a pointer to the chosen cell. */ inline ACDCGenCell * generate(DVector & lo, DVector & up, DVector & rndv); /** * Find a cell. For a given phase space point, \a x, find the * corresponding cell. Afterwards, the \a up and \a lo vectors will * contain the upper-right and lower-left corners of the chosen * cell. */ inline ACDCGenCell * getCell(DVector & lo, const DVector & x, DVector & up); /** * Smooth out the levels. If one cell has an overestimated integral * which is less than \a frac of the adjacent one, rescale it to * avoid situations where it is never sampled. */ inline void smooth(double frac); /** * Returns true if this cell has been split. */ inline bool isSplit() const; /** * Recalculate (recursively) the overestimated integral for this * cell (and of the sub-cells) and return it. Optionally \a rescale * the overestimated integral. */ inline double doMaxInt(double rescale = 1.0); /** * Return the last calculated the overestimated integral for this * cell. */ inline double maxInt() const; /** * Split this cell into two. The cell is split along the \a newDim * direction, where the lower and upper limit is given by \a lo and * \a up and the point of division is given by \a newDiv. */ inline void splitme(double lo, double newDiv, double up, DimType newDim); /** * Set a new overestimated maximum function value in this cell. */ inline void g(double newG); /** * Return the overestimated maximum function value in this cell. */ inline double g() const; /** * Return the volume of this cell. */ inline double v() const; /** * Return the direction in which it has been split. Return -1 if it * has not been split. */ inline DimType dim() const; /** * Return the point of division in the dim() direction. Return -1.0 * if it has not been split. */ inline double div() const; /** * Return the upper sub-cell. Return null if it has not been split. */ inline ACDCGenCell * upper() const; /** * Return the lower sub-cell. Return null if it has not been split. */ inline ACDCGenCell * lower() const; /** * Return the number of cells in this sub-tree which have not been * split. */ inline int nBins() const; /** * Return the maximum depth of this sub-tree. */ inline int depth() const; /** * Append ACDCGenCellInfo objects describing this subtree to a given * vector. * @param lo the lower-left corner of this cell. * @param up the upper-right corner of this cell. * @param v the vector where the ACDCGenCellInfo objects will be appended. */ inline void extract(DVector & lo, DVector & up, vector & v) const; /** * Get the index of the given cell. */ inline long getIndex(const ACDCGenCell * c) const; /** * Helper function for getIndex(const ACDCGenCell *) with an extra * argument to use as counter. */ inline long getIndex(const ACDCGenCell * c, long & indx) const; /** * Return the cell corresponding to the given index \a i. */ inline ACDCGenCell * getCell(long i); /** * Helper function for getCell(long) with an extra argument to use as * counter. */ inline ACDCGenCell * getCell(long i, long & indx); public: /** * If the cell has not been split this is the overestimated maximum * function value in this cell. Otherwise it is the weighted * average of the sub-cells values. */ double theG; /** * The volume of this cell. */ double theV; /** * Pointers to the upper sub-cell. */ ACDCGenCell * theUpper; /** * Pointers to the lower sub-cell. */ ACDCGenCell * theLower; /** * The point of division in the dim() direction. */ double theDivision; /** * The direction in which it has been split. */ DimType theSplitDimension; private: /** * Default constructor is private and not implemented. */ ACDCGenCell(); /** * Copy constructor is private and not implemented. */ ACDCGenCell(const ACDCGenCell &); /** * Assignment is private and not implemented. */ ACDCGenCell & operator=(const ACDCGenCell &); }; /** * This is a class describing cells to the outside world to be used * for debugging purposes. They only make sense if extracted with the * ACDCGenCell::extract function. */ struct ACDCGenCellInfo { /** the integer used for indices. */ typedef vector::size_type Index; /** * The overestimated maximum function value of this cell. */ double g; /** * The volume of the corresponding cell. */ double v; /** * The upper-right corner of the corresponding cell. */ DVector up; /** * The lower-left corner of the corresponding cell. */ DVector lo; /** * The index of the upper sub-cells in the vector in which the * corresponding cell was inserted. */ Index iup; /** * The index of the lower sub-cell in the vector in which the * corresponding cell was inserted. */ Index ilo; }; } #include "ACDCGenCell.icc" #endif thepeg-1.8.0.orig/ACDC/Makefile.in0000644000175000017500000003314711756366733014717 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = ACDC DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ DOCFILES = ACDCGenConfig.h ACDCGen.h ACDCGenCell.h ACDCTraits.h INCLUDEFILES = $(DOCFILES) ACDCGen.icc ACDCGenCell.icc noinst_HEADERS = $(INCLUDEFILES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu ACDC/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu ACDC/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(HEADERS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist ctags distclean distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/ACDC/ACDCGenCell.icc0000644000175000017500000001305611747772425015252 0ustar sunsun// -*- C++ -*- // // ACDCGenCell.icc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // namespace ACDCGenerator { inline ACDCGenCell::ACDCGenCell(double newG) : theG(newG), theV(1.0), theUpper(0), theLower(0), theDivision(-1.0), theSplitDimension(-1) {} inline ACDCGenCell:: ACDCGenCell(double newG, double newV) : theG(newG), theV(newV), theUpper(0), theLower(0), theDivision(-1.0), theSplitDimension(-1) {} inline ACDCGenCell::~ACDCGenCell() { if ( isSplit() ) { delete theUpper; delete theLower; } } template inline ACDCGenCell * ACDCGenCell:: generate(DVector & lo, DVector & up, RndType * rnd) { if ( isSplit() ) { if ( ACDCRandomTraits:: rndBool(rnd, upper()->maxInt(), lower()->maxInt()) ) { lo[dim()] = div(); return upper()->generate(lo, up, rnd); } else { up[dim()] = div(); return lower()->generate(lo, up, rnd); } } return this; } inline ACDCGenCell * ACDCGenCell:: generate(DVector & lo, DVector & up, DVector & rndv) { if ( isSplit() ) { double r = lower()->maxInt()/maxInt(); if ( rndv[dim()] > r ) { lo[dim()] = div(); rndv[dim()] = (rndv[dim()] - r)/(1.0 - r); return upper()->generate(lo, up, rndv); } else { up[dim()] = div(); rndv[dim()] = rndv[dim()]/r; return lower()->generate(lo, up, rndv); } } return this; } inline ACDCGenCell * ACDCGenCell:: getCell(DVector & lo, const DVector & x, DVector & up) { if ( isSplit() ) { if ( x[dim()] > div() ) { lo[dim()] = div(); return upper()->getCell(lo, x, up); } else { up[dim()] = div(); return lower()->getCell(lo, x, up); } } else return this; } inline void ACDCGenCell:: splitme(double lo, double newDiv, double up, DimType newDim) { theSplitDimension = newDim; theDivision = newDiv; double frac = (up - div())/(up - lo); theUpper = new ACDCGenCell(g(), v()*frac); frac = (div() - lo)/(up - lo); theLower = new ACDCGenCell(g(), v()*frac); } inline bool ACDCGenCell::isSplit() const { return upper(); } inline double ACDCGenCell::doMaxInt(double scale) { if ( isSplit() ) theG = (upper()->doMaxInt() + lower()->doMaxInt())/v(); else theG *= scale; return maxInt(); } inline void ACDCGenCell::smooth(double frac) { if ( !isSplit() ) return; upper()->smooth(frac); lower()->smooth(frac); if ( upper()->maxInt() < lower()->maxInt()*frac && upper()->maxInt() > 0.0 ) upper()->doMaxInt(lower()->maxInt()*frac/upper()->maxInt()); else if ( lower()->maxInt() < upper()->maxInt()*frac && lower()->maxInt() > 0.0 ) lower()->doMaxInt(upper()->maxInt()*frac/lower()->maxInt()); doMaxInt(); } inline double ACDCGenCell::maxInt() const { return g()*v(); } inline void ACDCGenCell::g(double newG) { theG = newG; } inline int ACDCGenCell::nBins() const { return isSplit()? upper()->nBins() + lower()->nBins(): 1; } inline int ACDCGenCell::depth() const { return isSplit()? std::max(upper()->depth(), lower()->depth()) + 1: 1; } inline double ACDCGenCell::g() const { return theG; } inline double ACDCGenCell::v() const { return theV; } inline double ACDCGenCell::div() const { return theDivision; } inline DimType ACDCGenCell::dim() const { return theSplitDimension; } inline ACDCGenCell * ACDCGenCell::upper() const { return theUpper; } inline ACDCGenCell * ACDCGenCell::lower() const { return theLower; } inline void ACDCGenCell:: extract(DVector & lo, DVector & up, vector & out) const { // First add this cell which gets index isave. ACDCGenCellInfo::Index isave = out.size(); out.push_back(ACDCGenCellInfo()); out.back().g = g(); out.back().v = v(); out.back().up = up; out.back().lo = lo; out.back().iup = 0; out.back().ilo = 0; if ( isSplit() ) { // If split add the upper cell. out[isave].iup = out.size(); double save = lo[dim()]; lo[dim()] = div(); upper()->extract(lo, up, out); lo[dim()] = save; // Then add the lower cell. out[isave].ilo = out.size(); save = up[dim()]; up[dim()] = div(); lower()->extract(lo, up, out); up[dim()] = save; } } template inline OStream & operator<<(OStream & os, const ACDCGenCell & c) { os << c.dim() << c.div() << c.g() << c.v(); if ( c.dim() < 0 ) return os; return os << *c.upper() << *c.lower(); } template inline IStream & operator>>(IStream & is, ACDCGenCell & c) { is >> c.theSplitDimension >> c.theDivision >> c.theG >> c.theV; if ( c.dim() < 0 ) return is; c.theUpper = new ACDCGenCell(0.0); c.theLower = new ACDCGenCell(0.0); return is >> *c.theUpper >> *c.theLower; } inline long ACDCGenCell::getIndex(const ACDCGenCell * c) const { long indx = -1; return getIndex(c, indx); } inline long ACDCGenCell::getIndex(const ACDCGenCell * c, long & indx) const { ++indx; if ( c == this ) return indx; if ( isSplit() ) { long i = upper()->getIndex(c, indx); if ( i >= 0 ) return i; return lower()->getIndex(c, indx); } return -1; } inline ACDCGenCell * ACDCGenCell::getCell(long i) { long indx = -1; return getCell(i, indx); } inline ACDCGenCell * ACDCGenCell::getCell(long i, long & indx) { ++indx; if ( i == indx ) return this; if ( isSplit() ) { ACDCGenCell * tmp = upper()->getCell(i, indx); if ( tmp ) return tmp; return lower()->getCell(i, indx); } return 0; } } thepeg-1.8.0.orig/ACDC/Makefile.am0000644000175000017500000000023111747772425014671 0ustar sunsunDOCFILES = ACDCGenConfig.h ACDCGen.h ACDCGenCell.h ACDCTraits.h INCLUDEFILES = $(DOCFILES) ACDCGen.icc ACDCGenCell.icc noinst_HEADERS= $(INCLUDEFILES) thepeg-1.8.0.orig/Vectors/0000755000175000017500000000000011756460366013572 5ustar sunsunthepeg-1.8.0.orig/Vectors/LorentzVector.fh0000644000175000017500000000027711747772425016741 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_LorentzVector_FH #define ThePEG_LorentzVector_FH namespace ThePEG { template class LorentzVector; } #endif /* ThePEG_LorentzVector_FH */ thepeg-1.8.0.orig/Vectors/SpinOneLorentzRotation.cc0000644000175000017500000001551711747772425020565 0ustar sunsun// -*- C++ -*- // // SpinOneLorentzRotation.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LorentzRotation class. // #include "SpinOneLorentzRotation.h" using namespace ThePEG; SpinOneLorentzRotation:: SpinOneLorentzRotation(double xx, double xy, double xz, double xt, double yx, double yy, double yz, double yt, double zx, double zy, double zz, double zt, double tx, double ty, double tz, double tt) : matrix_(16) { xx_() = xx; xy_() = xy; xz_() = xz; xt_() = xt; yx_() = yx; yy_() = yy; yz_() = yz; yt_() = yt; zx_() = zx; zy_() = zy; zz_() = zz; zt_() = zt; tx_() = tx; ty_() = ty; tz_() = tz; tt_() = tt; } bool SpinOneLorentzRotation::isIdentity() const { return 1.0 == xx() && 0.0 == xy() && 0.0 == xz() && 0.0 == xt() && 0.0 == yx() && 1.0 == yy() && 0.0 == yz() && 0.0 == yt() && 0.0 == zx() && 0.0 == zy() && 1.0 == zz() && 0.0 == zt() && 0.0 == tx() && 0.0 == ty() && 0.0 == tz() && 1.0 == tt(); } SpinOneLorentzRotation SpinOneLorentzRotation::inverse() const { return SpinOneLorentzRotation( xx(), yx(), zx(),-tx(), xy(), yy(), zy(),-ty(), xz(), yz(), zz(),-tz(), -xt(),-yt(),-zt(), tt()); } // output operator std::ostream & SpinOneLorentzRotation::print( std::ostream & os) const { os << "\n [ ( " << std::setw(14) << std::setprecision(6) << xx() << " " << std::setw(14) << std::setprecision(6) << xy() << " " << std::setw(14) << std::setprecision(6) << xz() << " " << std::setw(14) << std::setprecision(6) << xt() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << yx() << " " << std::setw(14) << std::setprecision(6) << yy() << " " << std::setw(14) << std::setprecision(6) << yz() << " " << std::setw(14) << std::setprecision(6) << yt() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << zx() << " " << std::setw(14) << std::setprecision(6) << zy() << " " << std::setw(14) << std::setprecision(6) << zz() << " " << std::setw(14) << std::setprecision(6) << zt() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << tx() << " " << std::setw(14) << std::setprecision(6) << ty() << " " << std::setw(14) << std::setprecision(6) << tz() << " " << std::setw(14) << std::setprecision(6) << tt() << ") ]\n"; return os; } SpinOneLorentzRotation & SpinOneLorentzRotation:: setBoost (double bx, double by, double bz, double gamma) { double beta2 = sqr(bx) + sqr(by) + sqr(bz); if (beta2 >= 1.0) { throw Exception() << "Invalid boost (" << bx << ',' << by << ',' << bz << ") in SpinOneLorentzRotatio::setBoost" << Exception::eventerror; } if(gamma<0.) gamma = 1.0 / sqrt((1.-bz)*(1.+bz)-sqr(bx)-sqr(by)); double bgamma = sqr(gamma) / (1.0 + gamma); xx_() = 1.0 + bgamma * bx * bx; yy_() = 1.0 + bgamma * by * by; zz_() = 1.0 + bgamma * bz * bz; xy_() = yx_() = bgamma * bx * by; xz_() = zx_() = bgamma * bx * bz; yz_() = zy_() = bgamma * by * bz; xt_() = tx_() = gamma * bx; yt_() = ty_() = gamma * by; zt_() = tz_() = gamma * bz; tt_() = gamma; return *this; } SpinOneLorentzRotation & SpinOneLorentzRotation::setRotate(double delta, const Axis & axis) { double sinDelta = sin(delta), cosDelta = cos(delta); double oneMinusCosDelta = 1.0 - cosDelta; Axis u = unitVector(axis); double uX = u.x(); double uY = u.y(); double uZ = u.z(); double rxx = oneMinusCosDelta * uX * uX + cosDelta; double rxy = oneMinusCosDelta * uX * uY - sinDelta * uZ; double rxz = oneMinusCosDelta * uX * uZ + sinDelta * uY; double ryx = oneMinusCosDelta * uY * uX + sinDelta * uZ; double ryy = oneMinusCosDelta * uY * uY + cosDelta; double ryz = oneMinusCosDelta * uY * uZ - sinDelta * uX; double rzx = oneMinusCosDelta * uZ * uX - sinDelta * uY; double rzy = oneMinusCosDelta * uZ * uY + sinDelta * uX; double rzz = oneMinusCosDelta * uZ * uZ + cosDelta; xx_() = rxx; xy_() = rxy; xz_() = rxz; xt_() = 0.0; yx_() = ryx; yy_() = ryy; yz_() = ryz; yt_() = 0.0; zx_() = rzx; zy_() = rzy; zz_() = rzz; zt_() = 0.0; tx_() = 0.0; ty_() = 0.0; tz_() = 0.0; tt_() = 1.0; return *this; } SpinOneLorentzRotation & SpinOneLorentzRotation::setRotateX(double delta) { double sinDelta = sin(delta), cosDelta = cos(delta); double ryy = cosDelta, ryz = -sinDelta; double rzy = sinDelta, rzz = cosDelta; xx_() = 1.0; xy_() = 0.0; xz_() = 0.0; xt_() = 0.0; yx_() = 0.0; yy_() = ryy; yz_() = ryz; yt_() = 0.0; zx_() = 0.0; zy_() = rzy; zz_() = rzz; zt_() = 0.0; tx_() = 0.0; ty_() = 0.0; tz_() = 0.0; tt_() = 1.0; return *this; } SpinOneLorentzRotation & SpinOneLorentzRotation::setRotateY(double delta) { double sinDelta = sin(delta), cosDelta = cos(delta); double rxx = cosDelta, rxz = sinDelta; double rzx = -sinDelta, rzz = cosDelta; xx_() = rxx; xy_() = 0.0; xz_() = rxz; xt_() = 0.0; yx_() = 0.0; yy_() = 1.0; yz_() = 0.0; yt_() = 0.0; zx_() = rzx; zy_() = 0.0; zz_() = rzz; zt_() = 0.0; tx_() = 0.0; ty_() = 0.0; tz_() = 0.0; tt_() = 1.0; return *this; } SpinOneLorentzRotation & SpinOneLorentzRotation::setRotateZ(double delta) { double sinDelta = sin(delta), cosDelta = cos(delta); double rxx = cosDelta, rxy = -sinDelta; double ryx = sinDelta, ryy = cosDelta; xx_() = rxx; xy_() = rxy; xz_() = 0.0; xt_() = 0.0; yx_() = ryx; yy_() = ryy; yz_() = 0.0; yt_() = 0.0; zx_() = 0.0; zy_() = 0.0; zz_() = 1.0; zt_() = 0.0; tx_() = 0.0; ty_() = 0.0; tz_() = 0.0; tt_() = 1.0; return *this; } SpinOneLorentzRotation SpinOneLorentzRotation::operator*(const SpinOneLorentzRotation & b) const { return SpinOneLorentzRotation (xx()*b.xx() + xy()*b.yx() + xz()*b.zx() + xt()*b.tx(), xx()*b.xy() + xy()*b.yy() + xz()*b.zy() + xt()*b.ty(), xx()*b.xz() + xy()*b.yz() + xz()*b.zz() + xt()*b.tz(), xx()*b.xt() + xy()*b.yt() + xz()*b.zt() + xt()*b.tt(), yx()*b.xx() + yy()*b.yx() + yz()*b.zx() + yt()*b.tx(), yx()*b.xy() + yy()*b.yy() + yz()*b.zy() + yt()*b.ty(), yx()*b.xz() + yy()*b.yz() + yz()*b.zz() + yt()*b.tz(), yx()*b.xt() + yy()*b.yt() + yz()*b.zt() + yt()*b.tt(), zx()*b.xx() + zy()*b.yx() + zz()*b.zx() + zt()*b.tx(), zx()*b.xy() + zy()*b.yy() + zz()*b.zy() + zt()*b.ty(), zx()*b.xz() + zy()*b.yz() + zz()*b.zz() + zt()*b.tz(), zx()*b.xt() + zy()*b.yt() + zz()*b.zt() + zt()*b.tt(), tx()*b.xx() + ty()*b.yx() + tz()*b.zx() + tt()*b.tx(), tx()*b.xy() + ty()*b.yy() + tz()*b.zy() + tt()*b.ty(), tx()*b.xz() + ty()*b.yz() + tz()*b.zz() + tt()*b.tz(), tx()*b.xt() + ty()*b.yt() + tz()*b.zt() + tt()*b.tt()); } thepeg-1.8.0.orig/Vectors/ThreeVector.h0000644000175000017500000002305211747772425016201 0ustar sunsun// -*- C++ -*- // // ThreeVector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ThreeVector_H #define ThePEG_ThreeVector_H /** * @file ThreeVector.h contains the ThreeVector class. ThreeVector can be * created with any unit type as template parameter. All basic * mathematical operations are supported, as well as a subset of the * CLHEP Vector3 functionality. */ #include "ThreeVector.fh" #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Utilities/UnitIO.h" #include namespace ThePEG { /** * A 3-component vector. It can be created with any unit type * as template parameter. All basic mathematical operations are * supported, as well as a subset of the CLHEP Vector3 * functionality. */ template class ThreeVector { private: /// Value squared typedef typename BinaryOpTraits::MulT Value2; /// Value to the 4th power typedef typename BinaryOpTraits::MulT Value4; public: /** @name Constructors. */ //@{ ThreeVector() : theX(), theY(), theZ() {} ThreeVector(Value x, Value y, Value z) : theX(x), theY(y), theZ(z) {} template ThreeVector(const ThreeVector & v) : theX(v.x()), theY(v.y()), theZ(v.z()) {} //@} public: /// @name Component access methods. //@{ Value x() const { return theX; } Value y() const { return theY; } Value z() const { return theZ; } //@} /// @name Component set methods. //@{ void setX(Value x) { theX = x; } void setY(Value y) { theY = y; } void setZ(Value z) { theZ = z; } //@} public: /// Squared magnitude \f$x^2+y^2+z^2\f$. Value2 mag2() const { return sqr(x()) + sqr(y()) + sqr(z()); } /// Magnitude \f$\sqrt{x^2+y^2+z^2}\f$. Value mag() const { return sqrt(mag2()); } /// Squared transverse component \f$x^2+y^2\f$. Value2 perp2() const { return sqr(x()) + sqr(y()); } /// Transverse component \f$\sqrt{x^2+y^2}\f$. Value perp() const { return sqrt(perp2()); } /// Dot product. template typename BinaryOpTraits::MulT dot(const ThreeVector & a) const { return x()*a.x() + y()*a.y() + z()*a.z(); } /// Squared transverse component with respect to the given axis. template Value2 perp2(const ThreeVector & p) const { typedef typename BinaryOpTraits::MulT pSqType; const pSqType pMag2 = p.mag2(); assert( pMag2 > pSqType() ); typename BinaryOpTraits::MulT ss = this->dot(p); Value2 ret = mag2() - sqr(ss)/pMag2; if ( ret <= Value2() ) ret = Value2(); return ret; } /// Transverse component with respect to the given axis. template Value perp(const ThreeVector & p) const { return sqrt(perp2(p)); } /// @name Spherical coordinates. //@{ /// Polar angle. double theta() const { assert(!(x() == Value() && y() == Value() && z() == Value())); return atan2(perp(),z()); } /// Azimuthal angle. double phi() const { return atan2(y(),x()); } /// Set the polar angle. void setTheta(double th) { double ma = mag(); double ph = phi(); setX(ma*sin(th)*cos(ph)); setY(ma*sin(th)*sin(ph)); setZ(ma*cos(th)); } /// Set the azimuthal angle. void setPhi(double ph) { double xy = perp(); setX(xy*cos(ph)); setY(xy*sin(ph)); } //@} /// Parallel vector with unit length. ThreeVector unit() const { Value2 mg2 = mag2(); assert(mg2 > Value2()); Value mg = sqrt(mg2); return ThreeVector(x()/mg, y()/mg, z()/mg); } /// Orthogonal vector. ThreeVector orthogonal() const { Value xx = abs(x()); Value yy = abs(y()); Value zz = abs(z()); if (xx < yy) { return xx < zz ? ThreeVector(Value(),z(),-y()) : ThreeVector(y(),-x(),Value()); } else { return yy < zz ? ThreeVector(-z(),Value(),x()) : ThreeVector(y(),-x(),Value()); } } /// Azimuthal angle difference, brought into the range \f$(-\pi,\pi]\f$. template double deltaPhi (const ThreeVector & v2) const { double dphi = v2.phi() - phi(); if ( dphi > Constants::pi ) { dphi -= Constants::twopi; } else if ( dphi <= -Constants::pi ) { dphi += Constants::twopi; } return dphi; } /** * Apply a rotation. * @param angle Rotation angle in radians. * @param axis Rotation axis. */ template ThreeVector & rotate(double angle, const ThreeVector & axis) { if (angle == 0.0) return *this; const U ll = axis.mag(); assert( ll > U() ); const double sa = sin(angle), ca = cos(angle); const double dx = axis.x()/ll, dy = axis.y()/ll, dz = axis.z()/ll; const Value xx = x(), yy = y(), zz = z(); setX((ca+(1-ca)*dx*dx) * xx +((1-ca)*dx*dy-sa*dz) * yy +((1-ca)*dx*dz+sa*dy) * zz ); setY(((1-ca)*dy*dx+sa*dz) * xx +(ca+(1-ca)*dy*dy) * yy +((1-ca)*dy*dz-sa*dx) * zz ); setZ(((1-ca)*dz*dx-sa*dy) * xx +((1-ca)*dz*dy+sa*dx) * yy +(ca+(1-ca)*dz*dz) * zz ); return *this; } /** * Rotate the reference frame to a new z-axis. */ ThreeVector & rotateUz (const Axis & axis) { Axis ax = axis.unit(); double u1 = ax.x(); double u2 = ax.y(); double u3 = ax.z(); double up = u1*u1 + u2*u2; if (up>0) { up = sqrt(up); Value px = x(), py = y(), pz = z(); setX( (u1*u3*px - u2*py)/up + u1*pz ); setY( (u2*u3*px + u1*py)/up + u2*pz ); setZ( -up*px + u3*pz ); } else if (u3 < 0.) { setX(-x()); setZ(-z()); } return *this; } /// Vector cross-product template ThreeVector::MulT> cross(const ThreeVector & a) const { typedef ThreeVector::MulT> ResultT; return ResultT( y()*a.z()-z()*a.y(), -x()*a.z()+z()*a.x(), x()*a.y()-y()*a.x()); } public: /// @name Mathematical assignment operators. //@{ ThreeVector & operator+=(const ThreeVector & a) { theX += a.x(); theY += a.y(); theZ += a.z(); return *this; } ThreeVector & operator-=(const ThreeVector & a) { theX -= a.x(); theY -= a.y(); theZ -= a.z(); return *this; } ThreeVector & operator*=(double a) { theX *= a; theY *= a; theZ *= a; return *this; } ThreeVector & operator/=(double a) { theX /= a; theY /= a; theZ /= a; return *this; } //@} /// Cosine of the azimuthal angle between two vectors. template double cosTheta(const ThreeVector & q) const { typedef typename BinaryOpTraits::MulT ProdType; ProdType ptot = mag()*q.mag(); assert( ptot > ProdType() ); double arg = dot(q)/ptot; if (arg > 1.0) arg = 1.0; else if(arg < -1.0) arg = -1.0; return arg; } /// Angle between two vectors. template double angle(const ThreeVector & v) const { return acos(cosTheta(v)); } private: /// @name Vector components //@{ Value theX; Value theY; Value theZ; //@} }; /// Stream output. Format \f$(x,y,z)\f$. inline ostream & operator<< (ostream & os, const ThreeVector & v) { return os << '(' << v.x() << ',' << v.y() << ',' << v.z() << ')'; } /// @name Basic mathematical operations //@{ template inline ThreeVector operator+(ThreeVector a, const ThreeVector & b) { return a += b; } template inline ThreeVector operator-(ThreeVector a, const ThreeVector & b) { return a -= b; } template inline ThreeVector operator-(const ThreeVector & v) { return ThreeVector(-v.x(),-v.y(),-v.z()); } template inline ThreeVector operator*(ThreeVector v, double a) { return v *= a; } template inline ThreeVector operator*(double a, ThreeVector v) { return v *= a; } template inline ThreeVector::MulT> operator*(ValueB a, ThreeVector v) { typedef typename BinaryOpTraits::MulT ResultT; return ThreeVector(a*v.x(), a*v.y(), a*v.z()); } template inline ThreeVector::MulT> operator*(ThreeVector v, ValueB a) { return a*v; } //@} /// Vector dot product. template inline typename BinaryOpTraits::MulT operator*(const ThreeVector & a, const ThreeVector & b) { return a.dot(b); } /// A parallel vector with unit length. template ThreeVector unitVector(const ThreeVector & v) { return v.unit(); } /** Output a ThreeVector with units to a stream. */ template void ounitstream(OStream & os, const ThreeVector & p, UT & u) { os << ounit(p.x(), u) << ounit(p.y(), u) << ounit(p.z(), u); } /** Input a ThreeVector with units from a stream. */ template void iunitstream(IStream & is, ThreeVector & p, UT & u) { Value x, y, z; is >> iunit(x, u) >> iunit(y, u) >> iunit(z, u); p = ThreeVector(x, y, z); } } #endif /* ThePEG_ThreeVector_H */ thepeg-1.8.0.orig/Vectors/SpinOneLorentzRotation.fh0000644000175000017500000000030611747772425020563 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_SpinOneLorentzRotation_FH #define ThePEG_SpinOneLorentzRotation_FH namespace ThePEG { class SpinOneLorentzRotation; } #endif /* ThePEG_SpinOneLorentzRotation_FH */ thepeg-1.8.0.orig/Vectors/SpinHalfLorentzRotation.cc0000644000175000017500000003736211747772425020720 0ustar sunsun// -*- C++ -*- // // SpinHalfLorentzRotation.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SpinHalfLorentzRotation class. // #include "SpinHalfLorentzRotation.h" using namespace ThePEG; // default constructor SpinHalfLorentzRotation::SpinHalfLorentzRotation() : _mx(4,vector(4)) { unsigned ix; for(ix=0;ix<4;++ix) { _mx[ix][ix]=1.0; } } // constructor giving the components of a Lorentz boost SpinHalfLorentzRotation:: SpinHalfLorentzRotation(double bx, double by, double bz, double gamma) : _mx(4,vector(4)) { setBoost (bx,by,bz,gamma); } // constructor with boost vector SpinHalfLorentzRotation:: SpinHalfLorentzRotation (const Boost & b, double gamma) : _mx(4,vector(4)) { setBoost(b,gamma); } // protected set all elements constructor SpinHalfLorentzRotation:: SpinHalfLorentzRotation(Complex c1c1,Complex c1c2,Complex c1c3,Complex c1c4, Complex c2c1,Complex c2c2,Complex c2c3,Complex c2c4, Complex c3c1,Complex c3c2,Complex c3c3,Complex c3c4, Complex c4c1,Complex c4c2,Complex c4c3,Complex c4c4) : _mx(4,vector(4)) { _mx[0][0]=c1c1;_mx[1][0]=c2c1;_mx[2][0]=c3c1;_mx[3][0]=c4c1; _mx[0][1]=c1c2;_mx[1][1]=c2c2;_mx[2][1]=c3c2;_mx[3][1]=c4c2; _mx[0][2]=c1c3;_mx[1][2]=c2c3;_mx[2][2]=c3c3;_mx[3][2]=c4c3; _mx[0][3]=c1c4;_mx[1][3]=c2c4;_mx[2][3]=c3c4;_mx[3][3]=c4c4; } // check for identity matrix bool SpinHalfLorentzRotation::isIdentity() const { return (_mx[0][0]==1.0&&_mx[0][1]==0.0&&_mx[0][2]==0.0&&_mx[0][3]==0.0&& _mx[1][0]==0.0&&_mx[1][1]==1.0&&_mx[1][2]==0.0&&_mx[1][3]==0.0&& _mx[2][0]==0.0&&_mx[2][1]==0.0&&_mx[2][2]==1.0&&_mx[2][3]==0.0&& _mx[3][0]==0.0&&_mx[3][1]==0.0&&_mx[3][2]==0.0&&_mx[3][3]==1.0); } // inverse ( inverse is gamma0 S dagger gamma 0) SpinHalfLorentzRotation SpinHalfLorentzRotation::inverse() const { return SpinHalfLorentzRotation (conj(_mx[2][2]),conj(_mx[3][2]),conj(_mx[0][2]),conj(_mx[1][2]), conj(_mx[2][3]),conj(_mx[3][3]),conj(_mx[0][3]),conj(_mx[1][3]), conj(_mx[2][0]),conj(_mx[3][0]),conj(_mx[0][0]),conj(_mx[1][0]), conj(_mx[2][1]),conj(_mx[3][1]),conj(_mx[0][1]),conj(_mx[1][1])); } // specify the components of a lorentz boost SpinHalfLorentzRotation & SpinHalfLorentzRotation:: setBoost (double bx, double by, double bz, double) { // work out beta and chi static double eps=1e-10; double beta(sqrt(bx*bx+by*by+bz*bz)); double chi(atanh(beta)), chc(cosh(0.5*chi)), shc(0.5); if ( beta > eps ) shc=sinh(0.5*chi)/beta; Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by); _mx[0][0]= chc-shc*bz; _mx[0][1]=-shc*nxminy; _mx[0][2]= 0. ; _mx[0][3]= 0. ; _mx[1][0]=-shc*nxplny; _mx[1][1]= chc+shc*bz; _mx[1][2]= 0. ; _mx[1][3]= 0. ; _mx[2][0]= 0. ; _mx[2][1]= 0. ; _mx[2][2]= chc+shc*bz; _mx[2][3]=+shc*nxminy; _mx[3][0]= 0. ; _mx[3][1]= 0. ; _mx[3][2]=+shc*nxplny; _mx[3][3]= chc-shc*bz; return *this; } // specify a boost vector SpinHalfLorentzRotation & SpinHalfLorentzRotation::setBoost (const Boost & b,double) { // work out beta and chi static double eps=1e-10; double bx(b.x()),by(b.y()),bz(b.z()),beta(b.mag()),chi(atanh(beta)), chc(cosh(0.5*chi)),shc(0.5); if(beta>eps){shc=sinh(0.5*chi)/beta;} Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by); _mx[0][0]= chc-shc*bz;_mx[0][1]=-shc*nxminy;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]=-shc*nxplny;_mx[1][1]= chc+shc*bz;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= chc+shc*bz;_mx[2][3]=+shc*nxminy; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]=+shc*nxplny;_mx[3][3]= chc-shc*bz; return *this; } // lorentz boost in x direction SpinHalfLorentzRotation & SpinHalfLorentzRotation::setBoostX (double & bx) { // work out beta and chi double chi(atanh(bx)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi)); _mx[0][0]= chc;_mx[0][1]=-shc;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]=-shc;_mx[1][1]= chc;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0 ;_mx[2][1]= 0. ;_mx[2][2]= chc;_mx[2][3]=+shc; _mx[3][0]= 0 ;_mx[3][1]= 0. ;_mx[3][2]=+shc;_mx[3][3]= chc; return *this; } // lorentz boost in y direction SpinHalfLorentzRotation & SpinHalfLorentzRotation::setBoostY (double & by) { // work out beta and chi double chi(atanh(by)),chc(cosh(0.5*chi)); Complex shc(0.,sinh(0.5*chi)); _mx[0][0]= chc;_mx[0][1]= shc;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]=-shc;_mx[1][1]= chc;_mx[1][2]= 0. ;_mx[1][3]= 0 ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= chc;_mx[2][3]=-shc; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]=+shc;_mx[3][3]= chc; return *this; } // lorentz boost in z direction SpinHalfLorentzRotation & SpinHalfLorentzRotation::setBoostZ (double & bz) { // work out beta and chi double chi(atanh(bz)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi)); _mx[0][0]= chc-shc;_mx[0][1]= 0. ;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]= 0. ;_mx[1][1]= chc+shc;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= chc+shc ;_mx[2][3]= 0. ; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]=+0. ;_mx[3][3]= chc-shc; return *this; } // Pure boost along the x-axis; equivalent to LT = BoostX(beta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::boostX(double bx) { double chi(atanh(bx)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi)); Complex temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= chc*_mx[0][ix]-shc*_mx[1][ix]; temp[1][ix]= chc*_mx[1][ix]-shc*_mx[0][ix]; temp[2][ix]= chc*_mx[2][ix]+shc*_mx[3][ix]; temp[3][ix]= chc*_mx[3][ix]+shc*_mx[2][ix]; } for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) _mx[ix][iy]=temp[ix][iy]; return *this; } // Pure boost along the y-axis; equivalent to LT = BoostY(beta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::boostY(double by) { double chi(atanh(by)),chc(cosh(0.5*chi)); Complex shc(0.,sinh(0.5*chi)); Complex temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= chc*_mx[0][ix]+shc*_mx[1][ix]; temp[1][ix]= chc*_mx[1][ix]-shc*_mx[0][ix]; temp[2][ix]= chc*_mx[2][ix]-shc*_mx[3][ix]; temp[3][ix]= chc*_mx[3][ix]+shc*_mx[2][ix]; } for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) _mx[ix][iy]=temp[ix][iy]; return *this; } // Pure boost along the z-axis; equivalent to LT = BoostX(beta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::boostZ(double bz) { double chi(atanh(bz)),shc(sinh(0.5*chi)),chc(cosh(0.5*chi)); Complex temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]=(chc-shc)*_mx[0][ix]; temp[1][ix]=(chc+shc)*_mx[1][ix]; temp[2][ix]=(chc+shc)*_mx[2][ix]; temp[3][ix]=( chc-shc)*_mx[3][ix]; } for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) _mx[ix][iy]=temp[ix][iy]; return *this; } // General boost equivalent to LT = Boost(bx,by,bz) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::boost(double bx, double by, double bz, double) { // work out beta and chi static double eps=1e-10; double beta(sqrt(bx*bx+by*by+bz*bz)),chi(atanh(beta)),chc(cosh(0.5*chi)),shc(0.5); if(beta>eps){shc=sinh(0.5*chi)/beta;} Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by),temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= (chc-shc*bz)*_mx[0][ix]-shc*nxminy *_mx[1][ix]; temp[1][ix]=-shc*nxplny *_mx[0][ix]+(chc+shc*bz)*_mx[1][ix]; temp[2][ix]= (chc+shc*bz)*_mx[2][ix]+shc*nxminy *_mx[3][ix]; temp[3][ix]= shc*nxplny *_mx[2][ix]+(chc-shc*bz)*_mx[3][ix]; } for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) _mx[ix][iy]=temp[ix][iy]; return *this; } // General boost equivalent to LT = Boost(bv) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::boost(const Boost & b, double) { // work out beta and chi static double eps=1e-10; double bx(b.x()),by(b.y()),bz(b.z()); double beta(b.mag()),chi(atanh(beta)),chc(cosh(0.5*chi)),shc(0.5); if(beta>eps){shc=sinh(0.5*chi)/beta;} Complex ii(0.,1.),nxminy(bx-ii*by),nxplny(bx+ii*by),temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= (chc-shc*bz)*_mx[0][ix]-shc*nxminy *_mx[1][ix]; temp[1][ix]=-shc*nxplny *_mx[0][ix]+(chc+shc*bz)*_mx[1][ix]; temp[2][ix]= (chc+shc*bz)*_mx[2][ix]+shc*nxminy *_mx[3][ix]; temp[3][ix]= shc*nxplny *_mx[2][ix]+(chc-shc*bz)*_mx[3][ix]; } for(ix=0;ix<4;++ix) for(iy=0;iy<4;++iy) _mx[ix][iy]=temp[ix][iy]; return *this; } std::ostream & SpinHalfLorentzRotation::print( std::ostream & os ) const { os << "\n [ ( " << std::setw(14) << std::setprecision(6) << s1s1() << " " << std::setw(14) << std::setprecision(6) << s1s2() << " " << std::setw(14) << std::setprecision(6) << s1s3() << " " << std::setw(14) << std::setprecision(6) << s1s4() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << s2s1() << " " << std::setw(14) << std::setprecision(6) << s2s2() << " " << std::setw(14) << std::setprecision(6) << s2s3() << " " << std::setw(14) << std::setprecision(6) << s2s4() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << s3s1() << " " << std::setw(14) << std::setprecision(6) << s3s2() << " " << std::setw(14) << std::setprecision(6) << s3s3() << " " << std::setw(14) << std::setprecision(6) << s3s4() << ")\n" << " ( " << std::setw(14) << std::setprecision(6) << s4s1() << " " << std::setw(14) << std::setprecision(6) << s4s2() << " " << std::setw(14) << std::setprecision(6) << s4s3() << " " << std::setw(14) << std::setprecision(6) << s4s4() << ") ]\n"; return os; } // general rotation SpinHalfLorentzRotation & SpinHalfLorentzRotation::setRotate(double phi, const Axis & axis) { double cp(cos(0.5*phi)); // get the normalised components of the vector double amag(axis.mag()),ax(axis.x()/amag),ay(axis.y()/amag),az(axis.z()/amag); Complex ii(0.,1.),nxminy(ax-ii*ay),nxplny(ax+ii*ay),isp(0.,sin(0.5*phi)); // rotatation matrix is the same in both conventions _mx[0][0]= cp-isp*az ;_mx[0][1]=-isp*nxminy;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]=-isp*nxplny;_mx[1][1]= cp+isp*az ;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= cp-isp*az ;_mx[2][3]=-isp*nxminy; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]=-isp*nxplny;_mx[3][3]= cp+isp*az ; return *this; } // rotation about x SpinHalfLorentzRotation & SpinHalfLorentzRotation::setRotateX(double& phi) { double cp(cos(0.5*phi)); Complex isp(0.,sin(0.5*phi)); // rotatation matrix is the same in both conventions _mx[0][0]= cp ;_mx[0][1]=-isp;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]=-isp;_mx[1][1]= cp ;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= cp ;_mx[2][3]=-isp; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]=-isp;_mx[3][3]= cp ; return *this; } // rotation about y SpinHalfLorentzRotation & SpinHalfLorentzRotation::setRotateY(double& phi) { double cp(cos(0.5*phi)),sp(sin(0.5*phi)); // rotatation matrix is the same in both conventions _mx[0][0]= cp;_mx[0][1]=-sp;_mx[0][2]= 0.;_mx[0][3]= 0.; _mx[1][0]= sp;_mx[1][1]= cp;_mx[1][2]= 0.;_mx[1][3]= 0.; _mx[2][0]= 0.;_mx[2][1]= 0.;_mx[2][2]= cp;_mx[2][3]=-sp; _mx[3][0]= 0.;_mx[3][1]= 0.;_mx[3][2]= sp;_mx[3][3]= cp; return *this; } // rotation about z SpinHalfLorentzRotation & SpinHalfLorentzRotation::setRotateZ(double& phi) { double cp(cos(0.5*phi)); Complex isp(0.,sin(0.5*phi)); // rotatation matrix is the same in both conventions _mx[0][0]= cp-isp ;_mx[0][1]= 0. ;_mx[0][2]= 0. ;_mx[0][3]= 0. ; _mx[1][0]= 0. ;_mx[1][1]= cp+isp;_mx[1][2]= 0. ;_mx[1][3]= 0. ; _mx[2][0]= 0. ;_mx[2][1]= 0. ;_mx[2][2]= cp-isp;_mx[2][3]= 0. ; _mx[3][0]= 0. ;_mx[3][1]= 0. ;_mx[3][2]= 0. ;_mx[3][3]= cp+isp; return *this; } // product SpinHalfLorentzRotation SpinHalfLorentzRotation::operator * (const SpinHalfLorentzRotation & lt) const { Complex output[4][4]; unsigned int ix,iy,iz; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { output[ix][iy]=0.; for(iz=0;iz<4;++iz){output[ix][iy]+=_mx[ix][iz]*lt._mx[iz][iy];} } } return SpinHalfLorentzRotation(output[0][0],output[0][1],output[0][2],output[0][3], output[1][0],output[1][1],output[1][2],output[1][3], output[2][0],output[2][1],output[2][2],output[2][3], output[3][0],output[3][1],output[3][2],output[3][3]); } // multiply and assign SpinHalfLorentzRotation & SpinHalfLorentzRotation::operator *= (const SpinHalfLorentzRotation & lt) { Complex output[4][4]; unsigned int ix,iy,iz; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { output[ix][iy]=0.; for(iz=0;iz<4;++iz){output[ix][iy]+=_mx[ix][iz]*lt._mx[iz][iy];} } } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=output[ix][iy];}} return *this; } // transform method SpinHalfLorentzRotation & SpinHalfLorentzRotation::transform(const SpinHalfLorentzRotation & lt) { Complex output[4][4]; unsigned int ix,iy,iz; for(ix=0;ix<4;++ix) { for(iy=0;iy<4;++iy) { output[ix][iy]=0.; for(iz=0;iz<4;++iz){output[ix][iy]+=lt._mx[ix][iz]*_mx[iz][iy];} } } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=output[ix][iy];}} return *this; } // Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateX(double phi) { double cp(cos(0.5*phi)); Complex isp(0.,sin(0.5*phi)),temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= cp*_mx[0][ix]-isp*_mx[1][ix]; temp[1][ix]=-isp*_mx[0][ix]+ cp*_mx[1][ix]; temp[2][ix]= cp*_mx[2][ix]-isp*_mx[3][ix]; temp[3][ix]=-isp*_mx[2][ix]+ cp*_mx[3][ix]; } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}} return *this; } // Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateY(double phi) { double cp(cos(0.5*phi)),sp(sin(0.5*phi)); Complex temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= cp*_mx[0][ix]-sp*_mx[1][ix]; temp[1][ix]= sp*_mx[0][ix]+cp*_mx[1][ix]; temp[2][ix]= cp*_mx[2][ix]-sp*_mx[3][ix]; temp[3][ix]= sp*_mx[2][ix]+cp*_mx[3][ix]; } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}} return *this; } // Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotateZ(double phi) { double cp(cos(0.5*phi)); Complex isp(0.,sin(0.5*phi)),temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= (cp-isp)*_mx[0][ix]; temp[1][ix]= (cp+isp)*_mx[1][ix]; temp[2][ix]= (cp-isp)*_mx[2][ix]; temp[3][ix]= (cp+isp)*_mx[3][ix]; } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}} return *this; } // Rotation around specified vector - LT = Rotation(delta,axis)*LT SpinHalfLorentzRotation & SpinHalfLorentzRotation::rotate(double phi, const Axis & axis) { double cp(cos(0.5*phi)),amag(axis.mag()), ax(axis.x()/amag),ay(axis.y()/amag),az(axis.z()/amag); Complex ii(0.,1.),nxminy(ax-ii*ay),nxplny(ax+ii*ay),isp(0.,sin(0.5*phi)),temp[4][4]; unsigned int ix,iy; for(ix=0;ix<4;++ix) { temp[0][ix]= (cp-isp*az)*_mx[0][ix]-isp*nxminy *_mx[1][ix]; temp[1][ix]=-isp*nxplny *_mx[0][ix]+(cp+isp*az)*_mx[1][ix]; temp[2][ix]= (cp-isp*az)*_mx[2][ix]-isp*nxminy *_mx[3][ix]; temp[3][ix]=-isp*nxplny *_mx[2][ix]+(cp+isp*az)*_mx[3][ix]; } for(ix=0;ix<4;++ix){for(iy=0;iy<4;++iy){_mx[ix][iy]=temp[ix][iy];}} return *this; } thepeg-1.8.0.orig/Vectors/LorentzRotation.cc0000644000175000017500000000124011747772425017255 0ustar sunsun// -*- C++ -*- // // LorentzRotation.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LorentzRotation class. // #include "LorentzRotation.h" using namespace ThePEG; // output operator std::ostream & LorentzRotation::print( std::ostream & os ) const { os << "Spin 1 Transform: \n " << _one << "\n Spin 1/2 Transform: \n " << _half << "\n"; return os; } thepeg-1.8.0.orig/Vectors/Transverse.fh0000644000175000017500000000036011747772425016246 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Transverse_FH #define ThePEG_Transverse_FH // Forward declaration of the Transverse class. namespace ThePEG { template class Transverse; } #endif /* ThePEG_Transverse_FH */ thepeg-1.8.0.orig/Vectors/HepMCConverter.tcc0000644000175000017500000002474711754441134017115 0ustar sunsun// -*- C++ -*- // // HepMCConverter.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the HepMCConverter class. // #include "HepMCConverter.h" #include "ThePEG/StandardModel/StandardModelBase.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/EventRecord/StandardSelectors.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/PDF/PDF.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Utilities/Throw.h" namespace ThePEG { template typename HepMCConverter::GenEvent * HepMCConverter:: convert(const Event & ev, bool nocopies, Energy eunit, Length lunit) { HepMCConverter converter(ev, nocopies, eunit, lunit); return converter.geneve; } template void HepMCConverter:: convert(const Event & ev, GenEvent & gev, bool nocopies) { HepMCConverter converter(ev, gev, nocopies, Traits::momentumUnit(gev), Traits::lengthUnit(gev)); } template void HepMCConverter:: convert(const Event & ev, GenEvent & gev, bool nocopies, Energy eunit, Length lunit) { HepMCConverter converter(ev, gev, nocopies, eunit, lunit); } template HepMCConverter:: HepMCConverter(const Event & ev, bool nocopies, Energy eunit, Length lunit) : energyUnit(eunit), lengthUnit(lunit) { geneve = Traits::newEvent(ev.number(), ev.weight(), ev.optionalWeights()); init(ev, nocopies); } template HepMCConverter:: HepMCConverter(const Event & ev, GenEvent & gev, bool nocopies, Energy eunit, Length lunit) : energyUnit(eunit), lengthUnit(lunit) { geneve = &gev; Traits::resetEvent(geneve, ev.number(), ev.weight(), ev.optionalWeights()); init(ev, nocopies); } struct ParticleOrderNumberCmp { bool operator()(tcPPtr a, tcPPtr b) const { return a->number() < b->number(); } }; template void HepMCConverter::init(const Event & ev, bool nocopies) { if ( lengthUnit != millimeter && lengthUnit != centimeter ) Throw() << "Length unit used for HepMC::GenEvent was not MM nor CM." << Exception::runerror; if ( energyUnit != GeV && energyUnit != MeV ) Throw() << "Momentum unit used for HepMC::GenEvent was not GEV nor MEV." << Exception::runerror; Traits::setUnits(*geneve, energyUnit, lengthUnit); tcEHPtr eh; if ( ev.primaryCollision() && ( eh = dynamic_ptr_cast(ev.primaryCollision()->handler()) ) ) { // Get general event info if present. Traits::setScaleAndAlphas(*geneve, eh->lastScale(), eh->SM().alphaS(eh->lastScale()), eh->SM().alphaEM(eh->lastScale()), energyUnit); } // Extract all particles and order them. tcPVector all; ev.select(back_inserter(all), SelectAll()); stable_sort(all.begin(), all.end(), ParticleOrderNumberCmp()); vertices.reserve(all.size()*2); // Create GenParticle's and map them to the ThePEG particles. for ( int i = 0, N = all.size(); i < N; ++i ) { tcPPtr p = all[i]; if ( nocopies && p->next() ) continue; if ( pmap.find(p) != pmap.end() ) continue; GenParticle * gp = pmap[p] = createParticle(p); if ( p->hasColourInfo() ) { // Check if the particle is connected to colour lines, in which // case the lines are mapped to an integer and set in the // GenParticle's Flow info. tcColinePtr l; if ( (l = p->colourLine()) ) { if ( !member(flowmap, l) ) flowmap[l] = flowmap.size() + 500; Traits::setColourLine(*gp, 1, flowmap[l]); } if ( (l = p->antiColourLine()) ) { if ( !member(flowmap, l) ) flowmap[l] = flowmap.size() + 500; Traits::setColourLine(*gp, 2, flowmap[l]); } } if ( !p->children().empty() || p->next() ) { // If the particle has children it should have a decay vertex: vertices.push_back(Vertex()); decv[p] = &vertices.back(); vertices.back().in.insert(p); } if ( !p->parents().empty() || p->previous() || (p->children().empty() && !p->next()) ) { // If the particle has parents it should have a production // vertex. If neither parents or children it should still have a // dummy production vertex. vertices.push_back(Vertex()); prov[p] = &vertices.back(); vertices.back().out.insert(p); } } // Now go through the the particles again, and join the vertices. for ( int i = 0, N = all.size(); i < N; ++i ) { tcPPtr p = all[i]; if ( nocopies ) { if ( p->next() ) continue; for ( int i = 0, N = p->children().size(); i < N; ++i ) join(p, p->children()[i]->final()); tcPPtr pp = p; while ( pp->parents().empty() && pp->previous() ) pp = pp->previous(); for ( int i = 0, N = pp->parents().size(); i < N; ++i ) join(pp->parents()[i]->final(), p); } else { for ( int i = 0, N = p->children().size(); i < N; ++i ) join(p, p->children()[i]); if ( p->next() ) join(p, p->next()); for ( int i = 0, N = p->parents().size(); i < N; ++i ) join(p->parents()[i], p); if ( p->previous() ) join(p->previous(), p); } } // Time to create the GenVertex's for ( typename VertexMap::iterator it = prov.begin(); it != prov.end(); ++it ) if ( !member(vmap, it->second) ) vmap[it->second] = createVertex(it->second); for ( typename VertexMap::iterator it = decv.begin(); it != decv.end(); ++it ) if ( !member(vmap, it->second) ) vmap[it->second] = createVertex(it->second); // Now find the primary signal process vertex defined to be the // decay vertex of the first parton coming into the primary hard // sub-collision. tSubProPtr sub = ev.primarySubProcess(); if ( sub && sub->incoming().first ) { const Vertex * prim = decv[sub->incoming().first]; Traits::setSignalProcessVertex(*geneve, vmap[prim]); vmap.erase(prim); } // Then add the rest of the vertices. for ( typename GenVertexMap::iterator it = vmap.begin(); it != vmap.end(); ++it ) Traits::addVertex(*geneve, it->second); // and the incoming beam particles Traits::setBeamParticles(*geneve,pmap[ev.incoming().first], pmap[ev.incoming().second]); // and the PDF info setPdfInfo(ev); // and the cross section info Traits::setCrossSection(*geneve, eh->integratedXSec()/picobarn, eh->integratedXSecErr()/picobarn); } template typename HepMCConverter::GenParticle * HepMCConverter::createParticle(tcPPtr p) const { int status = 1; if ( !p->children().empty() || p->next() ) status = 11; if ( !p->children().empty() ) { long id = p->data().id(); if ( BaryonMatcher::Check(id) || MesonMatcher::Check(id) || id == ParticleID::muminus || id == ParticleID::muplus || id == ParticleID::tauminus || id == ParticleID::tauplus ) if ( p->mass() <= p->data().massMax() && p->mass() >= p->data().massMin() ) status = 2; } GenParticle * gp = Traits::newParticle(p->momentum(), p->id(), status, energyUnit); if ( p->spinInfo() && p->spinInfo()->hasPolarization() ) { DPair pol = p->spinInfo()->polarization(); Traits::setPolarization(*gp, pol.first, pol.second); } return gp; } template void HepMCConverter::join(tcPPtr parent, tcPPtr child) { Vertex * dec = decv[parent]; Vertex * pro = prov[child]; if ( !pro || !dec ) Throw() << "Found a reference to a ThePEG::Particle which was not in the Event." << Exception::eventerror; if ( pro == dec ) return; while ( !pro->in.empty() ) { dec->in.insert(*(pro->in.begin())); decv[*(pro->in.begin())] = dec; pro->in.erase(pro->in.begin()); } while ( !pro->out.empty() ) { dec->out.insert(*(pro->out.begin())); prov[*(pro->out.begin())] = dec; pro->out.erase(pro->out.begin()); } } template typename HepMCConverter::GenVertex * HepMCConverter::createVertex(Vertex * v) { if ( !v ) Throw() << "Found internal null Vertex." << Exception::abortnow; GenVertex * gv = new GenVertex(); // We assume that the vertex position is the average of the decay // vertices of all incoming and the creation vertices of all // outgoing particles in the lab. Note that this will probably not // be useful information for very small distances. LorentzPoint p; for ( tcParticleSet::iterator it = v->in.begin(); it != v->in.end(); ++it ) { p += (**it).labDecayVertex(); Traits::addIncoming(*gv, pmap[*it]); } for ( tcParticleSet::iterator it = v->out.begin(); it != v->out.end(); ++it ) { p += (**it).labVertex(); Traits::addOutgoing(*gv, pmap[*it]); } p /= double(v->in.size() + v->out.size()); Traits::setPosition(*gv, p, lengthUnit); return gv; } template void HepMCConverter::setPdfInfo(const Event & e) { // ids of the partons going into the primary sub process tSubProPtr sub = e.primarySubProcess(); int id1 = sub->incoming().first ->id(); int id2 = sub->incoming().second->id(); // get the event handler tcEHPtr eh = dynamic_ptr_cast(e.handler()); // get the values of x double x1 = eh->lastX1(); double x2 = eh->lastX2(); // get the pdfs pair pdfs; pdfs.first = eh->pdf(sub->incoming().first ); pdfs.second = eh->pdf(sub->incoming().second); // get the scale Energy2 scale = eh->lastScale(); // get the values of the pdfs double xf1 = pdfs.first.xfx(sub->incoming().first->dataPtr(), scale, x1); double xf2 = pdfs.second.xfx(sub->incoming().second->dataPtr(), scale, x2); Traits::setPdfInfo(*geneve, id1, id2, x1, x2, sqrt(scale/GeV2), xf1, xf2); } } thepeg-1.8.0.orig/Vectors/Lorentz5Vector.h0000644000175000017500000002605311747772425016660 0ustar sunsun// -*- C++ -*- // // Lorentz5Vector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Lorentz5Vector_H #define ThePEG_Lorentz5Vector_H // This is the declaration of the Lorentz5vector class. #include "LorentzVector.h" #include "Lorentz5Vector.fh" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Utilities/Direction.h" #include "ThePEG/Utilities/UnitIO.h" #include "LorentzRotation.h" namespace ThePEG { template /** * The Lorentz5Vector inherits from the * LorentzVector class. It is templated on the * type of the member variables. The Lorentz5Vector class is a * LorentzVector with an extra member for the invariant * length/mass of the vector. Note that an object of the * Lorentz5Vector class may be internally inconsistent in * that the invariant length/mass of the LorentzVector * class need not be the same as the member variable representing the * invariant length/mass. The degree of inconsistency can be accessed * with the massError(), energyError() and * rhoError() methods and an object can be made consistent * using the rescaleMass(), rescaleEnergy() or * rescaleRho() methods. * * @see Math * */ class Lorentz5Vector: public LorentzVector { public: /** Template argument typedef. */ typedef typename BinaryOpTraits::MulT Value2; public: /// Component access. //@{ Value x() const { return LorentzVector::x(); } Value y() const { return LorentzVector::y(); } Value z() const { return LorentzVector::z(); } Value t() const { return LorentzVector::t(); } //@} public: /** @name Constructors and destructor. */ //@{ /** * Constructor giving the null vector. */ Lorentz5Vector() : mm() {} /** * Constructor giving the invariant length. */ Lorentz5Vector(Value m) : LorentzVector(Value(), Value(), Value(), m), mm(m) {} /** * Constructor giving the components x, y, z, t. The invariant * length is set to LorentzVector::mag(). */ Lorentz5Vector(Value x, Value y, Value z, Value t = Value()) : LorentzVector(x, y, z, t) { rescaleMass(); } /** * Constructor giving the components x, y, z, t and invariant length. * May result in an inconsistent Lorentz5Vector. */ Lorentz5Vector(Value x, Value y, Value z, Value t, Value tau) : LorentzVector(x, y, z, t), mm(tau) {} /** * Constructor giving a 3-Vector and a time component. The invariant * length is set to LorentzVector::mag(). */ Lorentz5Vector(const ThreeVector & p, Value e) : LorentzVector(p, e) { rescaleMass(); } /** * Constructor giving an invariant length and a 3-Vector * component. The time component is set to the corresponding value. */ Lorentz5Vector(Value m, const ThreeVector & p) : LorentzVector(p, sqrt(p.mag2() + m*m)), mm(m) {} /** * Constructor giving a 3-Vector, a time component and an invariant * length. May result in an inconsistent Lorentz5Vector. */ Lorentz5Vector(const ThreeVector & p, Value t, Value tau) : LorentzVector(p, t), mm(tau) {} /** * Constructor giving a LorentzVector and an invariant length. * May result in an inconsistent Lorentz5Vector. */ Lorentz5Vector(const LorentzVector & p, Value m) : LorentzVector(p), mm(m) {} /** * Copy from HepLorentzVector constructor. The invariant * length is set to LorentzVector::mag(). */ Lorentz5Vector(const LorentzVector & p) : LorentzVector(p) { rescaleMass(); } /** * Construct from value type U convertible to Value. */ template Lorentz5Vector(const Lorentz5Vector & p) : LorentzVector(p), mm(p.m) {} //@} /** @name Assignment and set functions. */ //@{ /** * Set invariant length/mass. */ void setTau(Value a) { mm = a; } /** * Set invariant length/mass. */ void setMass(Value a) { mm = a; } /** * Assignment. The invariant length is kept fixed. May result in an * inconsistent Lorentz5Vector. */ Lorentz5Vector & operator=(const LorentzVector & q) { LorentzVector::operator=(q); return *this; } //@} /** @name Rescale functions to make consistent. */ //@{ /** * Rescale energy, so that the invariant length/mass of the * LorentzVector agrees with the current one. */ void rescaleEnergy() { LorentzVector::setT(sqrt(LorentzVector::vect().mag2() + mass2())); } /** * Rescale spatial component, so that the invariant length/mass of * the LorentzVector agrees with the current one. */ void rescaleRho() { LorentzVector::setRho(sqrt(t()*t() - mass2())); } /** * Set the invariant length/mass member, so that it agrees with the * invariant length/mass of the LorentzVector. */ void rescaleMass() { mm = LorentzVector::m(); } //@} /** @name Check consistency. */ //@{ /** * Return the relative inconsistency in the mass component. */ double massError() const { return sqrt(abs(Math::relativeError(mass2(), LorentzVector::m2()))); } /** * Return the relative inconsistency in the energy component. */ double energyError() const { return sqrt(abs(Math::relativeError(t()*t(), mass2() + LorentzVector::vect().mag2()))); } /** * Return the relative inconsistency in the spatial components. */ double rhoError() const { return sqrt(abs(Math::relativeError(LorentzVector::vect().mag2(), t()*t() - mass2()))); } //@} /** @name Access components. */ //@{ /** * Mass/invariant length component squared. m2() gives * the same calculated from the LorentzVector */ Value2 mass2() const { return mm > Value() ? mm*mm: -mm*mm; } /** * Mass/invariant length component squared. m2() gives * the same calculated from the LorentzVector */ Value2 tau2() const { return mass2(); } /** * Mass/invariant length component. m() gives the same * calculated from the LorentzVector */ Value mass() const { return mm; } /** * Mass/invariant length component. m() gives the same * calculated from the LorentzVector */ Value tau() const { return mass(); } /** * Return the positive negative light-cone components (depending on * the value of Direction<0>. */ Value dirPlus() const { return Direction<0>::pos() ? LorentzVector::plus() : LorentzVector::minus(); } /** * Return the positive negative light-cone components (depending on * the value of Direction<0>. */ Value dirMinus() const { return Direction<0>::neg() ? LorentzVector::plus() : LorentzVector::minus(); } //@} /** * Perform a Lorentz transformation */ Lorentz5Vector & transform(const LorentzRotation & r) { LorentzVector::transform(r.one()); return *this; } private: /** The invariant mass/length member. */ Value mm; }; /** Output a Lorentz5Vector to a stream. */ template void ounitstream(OStream & os, const Lorentz5Vector & p, UT & u) { os << ounit(p.x(), u) << ounit(p.y(), u) << ounit(p.z(), u) << ounit(p.e(), u) << ounit(p.mass(), u); } /** Input a Lorentz5Vector from a stream. */ template void iunitstream(IStream & is, Lorentz5Vector & p, UT & u) { T x, y, z, e, mass; is >> iunit(x, u) >> iunit(y, u) >> iunit(z, u) >> iunit(e, u) >> iunit(mass, u); p = Lorentz5Vector(x, y, z, e, mass); } template struct BinaryOpTraits; /** * Template for multiplication by scalar */ template struct BinaryOpTraits, double> { /** The type resulting from multiplication of the template type with itself. */ typedef Lorentz5Vector MulT; /** The type resulting from division of one template type with another. */ typedef Lorentz5Vector DivT; }; /** * Template for multiplication by scalar */ template struct BinaryOpTraits > { /** The type resulting from multiplication of the template type with itself. */ typedef Lorentz5Vector MulT; }; /** * Template for multiplication for complex and Lorentz5Vector */ template struct BinaryOpTraits, std::complex > { /** The type resulting from multiplication of the template type with itself. */ typedef Lorentz5Vector::MulT> > MulT; /** The type resulting from division of one template type with another. */ typedef Lorentz5Vector::DivT> > DivT; }; /** * Template for multiplication by scalar */ template struct BinaryOpTraits, Lorentz5Vector > { /** The type resulting from multiplication of the template type with itself. */ typedef Lorentz5Vector::MulT> > MulT; }; /** * Template for multiplication of two Lorentz5Vectors */ template struct BinaryOpTraits, Lorentz5Vector > { /** The type resulting from multiplication of the template type with itself. */ typedef typename BinaryOpTraits::MulT MulT; }; /** * Template for multiplication for LorentzVector and Lorentz5Vector */ template struct BinaryOpTraits, Lorentz5Vector > { /** The type resulting from multiplication of the template type with itself. */ typedef typename BinaryOpTraits::MulT MulT; }; /** * Template for multiplication for LorentzVector and Lorentz5Vector */ template struct BinaryOpTraits, LorentzVector > { /** The type resulting from multiplication of the template type with itself. */ typedef typename BinaryOpTraits::MulT MulT; }; /// @name Dot product overloads. //@{ template inline typename BinaryOpTraits::MulT operator*(const Lorentz5Vector & a, const Lorentz5Vector & b) { return a.dot(b); } template inline typename BinaryOpTraits::MulT operator*(const LorentzVector & a, const Lorentz5Vector & b) { return a.dot(b); } template inline typename BinaryOpTraits::MulT operator*(const Lorentz5Vector & a, const LorentzVector & b) { return a.dot(b); } template inline typename BinaryOpTraits::MulT operator*(const Lorentz5Vector & a, const Lorentz5Vector & b) { return a.dot(b); } //@} } #endif /* ThePEG_Particle_H */ thepeg-1.8.0.orig/Vectors/SpinHalfLorentzRotation.h0000644000175000017500000002135011747772425020550 0ustar sunsun// -*- C++ -*- // // SpinHalfLorentzRotation.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SpinHalfLorentzRotation_H #define THEPEG_SpinHalfLorentzRotation_H // // This is the declaration of the SpinHalfLorentzRotation class. // #include "ThePEG/Helicity/HelicityDefinitions.h" #include "ThreeVector.h" namespace ThePEG { /** * The SpinHalfLorentzRotation class is designed to offer the same * features as the HepLorentzRotation class of CLHEP but for the spin-\f$\frac12\f$ * Lorentz transformation. This is then combined into the general LorentzRotation * class of ThePEG to provide the Lorentz transformation for any object as the * transformations for higher spin objects can be built from the spin-\f$\frac12\f$ * and spin-1 transformations. * * The boost matrix is calculated using the default Dirac matrix representation. * Any conversion to other Dirac matrix representations must be handled when the * transformation is used. */ class SpinHalfLorentzRotation { /** * The external inverseOf needs to be a friend */ friend SpinHalfLorentzRotation inverseOf ( const SpinHalfLorentzRotation & lt ); public: /** @name Constructors and destructor. */ //@{ /** * Default constructor. Gives a unit matrix. */ SpinHalfLorentzRotation(); /** * Constructor giving the components of a Lorentz boost. * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation (double bx, double by, double bz, double gamma=-1.); /** * Constructor giving the vector for a Lorentz boost. * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation (const Boost & b,double gamma=-1.); //@} /** * Returns true if the Identity matrix. */ bool isIdentity() const; /** * Return the inverse. */ SpinHalfLorentzRotation inverse() const; /** * Inverts the SpinHalfLorentzRotation matrix. */ SpinHalfLorentzRotation & invert() { return *this = inverse(); } /** * output operator */ std::ostream & print( std::ostream & os ) const; /** @name Set methods for speical cases of simple rotations and boosts */ //@{ /** * Specify the components of a Lorentz Boost * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation & setBoost (double bx, double by, double bz,double gamma=-1.); /** * Specify a Lorentz Boost as a vector * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation & setBoost (const Boost & b,double gamma=-1.); /** * Specify a boost by the given factor along the x-axis * @param boost The Lorentz boost */ SpinHalfLorentzRotation & setBoostX (double & boost); /** * Specify a boost by the given factor along the y-axis * @param boost The Lorentz boost */ SpinHalfLorentzRotation & setBoostY (double & boost); /** * Specify a boost by the given factor along the z-axis * @param boost The Lorentz boost */ SpinHalfLorentzRotation & setBoostZ (double & boost); /** * Specify a rotation about a general axis by the angle given. * @param delta The angle * @param axis The axis */ SpinHalfLorentzRotation & setRotate(double delta, const Axis & axis); /** * Specify a rotation by the given angle about the x-axis * @param angle The rotation angle */ SpinHalfLorentzRotation & setRotateX (double & angle); /** * Specify a rotation by the given angle about the y-axis * @param angle The rotation angle */ SpinHalfLorentzRotation & setRotateY (double & angle); /** * Specify a rotation by the given angle about the z-axis * @param angle The rotation angle */ SpinHalfLorentzRotation & setRotateZ (double & angle); //@} /** @name Access methods for the components */ //@{ /** * The \f$(1,1)\f$ component */ Complex s1s1() const { return _mx[0][0]; } /** * The \f$(1,2)\f$ component */ Complex s1s2() const { return _mx[0][1]; } /** * The \f$(1,3)\f$ component */ Complex s1s3() const { return _mx[0][2]; } /** * The \f$(1,4)\f$ component */ Complex s1s4() const { return _mx[0][3]; } /** * The \f$(1,1)\f$ component */ Complex s2s1() const { return _mx[1][0]; } /** * The \f$(1,1)\f$ component */ Complex s2s2() const { return _mx[1][1]; } /** * The \f$(1,1)\f$ component */ Complex s2s3() const { return _mx[1][2]; } /** * The \f$(1,1)\f$ component */ Complex s2s4() const { return _mx[1][3]; } /** * The \f$(1,1)\f$ component */ Complex s3s1() const { return _mx[2][0]; } /** * The \f$(1,1)\f$ component */ Complex s3s2() const { return _mx[2][1]; } /** * The \f$(1,1)\f$ component */ Complex s3s3() const { return _mx[2][2]; } /** * The \f$(1,1)\f$ component */ Complex s3s4() const { return _mx[2][3]; } /** * The \f$(1,1)\f$ component */ Complex s4s1() const { return _mx[3][0]; } /** * The \f$(1,1)\f$ component */ Complex s4s2() const { return _mx[3][1]; } /** * The \f$(1,1)\f$ component */ Complex s4s3() const { return _mx[3][2]; } /** * The \f$(1,1)\f$ component */ Complex s4s4() const { return _mx[3][3]; } /** * Fortran style subscript operator */ Complex operator()(unsigned int i, unsigned int j) const { assert(i<=3 && j<=3); return _mx[i][j]; } //@} /** @name Transformation and product members */ //@{ /** * Product of two SpinHalfLorentzRotations (this) * lt - matrix multiplication * @param lt The SpinHalfLorentzRotation we are multiplying */ SpinHalfLorentzRotation operator * (const SpinHalfLorentzRotation & lt) const; /** * Multiply by and assign a*=b becomes a= a*b */ SpinHalfLorentzRotation & operator *= (const SpinHalfLorentzRotation & ); /** * Transform (similar to *= but a.transform(b) becomes a = b*a */ SpinHalfLorentzRotation & transform (const SpinHalfLorentzRotation & ); /** * Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT */ SpinHalfLorentzRotation & rotateX(double delta); /** * Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT */ SpinHalfLorentzRotation & rotateY(double delta); /** * Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT */ SpinHalfLorentzRotation & rotateZ(double delta); /** * Rotation around specified vector - LT = Rotation(delta,axis)*LT */ SpinHalfLorentzRotation & rotate(double delta, const Axis & axis); /** * Pure boost along the x-axis; equivalent to LT = BoostX(beta) * LT */ SpinHalfLorentzRotation & boostX(double beta); /** * Pure boost along the y-axis; equivalent to LT = BoostX(beta) * LT */ SpinHalfLorentzRotation & boostY(double beta); /** * Pure boost along the z-axis; equivalent to LT = BoostX(beta) * LT */ SpinHalfLorentzRotation & boostZ(double beta); /** * General boost equivalent to LT = Boost(bx,by,bz) * LT * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation & boost(double bx, double by, double bz, double gamma=-1.); /** * General boost equivalent to LT = Boost(bv) * LT * @param bv The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ SpinHalfLorentzRotation & boost(const Boost & bv, double gamma=-1.); //@} protected: /** * Protected constructor giving all the members, no check it is a valid * transformation */ SpinHalfLorentzRotation(Complex s1s1,Complex s1s2,Complex s1s3,Complex s1s4, Complex s2s1,Complex s2s2,Complex s2s3,Complex s2s4, Complex s3s1,Complex s3s2,Complex s3s3,Complex s3s4, Complex s4s1,Complex s4s2,Complex s4s3,Complex s4s4); private: /** * The members of the transformation matrix. */ vector > _mx; }; /** * Global method to get the inverse */ inline SpinHalfLorentzRotation inverseOf ( const SpinHalfLorentzRotation & lt ) { return lt.inverse(); } /** * output operator */ inline std::ostream & operator<< ( std::ostream & os, const SpinHalfLorentzRotation& lt ) { return lt.print(os); } } #endif /* THEPEG_SpinHalfLorentzRotation_H */ thepeg-1.8.0.orig/Vectors/LorentzRotation.fh0000644000175000017500000000025211747772425017267 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_LorentzRotation_FH #define ThePEG_LorentzRotation_FH namespace ThePEG { class LorentzRotation; } #endif /* ThePEG_LorentzRotation_FH */ thepeg-1.8.0.orig/Vectors/Lorentz5Vector.fh0000644000175000017500000000037611747772425017026 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Lorentz5Vector_FH #define ThePEG_Lorentz5Vector_FH // Forward declaration of the Lorentz5Vector class. namespace ThePEG { template class Lorentz5Vector; } #endif /* ThePEG_Lorentz5Vector_FH */ thepeg-1.8.0.orig/Vectors/ThreeVector.fh0000644000175000017500000000026711747772425016352 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_ThreeVector_FH #define ThePEG_ThreeVector_FH namespace ThePEG { template class ThreeVector; } #endif /* ThePEG_ThreeVector_FH */ thepeg-1.8.0.orig/Vectors/HepMCTraits.h0000644000175000017500000002116611750706507016066 0ustar sunsun// -*- C++ -*- // // HepMCTraits.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HepMCTraits_H #define ThePEG_HepMCTraits_H #include "HepMC/GenEvent.h" namespace HepMC { class GenEvent; class GenParticle; class GenVertex; class Polarization; class PdfInfo; } namespace ThePEG { /** * HepMCTraitsBase is a convenient base class for specializing the * HepMCTraits class to deal with different flavours of HepMC in the * HepMCConverter class. The default version will work for the CLHEP * implementation of HepMC. To use the HepMCConverter class for any * flavour of HepMC you have to specialize the HepMCTraits class * accordingly, possibly inheriting the functionality from the * HepMCTraitsBase class and only overriding the functions and * typedefs which are different. For the CLHEP flavour of HepMC you * only need to do template<> struct * HepMCTraits<HepMC::GenEvent>: public * HepMCTraitsBase<HepMC::GenEvent,HepMC::GenParticle,HepMC::GenVertex, * HepMC::Polarization> {}; somewhere inside the ThePEG * namespace. The boolean template argument determines whether the * HepMC implementation is specifying units or not. */ template struct HepMCTraitsBase { /** Typedef of the particle class. */ typedef HepMCParticleT ParticleT; /** Typedef of the event class. */ typedef HepMCEventT EventT; /** Typedef of the vertex class. */ typedef HepMCVertexT VertexT; /** Typedef of the polarization class. */ typedef HepMCPolarizationT PolarizationT; /** Typedef of the PdfInfo class. */ typedef HepMCPdfInfoT PdfInfoT; /** Create an event object with number \a evno and \a weight. */ static EventT * newEvent(long evno, double weight, const map& optionalWeights) { EventT * e = new EventT(); e->set_event_number(evno); e->weights().push_back(weight); for ( map::const_iterator w = optionalWeights.begin(); w != optionalWeights.end(); ++w ) { #ifdef HEPMC_HAS_NAMED_WEIGHTS e->weights()[w->first] = w->second; #else e->weights().push_back(w->second); #endif } return e; } /** Reset event weight and number of a re-used GenEvent. */ static void resetEvent(EventT * e, long evno, double weight, const map& optionalWeights) { e->set_event_number(evno); e->weights().clear(); e->weights().push_back(weight); for ( map::const_iterator w = optionalWeights.begin(); w != optionalWeights.end(); ++w ) { #ifdef HEPMC_HAS_NAMED_WEIGHTS e->weights()[w->first] = w->second; #else e->weights().push_back(w->second); #endif } } /** * Return true if this version of HepMC accept user-defined units. */ static bool hasUnits() { #ifdef HEPMC_HAS_UNITS return true; #else return false; #endif } /** * Return the energy unit used in the installed version of HepMC. */ static Energy defaultEnergyUnit() { #ifndef HEPMC_HAS_UNITS return GeV; #else return HepMC::Units::default_momentum_unit() == HepMC::Units::GEV? GeV: MeV; #endif } /** * Return the length unit used in the installed version of HepMC. */ static Length defaultLengthUnit() { #ifndef HEPMC_HAS_UNITS return millimeter; #else return HepMC::Units::default_length_unit() == HepMC::Units::MM? millimeter: 10.0*millimeter; #endif } /** * Return the momentum unit used by a given GenEvent object. If * HepMC does not support units this must return GeV. */ static Energy momentumUnit(const EventT & e) { #ifdef HEPMC_HAS_UNITS return e.momentum_unit() == HepMC::Units::MEV? MeV: GeV; #else return GeV; #endif } /** * Return the length unit used by a given GenEvent object. If * HepMC does not support units this must return millimeter. */ static Length lengthUnit(const EventT & e) { #ifdef HEPMC_HAS_UNITS return e.length_unit() == HepMC::Units::CM? centimeter: millimeter; #else return millimeter; #endif } /** * Set the units to be used by the given GenEvent object. If * HepMC does not support units this should be a no-op. */ #ifdef HEPMC_HAS_UNITS static void setUnits(EventT & e, Energy momu, Length lenu) { e.use_units(momu == MeV? HepMC::Units::MEV: HepMC::Units::GEV, lenu == centimeter? HepMC::Units::CM: HepMC::Units::MM); } #else static void setUnits(EventT &, Energy, Length) {} #endif /** Set the \a scale, \f$\alpha_S\f$ (\a aS) and \f$\alpha_{EM}\f$ (\a aEM) for the event \a e. The scale will be scaled with \a unit before given to the GenEvent. */ static void setScaleAndAlphas(EventT & e, Energy2 scale, double aS, double aEM, Energy unit) { e.set_event_scale(sqrt(scale)/unit); e.set_alphaQCD(aS); e.set_alphaQED(aEM); } /** Set the primary vertex, \a v, for the event \a e. */ static void setSignalProcessVertex(EventT & e, VertexT * v) { e.set_signal_process_vertex(v); } /** Set a vertex, \a v, for the event \a e. */ static void addVertex(EventT & e, VertexT * v) { e.add_vertex(v); } /** Create a new particle object with momentum \a p, PDG number \a id and status code \a status. The momentum will be scaled with \a unit which according to the HepMC documentation should be GeV. */ static ParticleT * newParticle(const Lorentz5Momentum & p, long id, int status, Energy unit) { // Note that according to the documentation the momentum is stored in a // HepLorentzVector in GeV (event though the CLHEP standard is MeV). LorentzVector p_scalar = p/unit; ParticleT * genp = new ParticleT(p_scalar, id, status); genp->setGeneratedMass(p.mass()/unit); return genp; } /** Set the polarization directions, \a the and \a phi, for particle \a p. */ static void setPolarization(ParticleT & genp, double the, double phi) { genp.set_polarization(PolarizationT(the, phi)); } /** Set the colour line (with index \a indx) to \a coline for particle \a p. */ static void setColourLine(ParticleT & p, int indx, int coline) { p.set_flow(indx, coline); } /** Create a new vertex. */ static VertexT * newVertex() { return new VertexT(); } /** Add an incoming particle, \a p, to the vertex, \a v. */ static void addIncoming(VertexT & v, ParticleT * p) { v.add_particle_in(p); } /** Add an outgoing particle, \a p, to the vertex, \a v. */ static void addOutgoing(VertexT & v, ParticleT * p) { v.add_particle_out(p); } /** Set the position \a p for the vertex, \a v. The length will be scaled with \a unit which normally should be millimeters. */ static void setPosition(VertexT & v, const LorentzPoint & p, Length unit) { LorentzVector p_scaled = p/unit; v.set_position(p_scaled); } /** Set the beam particles for the event.*/ static void setBeamParticles(EventT & e, ParticleT * p1, ParticleT * p2) { e.set_beam_particles(p1,p2); p1->set_status(4); p2->set_status(4); } /** Set the PDF info for the event. */ #ifdef HEPMC_HAS_PDF_INFO static void setPdfInfo(EventT & e, int id1, int id2, double x1, double x2, double scale, double xf1, double xf2) { e.set_pdf_info(PdfInfoT(id1, id2, x1, x2, scale, xf1, xf2)); } #else static void setPdfInfo(EventT &, int, int, double, double, double, double, double) {} #endif /** Set the cross section info for the event. */ #ifdef HEPMC_HAS_CROSS_SECTION static void setCrossSection(EventT & ev, double xs, double xserr) { HepMC::GenCrossSection x; x.set_cross_section(xs, xserr); ev.set_cross_section(x); } #else static void setCrossSection(EventT &, double, double) {} #endif }; /** * The HepMCTraits class is used to deal with different flavours of * HepMC in the HepMCConverter class. To use the HepMCConverter class * for any flavour of HepMC you have to specialize the * HepMCTraits class accordingly, possibly inheriting the * functionality from the HepMCTraitsBase class and only overriding * the functions and typedefs which are different. For the CLHEP * flavour of HepMC you only need to do template<> struct * HepMCTraits<HepMC::GenEvent>: public * HepMCTraitsBase<HepMC::GenEvent,HepMC::GenParticle,HepMC::GenVertex, * HepMC::Polarization,HepMC::PdfInfo> {}; somewhere inside the ThePEG * namespace. */ template struct HepMCTraits {}; } #endif thepeg-1.8.0.orig/Vectors/LorentzRotation.h0000644000175000017500000002755311747772425017136 0ustar sunsun// -*- C++ -*- // // LorentzRotation.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LorentzRotation_H #define THEPEG_LorentzRotation_H // // This is the declaration of the LorentzRotation class. // #include "SpinOneLorentzRotation.h" #include "SpinHalfLorentzRotation.h" #include "LorentzRotation.fh" namespace ThePEG { /** * The LorentzRotation class combine a SpinOneLorentzRotation and a * spin SpinHalfLorentzRotation to provide members which can perform the * Lorentz transformation of any object. The class ensures that the * two transformations are consistent by only allowing transformations * to be made to both the spin-1 and spin-\f$\frac12\f$ members. */ class LorentzRotation { /** * The external inverseOf needs to be a friend */ friend LorentzRotation inverseOf ( const LorentzRotation & lt ); public: /** @name Constructors and destructor. */ //@{ /** * Default constructor. Gives a unit matrix. */ LorentzRotation() : _half(), _one() {} /** * Constructor giving the components of a Lorentz boost. * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation (double bx, double by, double bz, double gamma=-1.) : _half(bx,by,bz,gamma), _one(bx,by,bz,gamma) {} /** * Constructor giving the vector for a Lorentz boost. * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation (const Boost & b, double gamma=-1.) : _half(b,gamma), _one(b,gamma) {} //@} /** * Returns true if the Identity matrix. */ bool isIdentity() const { return _half.isIdentity() && _one.isIdentity(); } /** * Return the inverse. */ LorentzRotation inverse() const { LorentzRotation output; output._half = _half.inverse(); output._one = _one.inverse(); return output; } /** * Inverts the LorentzRotation matrix. */ LorentzRotation & invert() { return *this=inverse(); } /** * output operator */ std::ostream & print( std::ostream & os ) const; /** @name Set methods for speical cases of simple rotations and boosts */ //@{ /** * Specify the components of a Lorentz Boost * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation & setBoost (double bx, double by, double bz, double gamma=-1.) { _half.setBoost(bx,by,bz,gamma); _one.setBoost(bx,by,bz,gamma); return *this; } /** * Specify a Lorentz Boost as a vector * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation & setBoost (const Boost & b, double gamma=-1.) { _half.setBoost(b,gamma); _one.setBoost(b,gamma); return *this; } /** * Specify a boost by the given factor along the x-axis * @param boost The Lorentz boost */ LorentzRotation & setBoostX (double boost) { _half.setBoostX(boost); _one.setBoost(boost,0,0); return *this; } /** * Specify a boost by the given factor along the y-axis * @param boost The Lorentz boost */ LorentzRotation & setBoostY (double boost) { _half.setBoostY(boost); _one.setBoost(0,boost,0); return *this; } /** * Specify a boost by the given factor along the z-axis * @param boost The Lorentz boost */ LorentzRotation & setBoostZ (double boost) { _half.setBoostZ(boost); _one.setBoost(0,0,boost); return *this; } /** * Specify a rotation about a general axis by the angle given. * @param delta The angle * @param axis The axis */ LorentzRotation & setRotate(double delta, const Axis & axis) { _half.setRotate(delta,axis); _one.setRotate(delta,axis); return *this; } /** * Specify a rotation by the given angle about the x-axis * @param angle The rotation angle */ LorentzRotation & setRotateX (double angle) { _half.setRotateX(angle); _one.setRotateX(angle); return *this; } /** * Specify a rotation by the given angle about the y-axis * @param angle The rotation angle */ LorentzRotation & setRotateY (double angle) { _half.setRotateZ(angle); _one.setRotateZ(angle); return *this; } /** * Specify a rotation by the given angle about the z-axis * @param angle The rotation angle */ LorentzRotation & setRotateZ (double angle) { _half.setRotateZ(angle); _one.setRotateZ(angle); return *this; } //@} /** @name Methods to return the spin-\f$\frac12\f$ and spin-1 transformations */ //@{ /** * The spin-\f$\frac12\f$ transformation */ const SpinHalfLorentzRotation & half() const { return _half; } /** * The spin-1 transformation */ const SpinOneLorentzRotation & one() const { return _one; } /** * Automatically cast to the spin-1 transformation */ operator const SpinOneLorentzRotation & () const { return _one; } //@} /** @name Access methods for the components of the spin-1 rotation */ //@{ /** * The xx component */ double xx() const { return _one.xx(); } /** * The xy component */ double xy() const { return _one.xy(); } /** * The xz component */ double xz() const { return _one.xz(); } /** * The xt component */ double xt() const { return _one.xt(); } /** * The yx component */ double yx() const { return _one.yx(); } /** * The yy component */ double yy() const { return _one.yy(); } /** * The yz component */ double yz() const { return _one.yz(); } /** * The yt component */ double yt() const { return _one.yt(); } /** * The zx component */ double zx() const { return _one.zx(); } /** * The zy component */ double zy() const { return _one.zy(); } /** * The zz component */ double zz() const { return _one.zz(); } /** * The zt component */ double zt() const { return _one.zt(); } /** * The tx component */ double tx() const { return _one.tx(); } /** * The ty component */ double ty() const { return _one.ty(); } /** * The tz component */ double tz() const { return _one.tz(); } /** * The tt component */ double tt() const { return _one.tt(); } //@} /** @name Access methods for the components of the spin-\f$\frac12\f$ rotation */ //@{ /** * The \f$(1,1)\f$ component */ Complex s1s1() const { return _half.s1s1(); } /** * The \f$(1,2)\f$ component */ Complex s1s2() const { return _half.s1s2(); } /** * The \f$(1,3)\f$ component */ Complex s1s3() const { return _half.s1s3(); } /** * The \f$(1,4)\f$ component */ Complex s1s4() const { return _half.s1s4(); } /** * The \f$(1,1)\f$ component */ Complex s2s1() const { return _half.s2s1(); } /** * The \f$(1,1)\f$ component */ Complex s2s2() const { return _half.s2s2(); } /** * The \f$(1,1)\f$ component */ Complex s2s3() const { return _half.s2s3(); } /** * The \f$(1,1)\f$ component */ Complex s2s4() const { return _half.s2s4(); } /** * The \f$(1,1)\f$ component */ Complex s3s1() const { return _half.s3s1(); } /** * The \f$(1,1)\f$ component */ Complex s3s2() const { return _half.s3s2(); } /** * The \f$(1,1)\f$ component */ Complex s3s3() const { return _half.s3s3(); } /** * The \f$(1,1)\f$ component */ Complex s3s4() const { return _half.s3s4(); } /** * The \f$(1,1)\f$ component */ Complex s4s1() const { return _half.s4s1(); } /** * The \f$(1,1)\f$ component */ Complex s4s2() const { return _half.s4s2(); } /** * The \f$(1,1)\f$ component */ Complex s4s3() const { return _half.s4s3(); } /** * The \f$(1,1)\f$ component */ Complex s4s4() const { return _half.s4s4(); } //@} /** @name Transformation and product members */ //@{ /** * Product with a LorentzVector simply returns the rotated vector. */ template LorentzVector operator*(const LorentzVector & lv) const { return one()*lv; } /** * Product with a Lorentz5Vector simply returns the rotated vector. */ template Lorentz5Vector operator*(const Lorentz5Vector & lv) const { return one()*lv; } /** * Product of two LorentzRotations (this) * lt - matrix multiplication * @param lt The LorentzRotation we are multiplying */ LorentzRotation operator * (const LorentzRotation & lt) const { LorentzRotation output; output._half = _half * lt._half; output._one = _one * lt._one; return output; } /** * Multiply by and assign a*=b becomes a= a*b */ LorentzRotation & operator *= (const LorentzRotation & lt) { _one *=lt._one; _half*=lt._half; return *this; } /** * Transform (similar to *= but a.transform(b) becomes a = b*a */ LorentzRotation & transform(const LorentzRotation & lt) { _half.transform(lt._half); _one.transform(lt._one); return *this; } /** * Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT */ LorentzRotation & rotateX(double delta) { _half.rotateX(delta); _one.rotateX(delta); return *this; } /** * Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT */ LorentzRotation & rotateY(double delta) { _half.rotateY(delta); _one.rotateY(delta); return *this; } /** * Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT */ LorentzRotation & rotateZ(double delta) { _half.rotateZ(delta); _one.rotateZ(delta); return *this; } /** * Rotation around specified vector - LT = Rotation(delta,axis)*LT */ LorentzRotation & rotate(double delta, const Axis & axis) { _half.rotate(delta,axis); _one.rotate(delta,axis); return *this; } /** * Pure boost along the x-axis; equivalent to LT = BoostX(beta) * LT */ LorentzRotation & boostX(double beta) { _half.boostX(beta); _one.boostX(beta); return *this; } /** * Pure boost along the y-axis; equivalent to LT = BoostX(beta) * LT */ LorentzRotation & boostY(double beta) { _half.boostY(beta); _one.boostY(beta); return *this; } /** * Pure boost along the z-axis; equivalent to LT = BoostX(beta) * LT */ LorentzRotation & boostZ(double beta) { _half.boostZ(beta); _one.boostZ(beta); return *this; } /** * boost equivalent to LT = Boost(bx,by,bz) * LT * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation & boost(double bx, double by, double bz, double gamma=-1.) { _half.boost(bx,by,bz,gamma); _one.boost(bx,by,bz,gamma); return *this; } /** * boost equivalent to LT = Boost(bv) * LT * @param bv The boost * @param gamma The \f$\gamma\f$ factor (optional) */ LorentzRotation & boost(const Boost & bv, double gamma=-1.) { _half.boost(bv,gamma); _one.boost(bv,gamma); return *this; } //@} private: /** * The spin-\f$\frac12\f$ rotation */ SpinHalfLorentzRotation _half; /** * The spin-1 rotation */ SpinOneLorentzRotation _one; }; /** * Global method to get the inverse */ inline LorentzRotation inverseOf ( const LorentzRotation & lt ) { return lt.inverse(); } /** * output operator */ inline std::ostream & operator<< ( std::ostream & os, const LorentzRotation& lt ) { return lt.print(os); } } #endif /* THEPEG_LorentzRotation_H */ thepeg-1.8.0.orig/Vectors/Makefile.in0000644000175000017500000004527611756366735015662 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Vectors ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGVectors_la_LIBADD = am__objects_1 = LorentzRotation.lo SpinHalfLorentzRotation.lo \ SpinOneLorentzRotation.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGVectors_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGVectors_la_OBJECTS = $(am_libThePEGVectors_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGVectors_la_SOURCES) DIST_SOURCES = $(libThePEGVectors_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = LorentzRotation.cc SpinHalfLorentzRotation.cc SpinOneLorentzRotation.cc DOCFILES = Lorentz5Vector.h LorentzRotation.h LorentzVector.h \ ThreeVector.h Transverse.h SpinOneLorentzRotation.h \ SpinHalfLorentzRotation.h HepMCTraits.h HepMCConverter.h INCLUDEFILES = $(DOCFILES) Lorentz5Vector.fh \ LorentzRotation.fh LorentzVector.fh \ ThreeVector.fh Transverse.fh \ SpinOneLorentzRotation.fh \ HepMCConverter.tcc noinst_LTLIBRARIES = libThePEGVectors.la libThePEGVectors_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Vectors/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Vectors/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGVectors.la: $(libThePEGVectors_la_OBJECTS) $(libThePEGVectors_la_DEPENDENCIES) $(EXTRA_libThePEGVectors_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGVectors_la_OBJECTS) $(libThePEGVectors_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LorentzRotation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpinHalfLorentzRotation.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SpinOneLorentzRotation.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Vectors/HepMCConverter.h0000644000175000017500000001367411747772425016604 0ustar sunsun// -*- C++ -*- // // HepMCConverter.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_HepMCConverter_H #define ThePEG_HepMCConverter_H // This is the declaration of the HepMCConverter class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/EventRecord/Event.h" #include "HepMCTraits.h" namespace ThePEG { /** * The HepMCConverter defines only one public static function which * converts a ThePEG::Event object to a * HepMC::GenEvent. All mother-daughter relationships and * colour information is preserved. * * @see Event * @see Particle * * @author Leif Lönnblad */ template > class HepMCConverter { public: /** @cond EXCEPTIONCLASSES */ /** Exception class for HepMCConverter. */ struct HepMCConverterException: public Exception {}; /** @endcond */ /** * Help class to represent a temporary vertex which can be * converted to a GenVertex. */ struct Vertex { /** Particles going in to the vertex. */ tcParticleSet in; /** Particles going out of the vertex. */ tcParticleSet out; }; /** Forward typedefs from Traits class. */ typedef typename Traits::ParticleT GenParticle; /** Forward typedefs from Traits class. */ typedef typename Traits::EventT GenEvent; /** Forward typedefs from Traits class. */ typedef typename Traits::VertexT GenVertex; /** Forward typedefs from Traits class. */ typedef typename Traits::PdfInfoT PdfInfo; /** Map ThePEG particles to HepMC particles. */ typedef map ParticleMap; /** Map ThePEG colour lines to HepMC colour indices. */ typedef map FlowMap; /** Map ThePEG particles to vertices. */ typedef map VertexMap; /** Map vertices to GenVertex */ typedef map GenVertexMap; public: /** * Convert a ThePEG::Event to a HepMC::GenEvent. The caller is * responsible for deleting the constructed GenEvent object. If \a * nocopies is true, only final copies of particles connected with * Particle::previous() and Particle::next() will be entered in the * HepMC::GenEvent. In the GenEvent object, the energy/momentum * variables will be in units of \a eunit and lengths variables in * units of \a lunit. */ static GenEvent * convert(const Event & ev, bool nocopies = false, Energy eunit = Traits::defaultEnergyUnit(), Length lunit = Traits::defaultLengthUnit()); /** * Convert a ThePEG::Event to a HepMC::GenEvent. The caller supplies * a GenEvent object, \a gev, which will be filled. If \a nocopies * is true, only final copies of particles connected with * Particle::previous() and Particle::next() will be entered in the * HepMC::GenEvent. In the GenEvent object, the energy/momentum * variables will be in units of \a eunit and lengths variables in * units of \a lunit. */ static void convert(const Event & ev, GenEvent & gev, bool nocopies, Energy eunit, Length lunit); /** * Convert a ThePEG::Event to a HepMC::GenEvent. The caller supplies * a GenEvent object, \a gev, which will be filled. If \a nocopies * is true, only final copies of particles connected with * Particle::previous() and Particle::next() will be entered in the * HepMC::GenEvent. In the GenEvent object, the energy/momentum * variables will be in units of \a eunit and lengths variables in * units of \a lunit. */ static void convert(const Event & ev, GenEvent & gev, bool nocopies = false); private: /** * The proper constructors are private. The class is only * instantiated within the convert method. */ HepMCConverter(const Event & ev, bool nocopies, Energy eunit, Length lunit); /** * The proper constructors are private. The class is only * instantiated within the convert method. */ HepMCConverter(const Event & ev, GenEvent & gev, bool nocopies, Energy eunit, Length lunit); /** * Common init function used by the constructors. */ void init(const Event & ev, bool nocopies); /** * Default constructor is unimplemented and private and should never be used. */ HepMCConverter(); /** * Copy constructor is unimplemented and private and should never be used. */ HepMCConverter(const HepMCConverter &); /** * Assignment is unimplemented and private and should never be used. */ HepMCConverter & operator=(const HepMCConverter &); private: /** * Create a GenParticle from a ThePEG Particle. */ GenParticle * createParticle(tcPPtr p) const; /** * Join the decay vertex of the parent with the decay vertex of the * child. */ void join(tcPPtr parent, tcPPtr child); /** * Create a GenVertex from a temporary Vertex. */ GenVertex * createVertex(Vertex * v); /** * Create and set a PdfInfo object for the event */ void setPdfInfo(const Event & e); private: /** * The constructed GenEvent. */ GenEvent * geneve; /** * The translation table between the ThePEG particles and the * GenParticles. */ ParticleMap pmap; /** * The translation table between ThePEG ColourLine objects and HepMC * Flow indices. */ FlowMap flowmap; /** * All temporary vertices created. */ vector vertices; /** * The mapping of particles to their production vertices. */ VertexMap prov; /** * The mapping of particles to their decy vertices. */ VertexMap decv; /** * The mapping between temporary vertices and the created GenVertex Objects. */ GenVertexMap vmap; /** * The energy unit to be used in the GenEvent. */ Energy energyUnit; /** * The length unit to be used in the GenEvent. */ Length lengthUnit; }; } #include "HepMCConverter.tcc" #endif /* ThePEG_HepMCConverter_H */ thepeg-1.8.0.orig/Vectors/Makefile.am0000644000175000017500000000122211747772425015625 0ustar sunsunmySOURCES = LorentzRotation.cc SpinHalfLorentzRotation.cc SpinOneLorentzRotation.cc DOCFILES = Lorentz5Vector.h LorentzRotation.h LorentzVector.h \ ThreeVector.h Transverse.h SpinOneLorentzRotation.h \ SpinHalfLorentzRotation.h HepMCTraits.h HepMCConverter.h INCLUDEFILES = $(DOCFILES) Lorentz5Vector.fh \ LorentzRotation.fh LorentzVector.fh \ ThreeVector.fh Transverse.fh \ SpinOneLorentzRotation.fh \ HepMCConverter.tcc noinst_LTLIBRARIES = libThePEGVectors.la libThePEGVectors_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/Vectors/Transverse.h0000644000175000017500000001431411747772425016104 0ustar sunsun// -*- C++ -*- // // Transverse.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Transverse_H #define ThePEG_Transverse_H // This is the declaration of the Transverse class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Vectors/Lorentz5Vector.h" #include "Transverse.fh" namespace ThePEG { /** * Transverse represents the transverse components of a * LorentzVector. It inherits from * std::pair and can be used * anywhere such a pair is called for. It can also be created directly * from a ThreeVector, LorentzVector and * Lorentz5Momentum. * * @see Lorentz5Vector */ template class Transverse: public pair { public: /** Template argument typedef. */ typedef typename BinaryOpTraits::MulT Value2; /** Template argument typedef. */ typedef pair BasePair; public: /** @name Constructors. */ //@{ /** * Default constructor. */ Transverse() : BasePair(Value(), Value()) {} /** * Constructor from underlying representation. */ Transverse(const BasePair & p) : BasePair(p) {} /** * Constructor from x and y components. */ Transverse(Value x, Value y) : BasePair(x, y) {} /** * Constructor taking the transverse parts of a ThreeVector. */ Transverse(const ThreeVector & p) : BasePair(p.x(), p.y()) {} /** * Constructor taking the transverse parts of a LorentzVector. */ Transverse(const LorentzVector & p) : BasePair(p.x(), p.y()) {} /** * Constructor taking the transverse parts of a Lorentz5Vector. */ Transverse(const Lorentz5Vector & p) : BasePair(p.x(), p.y()) {} //@} /** @name Assignment operators. */ //@{ /** * Assignment from underlying representation. */ const Transverse & operator=(const BasePair & p) { BasePair::operator=(p); return *this; } /** * Assignment taking the transverse parts of a ThreeVector. */ const Transverse & operator=(const ThreeVector & p) { BasePair::operator=(BasePair(p.x(), p.y())); return *this; } /** * Assignment taking the transverse parts of a LorentzVector. */ const Transverse & operator=(const LorentzVector & p) { BasePair::operator=(BasePair(p.x(), p.y())); return *this; } /** * Assignment taking the transverse parts of a Lorentz5Vector. */ const Transverse & operator=(const Lorentz5Vector & p) { BasePair::operator=(BasePair(p.x(), p.y())); return *this; } //@} /** @name Arithmetric operations */ //@{ /** * Unary minus. */ Transverse operator-() const { return Transverse(-x(), -y()); } /** * Binary minus. */ Transverse operator-(const Transverse & pt) const { return Transverse(x() - pt.x(), y() - pt.y()); } /** * Assign-subtract. */ Transverse & operator-=(const Transverse & pt) { BasePair::first -= pt.x(); BasePair::second -= pt.y(); return *this; } /** * Addition. */ Transverse operator+(const Transverse & pt) const { return Transverse(x() + pt.x(), y() + pt.y()); } /** * Assign-add. */ Transverse & operator+=(const Transverse & pt) { BasePair::first += pt.x(); BasePair::second += pt.y(); return *this; } /** * Multiply-assign with a scalar. */ inline Transverse & operator*=(double a) { BasePair::first *= a; BasePair::second *= a; return *this; } /** * Divide-assign with a scalar. */ inline Transverse & operator/=(double a) { BasePair::first /= a; BasePair::second /= a; return *this; } //@} /** @name Access coordinates. */ //@{ /** * The x-component. */ Value x() const { return BasePair::first; } /** * The y-component. */ Value y() const { return BasePair::second; } /** * The magnitude squared. */ Value2 pt2() const { return sqr(x()) + sqr(y()); } /** * The magnitude. */ Value pt() const { return sqrt(pt2()); } /** * The azimuth angle. */ double phi() const { return atan2(y(), x()); } //@} }; /** Output a Transverse with units to a stream. */ template void ounitstream(OStream & os, const Transverse & p, UT & u) { os << ounit(p.x(), u) << ounit(p.y(), u); } /** Input a Transverse with units from a stream. */ template void iunitstream(IStream & is, Transverse & p, UT & u) { T x, y; is >> iunit(x, u) >> iunit(y, u); p = Transverse(x, y); } /** Multiply a Transverse with a number. */ template inline Transverse operator*(Transverse a, double b) { return a *= b; } /** Multiply a number with a Transverse. */ template inline Transverse operator*(double b, Transverse a) { return a *= b; } /** Multiply a (unitful) number with a Transverse. */ template inline Transverse::MulT> operator*(ValueB a, const Transverse & v) { typedef typename BinaryOpTraits::MulT ResultT; return Transverse(a*v.x(), a*v.y()); } /** Multiply a Transverse with a (unitful) number. */ template inline Transverse::MulT> operator*(const Transverse & v, ValueB a) { typedef typename BinaryOpTraits::MulT ResultT; return Transverse(a*v.x(), a*v.y()); } /** Divide a Transverse by a number. */ template inline Transverse operator/(const Transverse & v, Value a) { return Transverse(v.x()/a, v.y()/a); } /** Divide a Transverse by a (unitful) number. */ template inline Transverse::DivT> operator/(const Transverse & v, ValueB b) { typedef typename BinaryOpTraits::DivT ResultT; return Transverse(v.x()/b, v.y()/b); } } #endif /* ThePEG_Transverse_H */ thepeg-1.8.0.orig/Vectors/SpinOneLorentzRotation.h0000644000175000017500000002367611747772425020434 0ustar sunsun// -*- C++ -*- // // SpinOneLorentzRotation.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_SpinOneLorentzRotation_H #define ThePEG_SpinOneLorentzRotation_H #include "ThePEG/Helicity/HelicityDefinitions.h" #include "ThePEG/Helicity/LorentzTensor.fh" #include "ThePEG/Helicity/LorentzRSSpinor.fh" #include "ThePEG/Helicity/LorentzRSSpinorBar.fh" #include "ThreeVector.h" #include namespace ThePEG { /** * The SpinOneLorentzRotation class is ... */ class SpinOneLorentzRotation { public: /** @name Constructors and destructor. */ //@{ /** * Default constructor. Gives a unit matrix. */ SpinOneLorentzRotation() : matrix_(16) { xx_() = yy_() = zz_() = tt_() = 1.0; } /** * Constructor giving the components of a Lorentz boost. * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinOneLorentzRotation (double bx, double by, double bz, double gamma=-1.) : matrix_(16) { setBoost(bx,by,bz,gamma); } /** * Constructor giving the vector for a Lorentz boost. * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ explicit SpinOneLorentzRotation (const Boost & b, double gamma=-1.) : matrix_(16) { setBoost(b.x(), b.y(), b.z(),gamma); } //@} /** * Returns true if the Identity matrix. */ bool isIdentity() const; /** * Return the inverse. */ SpinOneLorentzRotation inverse() const; /** * Inverts the SpinOneLorentzRotation matrix. */ SpinOneLorentzRotation & invert() { return *this = inverse(); } /** * output operator */ std::ostream & print( std::ostream & os ) const; /** @name Set methods for speical cases of simple rotations and boosts */ //@{ /** * Specify the components of a Lorentz Boost * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinOneLorentzRotation & setBoost (double bx, double by, double bz, double gamma=-1.); /** * Specify a Lorentz Boost as a vector * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ SpinOneLorentzRotation & setBoost (const Boost & b, double gamma=-1.) { return setBoost(b.x(), b.y(), b.z(),gamma); } /** * Specify a rotation about a general axis by the angle given. * @param delta The angle * @param axis The axis */ SpinOneLorentzRotation & setRotate(double delta, const Axis & axis); /** * Specify a rotation by the given angle about the x-axis * @param angle The rotation angle */ SpinOneLorentzRotation & setRotateX (double angle); /** * Specify a rotation by the given angle about the y-axis * @param angle The rotation angle */ SpinOneLorentzRotation & setRotateY (double angle); /** * Specify a rotation by the given angle about the z-axis * @param angle The rotation angle */ SpinOneLorentzRotation & setRotateZ (double angle); //@} /** @name Access methods for the components of the spin-1 rotation */ //@{ /** * The xx component */ double xx() const { return matrix_[ 0]; } /** * The xy component */ double xy() const { return matrix_[ 1]; } /** * The xz component */ double xz() const { return matrix_[ 2]; } /** * The xt component */ double xt() const { return matrix_[ 3]; } /** * The yx component */ double yx() const { return matrix_[ 4]; } /** * The yy component */ double yy() const { return matrix_[ 5]; } /** * The yz component */ double yz() const { return matrix_[ 6]; } /** * The yt component */ double yt() const { return matrix_[ 7]; } /** * The zx component */ double zx() const { return matrix_[ 8]; } /** * The zy component */ double zy() const { return matrix_[ 9]; } /** * The zz component */ double zz() const { return matrix_[10]; } /** * The zt component */ double zt() const { return matrix_[11]; } /** * The tx component */ double tx() const { return matrix_[12]; } /** * The ty component */ double ty() const { return matrix_[13]; } /** * The tz component */ double tz() const { return matrix_[14]; } /** * The tt component */ double tt() const { return matrix_[15]; } //@} /** @name Transformation and product members */ //@{ /** * Product with a LorentzVector simply returns the rotated vector. */ template LorentzVector operator*(const LorentzVector & v) const { return LorentzVector (xx()*v.x() + xy()*v.y() + xz()*v.z() + xt()*v.t(), yx()*v.x() + yy()*v.y() + yz()*v.z() + yt()*v.t(), zx()*v.x() + zy()*v.y() + zz()*v.z() + zt()*v.t(), tx()*v.x() + ty()*v.y() + tz()*v.z() + tt()*v.t()); } /** * Product with a Lorentz5Vector simply returns the rotated vector. */ template Lorentz5Vector operator*(const Lorentz5Vector & v) const { return Lorentz5Vector (xx()*v.x() + xy()*v.y() + xz()*v.z() + xt()*v.t(), yx()*v.x() + yy()*v.y() + yz()*v.z() + yt()*v.t(), zx()*v.x() + zy()*v.y() + zz()*v.z() + zt()*v.t(), tx()*v.x() + ty()*v.y() + tz()*v.z() + tt()*v.t()); } /** * Product of two LorentzRotations (this) * lt - matrix multiplication * @param lt The LorentzRotation we are multiplying */ SpinOneLorentzRotation operator * (const SpinOneLorentzRotation & lt) const; /** * Multiply by and assign a*=b becomes a= a*b */ SpinOneLorentzRotation & operator *= (const SpinOneLorentzRotation & lt) { return *this = *this * lt; } /** * Transform (similar to *= but a.transform(b) becomes a = b*a */ SpinOneLorentzRotation & transform (const SpinOneLorentzRotation & lt) { return *this = lt * *this; } /** * Rotation around the x-axis; equivalent to LT = RotationX(delta) * LT */ SpinOneLorentzRotation & rotateX(double delta) { SpinOneLorentzRotation tmp; tmp.setRotateX(delta); return *this = tmp * *this; } /** * Rotation around the y-axis; equivalent to LT = RotationY(delta) * LT */ SpinOneLorentzRotation & rotateY(double delta) { SpinOneLorentzRotation tmp; tmp.setRotateY(delta); return *this = tmp * *this; } /** * Rotation around the z-axis; equivalent to LT = RotationZ(delta) * LT */ SpinOneLorentzRotation & rotateZ(double delta) { SpinOneLorentzRotation tmp; tmp.setRotateZ(delta); return *this = tmp * *this; } /** * Rotation around specified vector - LT = Rotation(delta,axis)*LT */ SpinOneLorentzRotation & rotate(double delta, const Axis & axis) { SpinOneLorentzRotation tmp; tmp.setRotate(delta, axis); return *this = tmp * *this; } /** * Pure boost along the x-axis; equivalent to LT = BoostX(beta) * LT */ SpinOneLorentzRotation & boostX(double beta) { return *this = SpinOneLorentzRotation(beta,0,0) * *this; } /** * Pure boost along the y-axis; equivalent to LT = BoostX(beta) * LT */ SpinOneLorentzRotation & boostY(double beta) { return *this = SpinOneLorentzRotation(0,beta,0) * *this; } /** * Pure boost along the z-axis; equivalent to LT = BoostX(beta) * LT */ SpinOneLorentzRotation & boostZ(double beta) { return *this = SpinOneLorentzRotation(0,0,beta) * *this; } /** * boost equivalent to LT = Boost(bx,by,bz) * LT * @param bx The x-component of the boost * @param by The y-component of the boost * @param bz The z-component of the boost * @param gamma The \f$\gamma\f$ factor (optional) */ SpinOneLorentzRotation & boost(double bx, double by, double bz, double gamma=-1.) { return *this = SpinOneLorentzRotation(bx,by,bz,gamma) * *this; } /** * boost equivalent to LT = Boost(bv) * LT * @param b The boost vector * @param gamma The \f$\gamma\f$ factor (optional) */ SpinOneLorentzRotation & boost(const Boost & b, double gamma=-1.) { return *this = SpinOneLorentzRotation(b.x(),b.y(),b.z(),gamma) * *this; } //@} private: template friend class Helicity::LorentzTensor; template friend class Helicity::LorentzRSSpinor; template friend class Helicity::LorentzRSSpinorBar; /// Matrix components, order: \f$(xx, xy, \ldots, tz, tt)\f$. vector matrix_; /// Constructor from doubles. SpinOneLorentzRotation (double xx, double xy, double xz, double xt, double yx, double yy, double yz, double yt, double zx, double zy, double zz, double zt, double tx, double ty, double tz, double tt); /// Component access by index: x=0, t=3. double operator()(unsigned int i, unsigned int j) const { return matrix_[4*i + j]; } /// @name Component access. //@{ double & xx_() { return matrix_[ 0]; } double & xy_() { return matrix_[ 1]; } double & xz_() { return matrix_[ 2]; } double & xt_() { return matrix_[ 3]; } double & yx_() { return matrix_[ 4]; } double & yy_() { return matrix_[ 5]; } double & yz_() { return matrix_[ 6]; } double & yt_() { return matrix_[ 7]; } double & zx_() { return matrix_[ 8]; } double & zy_() { return matrix_[ 9]; } double & zz_() { return matrix_[10]; } double & zt_() { return matrix_[11]; } double & tx_() { return matrix_[12]; } double & ty_() { return matrix_[13]; } double & tz_() { return matrix_[14]; } double & tt_() { return matrix_[15]; } //@} }; /** * output operator */ inline std::ostream & operator<< ( std::ostream & os, const SpinOneLorentzRotation& lt ) { return lt.print(os); } } #endif /* ThePEG_SpinOneLorentzRotation_H */ thepeg-1.8.0.orig/Vectors/LorentzVector.h0000644000175000017500000005212111755457015016560 0ustar sunsun// -*- C++ -*- // // LorentzVector.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 2006-2011 David Grellscheid, Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_LorentzVector_H #define ThePEG_LorentzVector_H /** * @file LorentzVector.h contains the LorentzVector class. Lorentz * vectors can be created with any unit type as template parameter. * All basic mathematical operations are supported, as well as a * subset of the CLHEP LorentzVector functionality. */ #include "LorentzVector.fh" #include "ThePEG/Utilities/Direction.h" #include "ThePEG/Utilities/UnitIO.h" #include "LorentzRotation.h" #include "ThreeVector.h" /// Debug helper function #ifdef NDEBUG #define ERROR_IF(condition,message) if (false) {} #else #define ERROR_IF(condition,message) \ if ( (condition) ) throw ThePEG::Exception( (message) , ThePEG::Exception::eventerror) #endif namespace ThePEG { template class LorentzVector; /** * A 4-component Lorentz vector. It can be created with any unit type * as template parameter. All basic mathematical operations are * supported, as well as a subset of the CLHEP LorentzVector * functionality. */ template class LorentzVector { private: /// Value squared typedef typename BinaryOpTraits::MulT Value2; public: /** @name Constructors. */ //@{ LorentzVector() : theX(), theY(), theZ(), theT() {} LorentzVector(Value x, Value y, Value z, Value t) : theX(x), theY(y), theZ(z), theT(t) {} LorentzVector(const ThreeVector & v, Value t) : theX(v.x()), theY(v.y()), theZ(v.z()), theT(t) {} template LorentzVector(const LorentzVector & v) : theX(v.x()), theY(v.y()), theZ(v.z()), theT(v.t()) {} //@} /// Assignment operator template LorentzVector & operator=(const LorentzVector & b) { setX(b.x()); setY(b.y()); setZ(b.z()); setT(b.t()); return *this; } public: /// @name Component access methods. //@{ Value x() const { return theX; } Value y() const { return theY; } Value z() const { return theZ; } Value t() const { return theT; } Value e() const { return t(); } //@} /// @name Component set methods. //@{ void setX(Value x) { theX = x; } void setY(Value y) { theY = y; } void setZ(Value z) { theZ = z; } void setT(Value t) { theT = t; } void setE(Value e) { setT(e); } //@} public: /// Access to the 3-component part. ThreeVector vect() const { return ThreeVector(x(),y(),z()); } /// Cast to the 3-component part. operator ThreeVector() const { return vect(); } /// Set the 3-component part. void setVect(const ThreeVector & p) { theX = p.x(); theY = p.y(); theZ = p.z(); } public: /// The complex conjugate vector. LorentzVector conjugate() const { return LorentzVector(conj(x()),conj(y()),conj(z()),conj(t())); } /// Squared magnitude \f$x^\mu\,x_\mu=t^2 - \vec{x}^2\f$. Value2 m2() const { return (t()-z())*(t()+z()) - sqr(x()) - sqr(y()); } /// Squared magnitude with another vector Value2 m2(const LorentzVector & a) const { Value tt(a.t()+t()),zz(a.z()+z()); return (tt-zz)*(tt+zz)-sqr(a.x()+x())-sqr(a.y()+y()); } /// Magnitude (signed) \f$\pm\sqrt{|t^2 - \vec{x}^2|}\f$. Value m() const { Value2 tmp = m2(); return tmp < Value2() ? -Value(sqrt(-tmp)) : Value(sqrt(tmp)); } /// Transverse mass squared \f$t^2-z^2\f$. Value2 mt2() const { return (t()-z())*(t()+z()); } /// Transverse mass (signed) \f$\pm\sqrt{|t^2 - z^2|}\f$. Value mt() const { Value2 tmp = mt2(); return tmp < Value2() ? -Value(sqrt(-tmp)) : Value(sqrt(tmp)); } /// Squared transverse component of the spatial vector \f$x^2+y^2\f$. Value2 perp2() const { return sqr(x()) + sqr(y()); } /// Transverse component of the spatial vector \f$\pm\sqrt{x^2 + y^2}\f$. Value perp() const { return sqrt(perp2()); } /** * Squared transverse component of the spatial vector with respect to the * given axis. */ template Value2 perp2(const ThreeVector & p) const { return vect().perp2(p); } /** * Transverse component of the spatial vector with respect to the * given axis. */ template Value perp(const ThreeVector & p) const { return vect().perp(p); } /// Transverse energy squared. Value2 et2() const { Value2 pt2 = vect().perp2(); return pt2 == Value2() ? Value2() : e()*e() * pt2/(pt2+z()*z()); } /// Transverse energy (signed). Value et() const { Value2 etet = et2(); return e() < Value() ? -sqrt(etet) : sqrt(etet); } /// Transverse energy squared with respect to the given axis. Value2 et2(const ThreeVector & v) const { Value2 pt2 = vect().perp2(v); Value pv = vect().dot(v.unit()); return pt2 == Value2() ? Value2() : e()*e() * pt2/(pt2+pv*pv); } /// Transverse energy with respect to the given axis (signed). Value et(const ThreeVector & v) const { Value2 etet = et2(v); return e() < Value() ? -sqrt(etet) : sqrt(etet); } /// @name Spherical coordinates for the spatial part. //@{ /// Radius squared. Value2 rho2() const { return sqr(x()) + sqr(y()) + sqr(z()); } /// Radius. Value rho() const { return sqrt(rho2()); } /// Set new radius. void setRho(Value newRho) { Value oldRho = rho(); if (oldRho == Value()) return; double factor = newRho / oldRho; setX(x()*factor); setY(y()*factor); setZ(z()*factor); } /// Polar angle. double theta() const { assert(!(x() == Value() && y() == Value() && z() == Value())); return atan2(perp(),z()); } /// Cosine of the polar angle. double cosTheta() const { Value ptot = rho(); assert( ptot > Value() ); return z() / ptot; } /// Azimuthal angle. double phi() const { return atan2(y(),x()) ; } //@} /// Pseudorapidity of spatial part. double eta() const { Value m = rho(); if ( m == Value() ) return 0.0; ERROR_IF(m == z() || m == -z(), "Pseudorapidity for 3-vector along z-axis undefined."); return 0.5 * log( (m+z()) / (m-z()) ); } /// Spatial angle with another vector. double angle(const LorentzVector & w) const { return vect().angle(w.vect()); } /// Rapidity \f$\frac{1}{2}\ln\frac{t+z}{t-z} \f$ double rapidity() const { ERROR_IF(abs(t()) == abs(z()),"rapidity for 4-vector with |E| = |Pz| -- infinite result"); ERROR_IF(abs(t()) < abs(z()) ,"rapidity for spacelike 4-vector with |E| < |Pz| -- undefined"); double q = (t() + z()) / (t() - z()); return 0.5 * log(q); } /// Rapidity with respect to another vector double rapidity(const Axis & ref) const { double r = ref.mag2(); ERROR_IF(r == 0,"A zero vector used as reference to LorentzVector rapidity"); Value vdotu = vect().dot(ref)/sqrt(r); ERROR_IF(abs(t()) == abs(vdotu),"rapidity for 4-vector with |E| = |Pu| -- infinite result"); ERROR_IF(abs(t()) < abs(vdotu),"rapidity for spacelike 4-vector with |E|<|P*ref| undefined"); double q = (t() + vdotu) / (t() - vdotu); return 0.5 * log(q); } /** * Boost from reference frame into this vector's rest * frame: \f$\frac{\vec{x}}{t}\f$. */ Boost boostVector() const { if (t() == Value()) { if (rho2() == Value2()) return Boost(); else ERROR_IF(true,"boostVector computed for LorentzVector with t=0 -- infinite result"); } // result will make analytic sense but is physically meaningless ERROR_IF(m2() <= Value2(),"boostVector computed for a non-timelike LorentzVector"); return vect() * (1./t()); } /** * Boost from reference frame into this vector's rest * frame: \f$-\frac{\vec{x}}{t}\f$. */ Boost findBoostToCM() const { return -boostVector(); } /// Returns the positive light-cone component \f$t + z\f$. Value plus() const { return t() + z(); } /// Returns the negative light-cone component \f$t - z\f$. Value minus() const { return t() - z(); } /// Are two vectors nearby, using Euclidean measure \f$t^2 + |\vec{x}|^2\f$? bool isNear(const LorentzVector & w, double epsilon) const { Value2 limit = abs(vect().dot(w.vect())); limit += 0.25 * sqr( t() + w.t() ); limit *= sqr(epsilon); Value2 delta = (vect() - w.vect()).mag2(); delta += sqr( t() - w.t() ); return (delta <= limit); } /// Rotate the vector. Resets \f$x^\mu\rightarrow\mathsf{M}^\mu_\nu x^\nu\f$. LorentzVector & transform(const SpinOneLorentzRotation & m) { return *this = m.operator*(*this); } /// Rotate the vector. Resets \f$x^\mu\rightarrow\mathsf{M}^\mu_\nu x^\nu\f$. LorentzVector & operator*=(const SpinOneLorentzRotation & m) { return transform(m); } /// Dot product with metric \f$(+,-,-,-)\f$ template typename BinaryOpTraits::MulT dot(const LorentzVector & a) const { return t() * a.t() - ( x() * a.x() + y() * a.y() + z() * a.z() ); } public: /** * Apply boost. * * @param bx Component x of the boost. * @param by Component y of the boost. * @param bz Component z of the boost. * @param gamma Optional gamma parameter for higher numerical * accuracy. The user has to ensure consistency. If not given, it * will be calculated as \f$\gamma=1/\sqrt{1-\beta^2}\f$. * */ LorentzVector & boost(double bx, double by, double bz, double gamma=-1.) { double b2 = bx*bx + by*by + bz*bz; if(gamma < 0.) gamma = 1.0 / sqrt(1.0 - b2); Value bp = bx*x() + by*y() + bz*z(); double gamma2 = b2 > 0 ? (gamma - 1.0)/b2 : 0.0; setX(x() + gamma2*bp*bx + gamma*bx*t()); setY(y() + gamma2*bp*by + gamma*by*t()); setZ(z() + gamma2*bp*bz + gamma*bz*t()); setT(gamma*(t() + bp)); return *this; } /** * Apply boost. * * @param b Three-vector giving the boost. * * @param gamma Optional gamma parameter for higher numerical * accuracy. The user has to ensure consistency. If not given, it * will be calculated as \f$\gamma=1/\sqrt{1-\beta^2}\f$. * */ LorentzVector & boost(Boost b, double gamma=-1.) { return boost(b.x(), b.y(), b.z(),gamma); } /** * Apply rotation around the x-axis. * * @param phi Angle in radians. */ LorentzVector & rotateX (double phi) { double sinphi = sin(phi); double cosphi = cos(phi); Value ty = y() * cosphi - z() * sinphi; theZ = z() * cosphi + y() * sinphi; theY = ty; return *this; } /** * Apply rotation around the y-axis. * * @param phi Angle in radians. */ LorentzVector & rotateY (double phi) { double sinphi = sin(phi); double cosphi = cos(phi); Value tz = z() * cosphi - x() * sinphi; theX = x() * cosphi + z() * sinphi; theZ = tz; return *this; } /** * Apply rotation around the z-axis. * * @param phi Angle in radians. */ LorentzVector & rotateZ (double phi) { double sinphi = sin(phi); double cosphi = cos(phi); Value tx = x() * cosphi - y() * sinphi; theY = y() * cosphi + x() * sinphi; theX = tx; return *this; } /** * Rotate the reference frame to a new z-axis. */ LorentzVector & rotateUz (const Axis & axis) { Axis ax = axis.unit(); double u1 = ax.x(); double u2 = ax.y(); double u3 = ax.z(); double up = u1*u1 + u2*u2; if (up>0) { up = sqrt(up); Value px = x(), py = y(), pz = z(); setX( (u1*u3*px - u2*py)/up + u1*pz ); setY( (u2*u3*px + u1*py)/up + u2*pz ); setZ( -up*px + u3*pz ); } else if (u3 < 0.) { setX(-x()); setZ(-z()); } return *this; } /** * Apply a rotation. * @param angle Rotation angle in radians. * @param axis Rotation axis. */ template LorentzVector & rotate(double angle, const ThreeVector & axis) { if (angle == 0.0) return *this; const U ll = axis.mag(); assert( ll > U() ); const double sa = sin(angle), ca = cos(angle); const double dx = axis.x()/ll, dy = axis.y()/ll, dz = axis.z()/ll; const Value xx = x(), yy = y(), zz = z(); setX((ca+(1-ca)*dx*dx) * xx +((1-ca)*dx*dy-sa*dz) * yy +((1-ca)*dx*dz+sa*dy) * zz ); setY(((1-ca)*dy*dx+sa*dz) * xx +(ca+(1-ca)*dy*dy) * yy +((1-ca)*dy*dz-sa*dx) * zz ); setZ(((1-ca)*dz*dx-sa*dy) * xx +((1-ca)*dz*dy+sa*dx) * yy +(ca+(1-ca)*dz*dz) * zz ); return *this; } public: /// @name Mathematical assignment operators. //@{ template LorentzVector & operator+=(const LorentzVector & a) { theX += a.x(); theY += a.y(); theZ += a.z(); theT += a.t(); return *this; } template LorentzVector & operator-=(const LorentzVector & a) { theX -= a.x(); theY -= a.y(); theZ -= a.z(); theT -= a.t(); return *this; } LorentzVector & operator*=(double a) { theX *= a; theY *= a; theZ *= a; theT *= a; return *this; } LorentzVector & operator/=(double a) { theX /= a; theY /= a; theZ /= a; theT /= a; return *this; } //@} private: /// @name Vector components //@{ Value theX; Value theY; Value theZ; Value theT; //@} }; /// @name Basic mathematical operations //@{ template inline LorentzVector operator/(const LorentzVector & v, Value a) { return LorentzVector(v.x()/a, v.y()/a, v.z()/a, v.t()/a); } inline LorentzVector operator/(const LorentzVector & v, Complex a) { return LorentzVector(v.x()/a, v.y()/a, v.z()/a, v.t()/a); } template inline LorentzVector operator-(const LorentzVector & v) { return LorentzVector(-v.x(),-v.y(),-v.z(),-v.t()); } template inline LorentzVector operator+(LorentzVector a, const LorentzVector & b) { return a += b; } template inline LorentzVector operator-(LorentzVector a, const LorentzVector & b) { return a -= b; } template inline LorentzVector operator*(const LorentzVector & a, double b) { return LorentzVector(a.x()*b, a.y()*b, a.z()*b, a.t()*b); } template inline LorentzVector operator*(double b, LorentzVector a) { return a *= b; } template inline LorentzVector::MulT> operator*(ValueB a, const LorentzVector & v) { typedef typename BinaryOpTraits::MulT ResultT; return LorentzVector(a*v.x(), a*v.y(), a*v.z(), a*v.t()); } template inline LorentzVector::MulT> operator*(const LorentzVector & v, ValueB b) { return b*v; } template inline LorentzVector::DivT> operator/(const LorentzVector & v, ValueB b) { typedef typename BinaryOpTraits::DivT ResultT; return LorentzVector(v.x()/b, v.y()/b, v.z()/b, v.t()/b); } //@} /// @name Scalar product with metric \f$(+,-,-,-)\f$ //@{ template inline typename BinaryOpTraits::MulT operator*(const LorentzVector & a, const LorentzVector & b) { return a.dot(b); } template inline typename BinaryOpTraits::MulT operator*(const LorentzVector & a, const LorentzVector & b) { return a.dot(b); } //@} /// Equality template inline bool operator==(const LorentzVector & a, const LorentzVector & b) { return a.x() == b.x() && a.y() == b.y() && a.z() == b.z() && a.t() == b.t(); } /// Stream output. Format \f$(x,y,z;t)\f$. inline ostream & operator<< (ostream & os, const LorentzVector & v) { return os << "(" << v.x() << "," << v.y() << "," << v.z() << ";" << v.t() << ")"; } /** Return the positive light-cone component. Or negative if the * current Direction<0> is reversed. */ template inline Value dirPlus(const LorentzVector & p) { return Direction<0>::pos()? p.plus(): p.minus(); } /** Return the negative light-cone component. Or positive if the * current Direction<0> is reversed. */ template inline Value dirMinus(const LorentzVector & p) { return Direction<0>::neg()? p.plus(): p.minus(); } /** Return the component along the positive z-axis. Or the negative * z-axis if the current Direction<0> is reversed. */ template inline Value dirZ(const LorentzVector & p) { return Direction<0>::dir()*p.z(); } /** Return the polar angle wrt. the positive z-axis. Or the negative * z-axis if the current Direction<0> is reversed. */ template inline double dirTheta(const LorentzVector & p) { return Direction<0>::pos()? p.theta(): Constants::pi - p.theta(); } /** Return the cosine of the polar angle wrt. the positive z-axis. Or * the negative z-axis if the current Direction<0> is reversed. */ template inline double dirCosTheta(const LorentzVector & p) { return Direction<0>::pos()? p.cosTheta(): -p.cosTheta(); } /** Get the boost vector for the LorentzVector. If the current * Direction<0> is reversed, so is the z-component. */ template inline ThreeVector dirBoostVector(const LorentzVector & p) { ThreeVector b(p.boostVector()); if ( Direction<0>::neg() ) b.setZ(-b.z()); return b; } /** Create a LorentzVector giving its light-cone and transverse * components. */ template inline LorentzVector lightCone(Value plus, Value minus, Value x, Value y) { LorentzVector r(x, y, 0.5*(plus-minus), 0.5*(plus+minus)); return r; } /** Create a LorentzVector giving its light-cone components. */ template inline LorentzVector lightCone(Value plus, Value minus) { // g++-3.3 has a problem with using Value() directly // gcc-bug c++/3650, fixed in 3.4 static const Value zero = Value(); LorentzVector r(zero, zero, 0.5*(plus-minus), 0.5*(plus+minus)); return r; } } // delayed header inclusion to break inclusion loop: // LorentzVec -> Transverse -> Lorentz5Vec -> LorentzVec #include "Transverse.h" namespace ThePEG { /** Create a LorentzVector giving its light-cone and transverse * components. */ template inline LorentzVector lightCone(Value plus, Value minus, Transverse pt) { LorentzVector r(pt.x(), pt.y(), 0.5*(plus-minus), 0.5*(plus+minus)); return r; } /** Create a LorentzVector giving its light-cone and transverse * components. If the current Direction<0> is reversed, so is the * z-component. */ template inline LorentzVector lightConeDir(Value plus, Value minus, Value x = Value(), Value y = Value()) { LorentzVector r(x, y, Direction<0>::dir()*0.5*(plus - minus), 0.5*(plus + minus)); return r; } /** Create a LorentzVector giving its light-cone and transverse * components. If the current Direction<0> is reversed, so is the * z-component. */ template inline LorentzVector lightConeDir(Value plus, Value minus, Transverse pt) { LorentzVector r(pt.x(), pt.y(), Direction<0>::dir()*0.5*(plus - minus), 0.5*(plus + minus)); return r; } /** Output a LorentzVector with units to a stream. */ template void ounitstream(OStream & os, const LorentzVector & p, UnitT & u) { os << ounit(p.x(), u) << ounit(p.y(), u) << ounit(p.z(), u) << ounit(p.e(), u); } /** Input a LorentzVector with units from a stream. */ template void iunitstream(IStream & is, LorentzVector & p, UnitT & u) { Value x, y, z, e; is >> iunit(x, u) >> iunit(y, u) >> iunit(z, u) >> iunit(e, u); p = LorentzVector(x, y, z, e); } /// @name Traits for binary operations //@{ template struct BinaryOpTraits; /** * Template for multiplication by scalar */ template struct BinaryOpTraits, U> { /** The type resulting from multiplication of the template type with itself. */ typedef LorentzVector::MulT> MulT; /** The type resulting from division of one template type with another. */ typedef LorentzVector::DivT> DivT; }; /** * Template for multiplication by scalar */ template struct BinaryOpTraits > { /** The type resulting from multiplication of the template type with itself. */ typedef LorentzVector::MulT> MulT; }; //@} } #undef ERROR_IF #endif /* ThePEG_LorentzVector_H */ thepeg-1.8.0.orig/Pointer/0000755000175000017500000000000011756460367013566 5ustar sunsunthepeg-1.8.0.orig/Pointer/PtrTraits.h0000644000175000017500000001254311747772425015701 0ustar sunsun// -*- C++ -*- // // PtrTraits.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PtrTraits_H #define ThePEG_PtrTraits_H // This is the declaration of the PtrTraits class. namespace ThePEG { namespace Pointer { /** * PtrTraitsType is an empty non-polymorphic base class for all * PtrTraits classes. */ struct PtrTraitsType {}; /** * The PtrTraits class is used everywhere in ThePEG to * interface to the pointers which are handled. In particular, ThePEG * never uses new or delete but always * PtrTraits

::create and * PtrTraits

::destroy (to be precise the destroy method * is never used since all pointers are assumed to be reference * counted or in another way garbage collected). Also ThePEG * always uses dynamic_ptr_cast (rather than the standard * dynamic_cast) which in turn calls the * PtrTraits

::DynamicCast. * * In this file is also defined the specialized std::iterator_traits * for the reference counted pointers. * */ template struct PtrTraits: public PtrTraitsType {}; /** * Specialization of the PtrTraits class for standard bare pointers. */ template struct PtrTraits: public PtrTraitsType { /** Template argument typedef. */ typedef T value_type; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef T * const_pointer; /** * Return the bare pointer of the given pointer object. */ static T * barePointer(T * p) { return p; } /** * Create an object and return a pointer to it. */ static pointer create() { return new T; } /** * Create an copy of an object and return a pointer to it. */ static pointer create(const_reference t) { return new T(t); } /** * Destroy the object pointed to. */ static void destroy(pointer tp) { delete tp; } /** * Cast dynamically. */ template static pointer DynamicCast(R * r) { return dynamic_cast(r); } /** * Cast away constness. */ static pointer ConstCast(const T * t) { return const_cast(t); } /** * Cast from a basic pointer. */ static pointer PtrCast(T * t) { return t; } /** * The bare pointer is not reference counted. */ static const bool reference_counted = false; }; /** * Specialization of the PtrTraits class for standard bare * const pointers. */ template struct PtrTraits: public PtrTraitsType { /** Template argument typedef. */ typedef T value_type; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef T * const_pointer; /** * Return the bare pointer of the given pointer object. */ static const T * barePointer(const T * p) { return p; } /** * Create an object and return a pointer to it. */ static pointer create() { return new T; } /** * Create an copy of an object and return a pointer to it. */ static pointer create(const_reference t) { return new T(t); } /** * Destroy the object pointed to. */ static void destroy(pointer tp) { delete tp; } /** * Cast dynamically. */ template static const_pointer DynamicCast(const R * r) { return dynamic_cast(r); } /** * Do not cast away constness. */ static const_pointer ConstCast(const T * r) { return r; } /** * Cast from a basic pointer. */ static const_pointer PtrCast(const T * t) { return t; } /** * The bare pointer is not reference counted. */ static const bool reference_counted = false; }; /** * Replacement for the standard dynamic_cast */ template T1 dynamic_ptr_cast(const T2 & t2) { return PtrTraits::DynamicCast(t2); } /** * Replacement for the standard const_cast */ template T1 const_ptr_cast(const T2 & t2) { return PtrTraits::ConstCast(t2); } /** * Simple interface to the PtrTraits::create() */ template inline Ptr ptr_new() { return PtrTraits::create(); } /** * Simple interface to the PtrTraits::create() */ template inline Ptr ptr_new(typename PtrTraits::const_reference t) { return PtrTraits::create(t); } /** * Simple interface to the PtrTraits::create() */ template inline typename Ptr::pointer new_ptr() { return PtrTraits< typename Ptr::pointer >::create(); } /** * Simple interface to the PtrTraits::create() */ template inline typename Ptr::pointer new_ptr(const T & t) { return PtrTraits< typename Ptr::pointer >::create(t); } /** * Simple interface to the PtrTraits::PtrCast() */ template inline TPtr ptr_cast(T * t) { return PtrTraits::PtrCast(t); } /** * Simple interface to the PtrTraits::PtrCast() */ template inline TPtr ptr_cast_const(const T * t) { return PtrTraits::PtrCast(const_cast(t)); } } } #endif /* ThePEG_PtrTraitsH */ thepeg-1.8.0.orig/Pointer/ReferenceCounted.cc0000644000175000017500000000014211747772425017313 0ustar sunsun#include "ReferenceCounted.h" unsigned long ThePEG::Pointer::ReferenceCounted::objectCounter = 0; thepeg-1.8.0.orig/Pointer/ReferenceCounted.h0000644000175000017500000000465611747772425017173 0ustar sunsun// -*- C++ -*- // // ReferenceCounted.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ReferenceCounted_H #define ThePEG_ReferenceCounted_H // This is the declaration of the ReferenceCounted class. #include "RCPtr.fh" #include "ThePEG/Persistency/PersistentIStream.fh" namespace ThePEG { namespace Pointer { /** * ReferenceCounted must be the (virtual) base class of all * classes which may be pointed to by the RCPtr smart * pointer class. It keeps track of all RCPtr and * ConstRCPtr pointers which are currently pointing to an * object. * * @see RCPtr * @see ConstRCPtr */ class ReferenceCounted { /** The RCPtrBase class needs to acces the private parts of ReferenceCounted. */ friend class RCPtrBase; friend class ThePEG::PersistentIStream; public: /** * The integer type used for counting. */ typedef unsigned int CounterType; protected: /** @name Standard constructors and assignment. */ //@{ /** * Default constructor. */ ReferenceCounted() : uniqueId(++objectCounter), theReferenceCounter(CounterType(1)) {} /** * Copy-constructor. */ ReferenceCounted(const ReferenceCounted &) : uniqueId(++objectCounter), theReferenceCounter(CounterType(1)) {} /** * Assignment. */ ReferenceCounted & operator=(const ReferenceCounted &) { return *this; } //@} public: /** * Return the reference count. */ CounterType referenceCount() const { return theReferenceCounter; } private: /** * Increment the reference count. */ void incrementReferenceCount() const { ++theReferenceCounter; } /** * Decrement with the reference count. */ bool decrementReferenceCount() const { return !--theReferenceCounter; } public: /** * The unique ID. Can be used as sorting criterion, e.g. for set<> and map<>. */ const unsigned long uniqueId; private: /** * A counter for issuing unique IDs. It will overflow back to 0 eventually, * but it is very unlikely that two identical IDs show up in the same event. */ static unsigned long objectCounter; /** * The reference count. */ mutable CounterType theReferenceCounter; }; } } #endif /* ThePEG_ReferenceCounted_H */ thepeg-1.8.0.orig/Pointer/RCPtr.h0000644000175000017500000006516711747772425014751 0ustar sunsun// -*- C++ -*- // // RCPtr.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_RCPtr_H #define ThePEG_RCPtr_H // This is the declaration of the RCPtrBase, #include "ReferenceCounted.h" #include "RCPtr.fh" #include "PtrTraits.h" namespace ThePEG { namespace Pointer { /** * RCPtrBase is the base class of RCPtr and ConstRCPtr which are * reference counted (smart) pointers. The RCPtrBase class communicates with the * ReferenceCounted object which must be the base class of * all objects pointed to and which keeps count of the pointers * pointing to an object. * * @see ReferenceCounted */ class RCPtrBase { /** Get counter type from ReferenceCounted class. */ typedef ReferenceCounted::CounterType CounterType; protected: /** * Increment the counter of a reference counted object. */ void increment(const ReferenceCounted * rcp) { if ( rcp ) rcp->incrementReferenceCount(); } /** * Decrement the counter of a reference counted object. */ bool release(const ReferenceCounted * rcp) { return rcp && rcp->decrementReferenceCount(); } }; /** * RCPtr is a reference counted (smart) pointer. Objects created using * the RCPtr::create() methods will continue living until no RCPtr or * ConstRCPtr are pointing to it, at which point it will be deleted. * * @see ReferenceCounted */ template class RCPtr: public RCPtrBase { public: /** Template argument typedef. */ typedef void iterator_category; /** Template argument typedef. */ typedef void difference_type; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef const T * const_pointer; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T value_type; public: /** */ /** * Constructor for null pointer. */ RCPtr() : ptr(0) {} /** * Copy constructor. */ RCPtr(const RCPtr & p) : ptr(p.ptr) { increment(); } /** * Copy constructor for class UPtr which has operator-> defined * resulting in a value implicitly convertible to T *. */ template RCPtr(const UPtr & u) : ptr(PtrTraits::barePointer(u)) { increment(); } /** * Construction from real pointer. */ explicit RCPtr(pointer p) : ptr(p) { increment(); } /** * Destructor. Deletes the object pointed to if this is the last * pointer to it. */ ~RCPtr() { release(); } /** * Allocate and construct an object of class T and return a RCPtr to * it. */ static RCPtr Create() { RCPtr p; return p.create(); } /** * Allocate and copy-construct an object of class T and return a * RCPtr to it. */ static RCPtr Create(const_reference t) { RCPtr p; return p.create(t); } /** * Allocate and construct an object of class T and point to it, * possibly deleting the object pointed to before. */ RCPtr & create() { release(); ptr = new T; // increment(); // ReferenceCounted() constructor starts at 1 return *this; } /** * Allocate and copy-construct an object of class T and point to it, * possibly deleting the object pointed to before. */ RCPtr & create(const_reference t) { release(); ptr = new T(t); // increment(); // ReferenceCounted() constructor starts at 1 return *this; } /** * Assignment. */ RCPtr & operator=(const RCPtr & p) { if ( ptr == p.ptr ) return *this; release(); ptr = p.ptr; increment(); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value implicitly convertible to T *. */ template RCPtr & operator=(const UPtr & u) { if ( ptr == PtrTraits::barePointer(u) ) return *this; release(); ptr = PtrTraits::barePointer(u); increment(); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value which can be cast dynamically to T *. */ template RCPtr & assignDynamic(const UPtr & u) { pointer up = dynamic_cast(PtrTraits::barePointer(u)); if ( ptr == up ) return *this; release(); ptr = up; increment(); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value which can be const_cast'ed to T *. */ template RCPtr & assignConst(const UPtr & u) { pointer up = const_cast(PtrTraits::barePointer(u)); if ( ptr == up ) return *this; release(); ptr = up; increment(); return *this; } /** * Make p point to the object pointed to by this and vice versa. */ void swap(RCPtr & p) { const pointer tmp = ptr; ptr = p.ptr; p.ptr = tmp; // std::swap(ptr, p.ptr); } /** * Test for equality of the underlying pointers. */ bool operator==(const RCPtr & p) const { return ptr == p.ptr; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const RCPtr & p) const { return ptr != p.ptr; } /** * Test for equality of the underlying pointers. */ bool operator==(const_pointer p) const { return ptr == p; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const_pointer p) const { return ptr != p; } /** * Test for equality of the underlying pointers. */ template bool operator==(const UPtr & u) const { return ptr == PtrTraits::barePointer(u); } /** * Test for inequality of the underlying pointers. */ template bool operator!=(const UPtr & u) const { return ptr != PtrTraits::barePointer(u); } /** * Test for ordering. */ bool operator<(const RCPtr & p) const { return ( ptr && p.ptr && ptr->uniqueId != p.ptr->uniqueId ) ? ptr->uniqueId < p.ptr->uniqueId : ptr < p.ptr; } /** * Test for ordering. */ bool operator<(const_pointer p) const { return ( ptr && p && ptr->uniqueId != p->uniqueId ) ? ptr->uniqueId < p->uniqueId : ptr < p; } /** * Returns true if the underlying pointer is null. */ bool operator!() const { return !ptr; } /** * Returns the underlying pointer. */ operator T * () const { return ptr; } /** * Member access. */ pointer operator->() const { return ptr; } /** * Dereferencing. */ reference operator*() const { return *ptr; } private: /** * Increment the counter of the object pointed to. */ void increment() { RCPtrBase::increment(ptr); } /** * Stop pointing to the current object and delete it if this was the * last pointer to it. */ void release() { if ( RCPtrBase::release(ptr) ) delete ptr; } /** * The actual pointer. */ pointer ptr; }; /** * ConstRCPtr is a reference counted (smart) const pointer. Objects * created using the RCPtr::create() methods will continue living * until no RCPtr or ConstRCPtr are pointing to it, at which point it * will be deleted. * * @see ReferenceCounted */ template class ConstRCPtr : public RCPtrBase { public: /** Template argument typedef. */ typedef void iterator_category; /** Template argument typedef. */ typedef void difference_type; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef const T * const_pointer; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T value_type; public: /** * Constructor for null pointer. */ ConstRCPtr() : ptr(0) {} /** * Copy constructor. */ ConstRCPtr(const ConstRCPtr & p) : ptr(p.ptr) { increment(); } /** * Copyconstructor for class UPtr which has operator-> defined * resulting in a value implicitly convertible to const T *. */ template ConstRCPtr(const UPtr & u) : ptr(PtrTraits::barePointer(u)) { increment(); } /** * Construction from real pointer. */ explicit ConstRCPtr(const_pointer p) : ptr(p) { increment(); } /** * Destructor. Deletes the object pointed to if this is the last * pointer to it. */ ~ConstRCPtr() { release(); } /** * Assignment. */ ConstRCPtr & operator=(const ConstRCPtr & p) { if ( ptr == p.ptr ) return *this; release(); ptr = p.ptr; increment(); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value implicitly convertible to const T *. */ template ConstRCPtr & operator=(const UPtr & u) { if ( ptr == PtrTraits::barePointer(u) ) return *this; release(); ptr = PtrTraits::barePointer(u); increment(); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value which can be cast dynamically to const T *. */ template ConstRCPtr & assignDynamic(const UPtr & u) { const_pointer up = dynamic_cast(PtrTraits::barePointer(u)); if ( ptr == up ) return *this; release(); ptr = up; increment(); return *this; } /** * Make p point to the object pointed to by this and vice versa. */ void swap(ConstRCPtr & p) { const const_pointer tmp = ptr; ptr = p.ptr; p.ptr = tmp; // std::swap(ptr, p.ptr); } /** * Test for equality of the underlying pointers. */ bool operator==(const ConstRCPtr & p) const { return ptr == p.ptr; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const ConstRCPtr & p) const { return ptr != p.ptr; } /** * Test for equality of the underlying pointers. */ bool operator==(const_pointer p) const { return ptr == p; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const_pointer p) const { return ptr != p; } /** * Test for equality of the underlying pointers. */ template bool operator==(const UPtr & u) const { return ptr == PtrTraits::barePointer(u); } /** * Test for inequality of the underlying pointers. */ template bool operator!=(const UPtr & u) const { return ptr != PtrTraits::barePointer(u); } /** * Test for ordering. */ bool operator<(const ConstRCPtr & p) const { return ( ptr && p.ptr && ptr->uniqueId != p.ptr->uniqueId ) ? ptr->uniqueId < p.ptr->uniqueId : ptr < p.ptr; } /** * Test for ordering. */ bool operator<(const_pointer p) const { return ( ptr && p && ptr->uniqueId != p->uniqueId ) ? ptr->uniqueId < p->uniqueId : ptr < p; } /** * Returns true if the underlying pointer is null. */ bool operator!() const { return !ptr; } /** * Returns the underlying pointer. */ operator const T * () const { return ptr; } /** * Member access. */ const_pointer operator->() const { return ptr; } /** * Dereferencing. */ const_reference operator*() const { return *ptr; } private: /** * Increment the counter of the object pointed to. */ void increment() { RCPtrBase::increment(ptr); } /** * Stop pointing to the current object and delete it if this was the * last pointer to it. */ void release() { if ( RCPtrBase::release(ptr) ) delete ptr; } /** * The actual pointer. */ const_pointer ptr; }; /** * TransientRCPtr is a simple wrapper around a bare pointer which can * be assigned to and from an RCPtr and ConstRCPtr without problem. * * @see RCPtr * @see ConstRCPtr */ template class TransientRCPtr { public: /** Template argument typedef. */ typedef void iterator_category; /** Template argument typedef. */ typedef void difference_type; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef const T * const_pointer; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T value_type; public: /** * Constructor for null pointer. */ TransientRCPtr() : ptr(0) {} /** * Copy constructor. */ TransientRCPtr(const TransientRCPtr & p) : ptr(p.ptr) {} /** * Copyconstructor for class UPtr which has operator-> defined * resulting in a value implicitly convertible to T *. */ template TransientRCPtr(const UPtr & u) : ptr(PtrTraits::barePointer(u)) {} /** * Construction from real pointer. */ explicit TransientRCPtr(pointer p) : ptr(p) {} /** * Destructor. Does not delete the object pointed to. */ ~TransientRCPtr() {} /** * Assignment. */ TransientRCPtr & operator=(const TransientRCPtr & p) { ptr = p.ptr; return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value implicitly convertible to T *. */ template TransientRCPtr & operator=(const UPtr & u) { ptr = PtrTraits::barePointer(u); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value which can be cast dynamically to T *. */ template TransientRCPtr & assignDynamic(const UPtr & u) { ptr = dynamic_cast(PtrTraits::barePointer(u)); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value whcih can be const_cast'ed to T *. */ template TransientRCPtr & assignConst(const UPtr & u) { ptr = const_cast(PtrTraits::barePointer(u)); return *this; } /** * Test for equality of the underlying pointers. */ bool operator==(const TransientRCPtr & p) const { return ptr == p.ptr; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const TransientRCPtr & p) const { return ptr != p.ptr; } /** * Test for equality of the underlying pointers. */ bool operator==(const_pointer p) const { return ptr == p; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const_pointer p) const { return ptr != p; } /** * Test for equality of the underlying pointers. */ template bool operator==(const UPtr & u) const { return ptr == PtrTraits::barePointer(u); } /** * Test for inequality of the underlying pointers. */ template bool operator!=(const UPtr & u) const { return ptr != PtrTraits::barePointer(u); } /** * Test for ordering. */ bool operator<(const TransientRCPtr & p) const { return ( ptr && p.ptr && ptr->uniqueId != p.ptr->uniqueId ) ? ptr->uniqueId < p.ptr->uniqueId : ptr < p.ptr; } /** * Test for ordering. */ bool operator<(const_pointer p) const { return ( ptr && p && ptr->uniqueId != p->uniqueId ) ? ptr->uniqueId < p->uniqueId : ptr < p; } /** * Returns true if the underlying pointer is null. */ bool operator!() const { return !ptr; } /** * Returns the underlying pointer. */ operator T * () const { return ptr; } /** * Member access. */ pointer operator->() const { return ptr; } /** * Dereferencing. */ reference operator*() const { return *ptr; } private: /** * The actual pointer. */ pointer ptr; }; /** * TransientConstRCPtr is a simple wrapper around a bare const pointer * which can be assigned to and from an RCPtr and ConstRCPtr without * problem. * * @see RCPtr * @see ConstRCPtr */ template class TransientConstRCPtr { public: /** Template argument typedef. */ typedef void iterator_category; /** Template argument typedef. */ typedef void difference_type; /** Template argument typedef. */ typedef T * pointer; /** Template argument typedef. */ typedef const T * const_pointer; /** Template argument typedef. */ typedef T & reference; /** Template argument typedef. */ typedef const T & const_reference; /** Template argument typedef. */ typedef T value_type; public: /** * Constructor for null pointer. */ TransientConstRCPtr() : ptr(0) {} /** * Copy constructor. */ TransientConstRCPtr(const TransientConstRCPtr & p) : ptr(p.ptr) {} /** * Copyconstructor for class UPtr which has operator-> defined * resulting in a value implicitly convertible to const T *. */ template TransientConstRCPtr(const UPtr & u) : ptr(PtrTraits::barePointer(u)) {} /** * Construction from real pointer. */ explicit TransientConstRCPtr(const_pointer p) : ptr(p) {} /** * Destructor. Does not delete the object pointed to. */ ~TransientConstRCPtr() {} /** * Assignment. */ TransientConstRCPtr & operator=(const TransientConstRCPtr & p) { ptr = p.ptr; return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value implicitly convertible to const T *. */ template TransientConstRCPtr & operator=(const UPtr & u) { ptr = PtrTraits::barePointer(u); return *this; } /** * Assignment from class UPtr which has operator-> defined resulting * in a value which can be cast dynamically to const T *. */ template TransientConstRCPtr & assignDynamic(const UPtr & u) { ptr = dynamic_cast(PtrTraits::barePointer(u)); return *this; } /** * Test for equality of the underlying pointers. */ bool operator==(const TransientConstRCPtr & p) const { return ptr == p.ptr; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const TransientConstRCPtr & p) const { return ptr != p.ptr; } /** * Test for equality of the underlying pointers. */ bool operator==(const_pointer p) const { return ptr == p; } /** * Test for inequality of the underlying pointers. */ bool operator!=(const_pointer p) const { return ptr != p; } /** * Test for equality of the underlying pointers. */ template bool operator==(const UPtr & u) const { return ptr == PtrTraits::barePointer(u); } /** * Test for inequality of the underlying pointers. */ template bool operator!=(const UPtr & u) const { return ptr != PtrTraits::barePointer(u); } /** * Test for ordering. */ bool operator<(const TransientConstRCPtr & p) const { return ( ptr && p.ptr && ptr->uniqueId != p.ptr->uniqueId ) ? ptr->uniqueId < p.ptr->uniqueId : ptr < p.ptr; } /** * Test for ordering. */ bool operator<(const_pointer p) const { return ( ptr && p && ptr->uniqueId != p->uniqueId ) ? ptr->uniqueId < p->uniqueId : ptr < p; } /** * Returns true if the underlying pointer is null. */ bool operator!() const { return !ptr; } /** * Returns (not) the underlying pointer. */ operator const T * () const { return ptr; } /** * Member access. */ const_pointer operator->() const { return ptr; } /** * Dereferencing. */ const_reference operator*() const { return *ptr; } private: /** * The actual pointer. */ const_pointer ptr; }; /** * Specialization of the PtrTraits class for RCPtr. */ template struct PtrTraits< RCPtr >: public PtrTraitsType { /** Template argument typedef. */ typedef typename RCPtr::value_type value_type; /** Template argument typedef. */ typedef typename RCPtr::reference reference; /** Template argument typedef. */ typedef typename RCPtr::const_reference const_reference; /** Template argument typedef. */ typedef RCPtr pointer; /** Template argument typedef. */ typedef ConstRCPtr const_pointer; /** Template argument typedef. */ typedef TransientRCPtr transient_pointer; /** Template argument typedef. */ typedef TransientConstRCPtr transient_const_pointer; /** * Return the bare pointer of the given pointer object. */ static T * barePointer(const RCPtr & p) { return p.operator->(); } /** * Create an object and return a pointer to it. */ static pointer create() { return RCPtr::Create(); } /** * Create an copy of an object and return a pointer to it. */ static pointer create(const_reference t) { return RCPtr::Create(t); } /** * Destroy the object pointed to. */ static void destroy(pointer) {} /** * Cast dynamically. */ template static pointer DynamicCast(const UPtr & u) { pointer t; t.assignDynamic(u); return t; } /** * Cast away constness. */ template static pointer ConstCast(const UPtr & u) { pointer t; t.assignConst(u); return t; } /** * Cast from a basic pointer. */ static pointer PtrCast(T * t) { return pointer(t); } /** * RCPtr is reference counted. */ static const bool reference_counted = true; }; /** * Specialization of the PtrTraits class for ConstRCPtr. */ template struct PtrTraits< ConstRCPtr >: public PtrTraitsType { /** Template argument typedef. */ typedef typename ConstRCPtr::value_type value_type; /** Template argument typedef. */ typedef typename ConstRCPtr::reference reference; /** Template argument typedef. */ typedef typename ConstRCPtr::const_reference const_reference; /** Template argument typedef. */ typedef RCPtr pointer; /** Template argument typedef. */ typedef ConstRCPtr const_pointer; /** Template argument typedef. */ typedef TransientRCPtr transient_pointer; /** Template argument typedef. */ typedef TransientConstRCPtr transient_const_pointer; /** * Return the bare pointer of the given pointer object. */ static const T * barePointer(const ConstRCPtr & p) { return p.operator->(); } /** * Create an object and return a pointer to it. */ static const_pointer create() { return RCPtr::Create(); } /** * Create an copy of an object and return a pointer to it. */ static const_pointer create(const_reference t) { return RCPtr::Create(t); } /** * Destroy the object pointed to. */ static void destroy(const_pointer) {} /** * Cast dynamically. */ template static const_pointer DynamicCast(const UPtr & u) { const_pointer t; t.assignDynamic(u); return t; } /** * Cast away constness. */ template static const_pointer ConstCast(const UPtr & u) { const_pointer t; t.assignDynamic(u); return t; } /** * Cast from a basic pointer. */ static const_pointer PtrCast(const T * t) { return const_pointer(t); } /** * ConstRCPtr is reference counted. */ static const bool reference_counted = true; }; /** * Specialization of the PtrTraits class for TransientRCPtr. */ template struct PtrTraits< TransientRCPtr >: public PtrTraitsType { /** Template argument typedef. */ typedef typename TransientRCPtr::value_type value_type; /** Template argument typedef. */ typedef typename TransientRCPtr::reference reference; /** Template argument typedef. */ typedef typename TransientRCPtr::const_reference const_reference; /** Template argument typedef. */ typedef RCPtr pointer; /** Template argument typedef. */ typedef ConstRCPtr const_pointer; /** Template argument typedef. */ typedef TransientRCPtr transient_pointer; /** Template argument typedef. */ typedef TransientConstRCPtr transient_const_pointer; /** * Return the bare pointer of the given pointer object. */ static T * barePointer(const TransientRCPtr & p) { return p.operator->(); } /** * Destroy the object pointed to. */ static void destroy(transient_pointer) {} /** * Cast dynamically. */ template static transient_pointer DynamicCast(const UPtr & u) { transient_pointer t; t.assignDynamic(u); return t; } /** * Cast away constness. */ static transient_pointer ConstCast(transient_const_pointer c) { transient_pointer t; t.assignConst(c); return t; } /** * Cast from a basic pointer. */ static transient_pointer PtrCast(T * t) { return transient_pointer(t); } /** * TransientRCPtr is not reference counted. */ static const bool reference_counted = false; }; /** * Specialization of the PtrTraits class for TransientConstRCPtr. */ template struct PtrTraits< TransientConstRCPtr >: public PtrTraitsType { /** Template argument typedef. */ typedef typename TransientConstRCPtr::value_type value_type; /** Template argument typedef. */ typedef typename TransientConstRCPtr::reference reference; /** Template argument typedef. */ typedef typename TransientConstRCPtr::const_reference const_reference; /** Template argument typedef. */ typedef RCPtr pointer; /** Template argument typedef. */ typedef ConstRCPtr const_pointer; /** Template argument typedef. */ typedef TransientRCPtr transient_pointer; /** Template argument typedef. */ typedef TransientConstRCPtr transient_const_pointer; /** * Return the bare pointer of the given pointer object. */ static const T * barePointer(const TransientConstRCPtr & p) { return p.operator->(); } /** * Destroy the object pointed to. */ static void destroy(transient_const_pointer) {} /** * Cast dynamically. */ template static transient_const_pointer DynamicCast(const UPtr & u) { transient_const_pointer t; t.assignDynamic(u); return t; } /** * Cast away constness. */ template static transient_const_pointer ConstCast(const UPtr & u) { transient_const_pointer t; t.assignConst(u); return t; } /** * Cast from a basic pointer. */ static transient_const_pointer PtrCast(const T * t) { return transient_const_pointer(t); } /** * TransientConstRCPtr is not reference counted. */ static const bool reference_counted = false; }; } } namespace std { /** * Specialization of std::swap to avoid unnecessary (in/de)crements of * the reference count. */ template inline void swap(ThePEG::Pointer::RCPtr & t1, ThePEG::Pointer::RCPtr & t2) { t1.swap(t2); } /** * Specialization of std::swap to avoid unnecessary (in/de)crements of * the reference count. */ template inline void swap(ThePEG::Pointer::ConstRCPtr & t1, ThePEG::Pointer::ConstRCPtr & t2) { t1.swap(t2); } } #endif /* ThePEG_RCPtr_H */ thepeg-1.8.0.orig/Pointer/RCPtr.fh0000644000175000017500000000071111747772425015077 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_RCPtr_FH #define ThePEG_RCPtr_FH // // This is the forward declaration of the RCPtrBase, RCPtr, // ConstRCPtr, TransientRCPtr and TransientConstRCPtr classes. // namespace ThePEG { namespace Pointer { class RCPtrBase; template class RCPtr; template class ConstRCPtr; template class TransientRCPtr; template class TransientConstRCPtr; } } #endif /* ThePEG_RCPtr_FH */ thepeg-1.8.0.orig/Pointer/Ptr.h0000644000175000017500000000360111747772425014505 0ustar sunsun// -*- C++ -*- // // Ptr.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Ptr_H #define ThePEG_Ptr_H // This is the declaration of the Ptr class. #include "RCPtr.fh" namespace ThePEG { /** The namespace for the reference counted pointer classes */ namespace Pointer { /** * Ptr is a templated class to provide typedefs for pointers types * ThePEG should use for a given type. If you want to use ThePEG with * another kind of (smart) pointers than those provided you have to * provide an alternative ThePEG.h file which includes an alternative * Ptr class. It may also be possible to specialize this Ptr class for * using different pointer classes for different classes. * * @see RCPtr * @see ConstRCPtr * @see TransientRCPtr * @see TransientConstRCPtr * */ template struct Ptr { /** Template argument typedef. */ typedef RCPtr pointer; /** Template argument typedef. */ typedef ConstRCPtr const_pointer; /** Template argument typedef. */ typedef TransientRCPtr transient_pointer; /** Template argument typedef. */ typedef TransientConstRCPtr transient_const_pointer; /** Template argument typedef. */ typedef pointer ptr; /** Template argument typedef. */ typedef const_pointer cptr; /** Template argument typedef. */ typedef transient_pointer tptr; /** Template argument typedef. */ typedef transient_const_pointer tcptr; /** Template argument typedef. */ typedef pointer p; /** Template argument typedef. */ typedef const_pointer cp; /** Template argument typedef. */ typedef transient_pointer tp; /** Template argument typedef. */ typedef transient_const_pointer tcp; }; } } #endif /* ThePEG_Ptr_H */ thepeg-1.8.0.orig/Pointer/Makefile.in0000644000175000017500000004434011756366735015644 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = Pointer ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libThePEGReferenceCounted_la_LIBADD = am__objects_1 = ReferenceCounted.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGReferenceCounted_la_OBJECTS = $(am__objects_1) \ $(am__objects_3) libThePEGReferenceCounted_la_OBJECTS = \ $(am_libThePEGReferenceCounted_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(libThePEGReferenceCounted_la_SOURCES) DIST_SOURCES = $(libThePEGReferenceCounted_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = ReferenceCounted.cc DOCFILES = Ptr.h PtrTraits.h RCPtr.h ReferenceCounted.h INCLUDEFILES = $(DOCFILES) RCPtr.fh noinst_LTLIBRARIES = libThePEGReferenceCounted.la libThePEGReferenceCounted_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Pointer/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Pointer/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libThePEGReferenceCounted.la: $(libThePEGReferenceCounted_la_OBJECTS) $(libThePEGReferenceCounted_la_DEPENDENCIES) $(EXTRA_libThePEGReferenceCounted_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGReferenceCounted_la_OBJECTS) $(libThePEGReferenceCounted_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ReferenceCounted.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/Pointer/Makefile.am0000644000175000017500000000044611747772425015627 0ustar sunsunmySOURCES = ReferenceCounted.cc DOCFILES = Ptr.h PtrTraits.h RCPtr.h ReferenceCounted.h INCLUDEFILES = $(DOCFILES) RCPtr.fh noinst_LTLIBRARIES = libThePEGReferenceCounted.la libThePEGReferenceCounted_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/LesHouches/0000755000175000017500000000000011756460366014207 5ustar sunsunthepeg-1.8.0.orig/LesHouches/MadGraphOneCut.h0000644000175000017500000001371111747772425017166 0ustar sunsun// -*- C++ -*- // // MadGraphOneCut.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MadGraphOneCut_H #define THEPEG_MadGraphOneCut_H // // This is the declaration of the MadGraphOneCut class. // #include "ThePEG/Cuts/OneCutBase.h" namespace ThePEG { /** * Objects of the MadGraphOneCut class can be created automatically by * the MadGraphReader class when scanning event files for information * about cuts. It is also possible to create objects by hand and use * it as any other OneCutBase object. * * @see \ref MadGraphOneCutInterfaces "The interfaces" * defined for MadGraphOneCut. */ class MadGraphOneCut: public OneCutBase { public: /** * Enumerate the different kinds of cuts made by MadGraph. */ enum CutType { PT, /**< The minimum transverse momentum of a particle. */ ETA, /**< The maximum (absolute value of) pseudo-rapidity of a particle. */ XPT /**< The minimum transverse momentum of the particle with largest transverse momentum. */ }; /** * Enumerate the types of particles the cut is made on. */ enum PType { JET, /**< The cut applies only to coloured particles. */ LEP, /**< The cut applies only to leptons. */ PHO, /**< The cut applies only to photons. */ BOT /**< The cut applies only to bottom quarks. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ MadGraphOneCut() : cutType(PT), particleType(JET), theCut(0.0) {} /** * The constructor used by the MadGraphReader. * @param t is the type of the cut. * @param p is the type of particles the cut is applied to. * @param c is the value of the cut (in units of GeV where applicable). */ MadGraphOneCut(CutType t, PType p, double c) : cutType(t), particleType(p), theCut(c) {} //@} public: /** @name Virtual functions mandated by the base class. */ //@{ /** * Return the minimum allowed value of the transverse momentum of an * outgoing parton. */ virtual Energy minKT(tcPDPtr p) const; /** * Return the minimum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double minEta(tcPDPtr p) const; /** * Return the maximum allowed pseudo-rapidity of an outgoing parton * of the given type. The pseudo-rapidity is measured in the lab * system. */ virtual double maxEta(tcPDPtr p) const; /** * Return the minimum allowed value of the transverse momentum of * the outgoing parton with the lagrest transverse momentum. This * version simply returns minKt(). */ virtual Energy minMaxKT(tcPDPtr p) const; /** * Return true if a particle with type \a ptype and momentum \a p * passes the cuts. The \a parent contains information about the * kinematics of the hard sub-process. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const; //@} protected: /** * Returns true if cut should be applied to a particle of type \a p. */ bool checkType(tcPDPtr p) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The type of this cut. */ CutType cutType; /** * The type of particles this cut applies to. */ PType particleType; /** * The value of the cut to be applied. */ double theCut; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initMadGraphOneCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MadGraphOneCut & operator=(const MadGraphOneCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MadGraphOneCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of MadGraphOneCut. */ typedef OneCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the MadGraphOneCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MadGraphOneCut"; } /** Return the name(s) of the shared library (or libraries) be loaded to get * access to the MadGraphOneCut class and any other class on which it depends * (except the base class). */ static string library() { return "MadGraphReader.so"; } }; /** @endcond */ } #endif /* THEPEG_MadGraphOneCut_H */ thepeg-1.8.0.orig/LesHouches/MadGraphReader.h0000644000175000017500000001467611747772425017206 0ustar sunsun// -*- C++ -*- // // MadGraphReader.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MadGraphReader_H #define THEPEG_MadGraphReader_H // This is the declaration of the MadGraphReader class. #include "ThePEG/LesHouches/LesHouchesFileReader.h" namespace ThePEG { /** * MadGraphReader inherits from LesHouchesFileReader and is able to * read event files produced by the MadGraph/MadEvent program. * * @see \ref MadGraphReaderInterfaces "The interfaces" * defined for MadGraphReader. */ class MadGraphReader: public LesHouchesFileReader { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MadGraphReader() : fixedScale(91.188*GeV), fixedAEM(0.007546772), fixedAS(0.12), doInitCuts(false) {} //@} public: /** @name Virtual functions specified by the LesHouchesReader base class. */ //@{ /** * Open a file or stream with events and read in the run information * into the corresponding protected variables. */ virtual void open(); /** * Scan the file or stream to obtain information about cross section * weights and particles etc. This function should fill the * variables corresponding to the /HEPRUP/ common block. The * function returns the number of events scanned. This version calls * the base class function and the readjusts the values in HEPRUP to * cure some inconsistencies in the MadGraph files. */ virtual long scan(); /** * Read the next event form the file or stream into the * corresponding protected variables. Return false if there is no * more events. */ virtual bool doReadEvent(); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Called from doinit() to extract cuts from the event file and add * the corresponding objects to the current EventGenerator. */ CutsPtr initCuts(); /** * Called from LesHouchesReader::doinit() to extract PDFs from the * event file and add the corresponding objects to the current * EventGenerator. */ virtual void initPDFs(); /** * Return true if this object needs to be initialized before all * other objects because it needs to extract cuts from the event file. */ virtual bool preInitialize() const; /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish() { LesHouchesFileReader::dofinish(); if ( stats.accepted() > 0 ) useMe(); } //@} protected: /** * Interface function to scan a madgraph file and extract * information about used cuts. The corresponding cut objects are * created in the Repository and assigned to this reader. */ string scanCuts(string); /** * Function to extract the number of events from a string */ long numberOfEvents(string); protected: /** * Fixed scale. Old MadGraph files do not necessarily contain * information about the factorization (or renormalization) * scale. In this case this is used instead. */ Energy fixedScale; /** * Fixed \f$\alpha_{EM}\f$. Old MadGraph files do not necessarily * contain information about the value of \f$\alpha_{EM}\f$. In this * case this is used instead. */ double fixedAEM; /** * Fixed \f$\alpha_S\f$. Old MadGraph files do not necessarily * contain information about the value of \f$\alpha_S\f$. In this * case this is used instead. */ double fixedAS; /** * New MadGraph files contain suitable information about cuts used * in the generation. The non-zero ones are stored in this map. */ map cuts; /** * If true, cuts may be extracted from the event file during initialization. */ bool doInitCuts; public: /** * Exception class used to inform about inability to work with some * weighted event files. */ struct WeightedException: public Exception {}; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initMadGraphReader; /** * Private and non-existent assignment operator. */ MadGraphReader & operator=(const MadGraphReader &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of MadGraphReader. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of MadGraphReader. */ typedef LesHouchesFileReader NthBase; }; /** * This template specialization informs ThePEG about the name of the * MadGraphReader class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return the class name. */ static string className() { return "ThePEG::MadGraphReader"; } /** Return the name of the shared library to be loaded to get * access to the MadGraphReader class and every other class it uses * (except the base class). */ static string library() { return "MadGraphReader.so"; } }; /** @endcond */ } #endif /* THEPEG_MadGraphReader_H */ thepeg-1.8.0.orig/LesHouches/LesHouchesEventHandler.fh0000644000175000017500000000053511747772425021075 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the LesHouchesEventHandler class. // #ifndef ThePEG_LesHouchesEventHandler_FH #define ThePEG_LesHouchesEventHandler_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class LesHouchesEventHandler; ThePEG_DECLARE_POINTERS(LesHouchesEventHandler,LesHouchesEventHandlerPtr); } #endif thepeg-1.8.0.orig/LesHouches/MadGraphTwoCut.cc0000644000175000017500000001727011747772425017360 0ustar sunsun// -*- C++ -*- // // MadGraphTwoCut.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MadGraphTwoCut class. // #include "MadGraphTwoCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr MadGraphTwoCut::clone() const { return new_ptr(*this); } IBPtr MadGraphTwoCut::fullclone() const { return new_ptr(*this); } Energy2 MadGraphTwoCut::minSij(tcPDPtr pi, tcPDPtr pj) const { if ( !checkType(pi, pj) || cutType != INVMASS ) return ZERO; return sqr(theCut*GeV); } Energy2 MadGraphTwoCut::minTij(tcPDPtr, tcPDPtr) const { return ZERO; } double MadGraphTwoCut::minDeltaR(tcPDPtr pi, tcPDPtr pj) const { if ( !checkType(pi, pj) || cutType != DELTAR ) return 0.0; return theCut; } Energy MadGraphTwoCut::minKTClus(tcPDPtr, tcPDPtr) const { return ZERO; } double MadGraphTwoCut::minDurham(tcPDPtr, tcPDPtr) const { return 0.0; } bool MadGraphTwoCut::passCuts(tcCutsPtr, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci, bool incj) const { if ( inci || incj || !checkType(pitype, pjtype) ) return true; if ( cutType == INVMASS ) return (pi + pj).m2() > sqr(theCut*GeV); if ( cutType == DELTAR ) { double deta2 = sqr(pi.eta() - pj.eta()); double dphi = abs(pi.phi() - pj.phi()); if ( dphi > Constants::pi ) dphi = 2.0*Constants::pi - dphi; return sqrt(deta2 + sqr(dphi)) > theCut; } return true; } MadGraphTwoCut::PType MadGraphTwoCut::getType(tcPDPtr p) const { switch ( abs(p->id()) ) { case ParticleID::d: case ParticleID::u: case ParticleID::s: case ParticleID::c: case ParticleID::g: return JET; case ParticleID::b: return BOT; case ParticleID::gamma: return PHO; case ParticleID::eminus: case ParticleID::nu_e: case ParticleID::muminus: case ParticleID::nu_mu: case ParticleID::tauminus: case ParticleID::nu_tau: return LEP; default: return NOT; } } bool MadGraphTwoCut::checkType(tcPDPtr pi, tcPDPtr pj) const { switch ( pairType ) { case JETJET: return getType(pi) == JET && getType(pj) == JET; case LEPLEP: if ( getType(pi) != LEP || getType(pj) != LEP ) return false; if ( cutType == DELTAR ) return true; // Special treatment for INVMASS. if ( pi->id()*pj->id() >= 0 ) return false; // OK we have a lepton-anti-lepton pair. I it the same lepton if ( pi->id() == -pj->id() ) return true; // NO, well is it the same family? if ( max(abs(pi->id()), abs(pj->id()))%2 ) return false; return abs(pi->id() + pj->id()) == 1 ; case PHOPHO: return getType(pi) == PHO && getType(pj) == PHO; case BOTBOT: return getType(pi) == BOT && getType(pj) == BOT; case BOTJET: return ( getType(pi) == BOT && getType(pj) == JET ) || ( getType(pi) == JET && getType(pj) == BOT ); case PHOJET: return ( getType(pi) == PHO && getType(pj) == JET ) || ( getType(pi) == JET && getType(pj) == PHO ); case JETLEP: return ( getType(pi) == LEP && getType(pj) == JET ) || ( getType(pi) == JET && getType(pj) == LEP ); case PHOBOT: return ( getType(pi) == PHO && getType(pj) == BOT ) || ( getType(pi) == BOT && getType(pj) == PHO ); case BOTLEP: return ( getType(pi) == BOT && getType(pj) == LEP ) || ( getType(pi) == LEP && getType(pj) == BOT ); case PHOLEP: return ( getType(pi) == PHO && getType(pj) == LEP ) || ( getType(pi) == LEP && getType(pj) == PHO ); } return false; } void MadGraphTwoCut::persistentOutput(PersistentOStream & os) const { os << oenum(cutType) << oenum(pairType) << theCut; } void MadGraphTwoCut::persistentInput(PersistentIStream & is, int) { is >> ienum(cutType) >> ienum(pairType) >> theCut; } ClassDescription MadGraphTwoCut::initMadGraphTwoCut; // Definition of the static class description member. void MadGraphTwoCut::Init() { static ClassDocumentation documentation ("Objects of the MadGraphTwoCut class can be created automatically by " "the MadGraphReader class when scanning event files for information " "about cuts. It is also possible to create objects by hand and use " "it as any other MadGraphTwoCut object."); static Switch interfaceCutType ("CutType", "The kind of cut this object will do.", &MadGraphTwoCut::cutType, DELTAR, true, false); static SwitchOption interfaceCutTypeInvariantMass (interfaceCutType, "InvariantMass", "The minimum invariant mass of two particles.", INVMASS); static SwitchOption interfaceCutTypeDeltaR (interfaceCutType, "DeltaR", "The minimum pseudo-rapidity--azimuth-angle distance between two " "particles.", DELTAR); static Switch interfacePairType ("PairType", "The type of particle pairs this cut is applied to.", &MadGraphTwoCut::pairType, JETJET, true, false); static SwitchOption interfacePairTypeJetJet (interfacePairType, "JetJet", "The cut applies only to pairs of coloured particles (jets).", JETJET); static SwitchOption interfacePairTypeLeptonLepton (interfacePairType, "LeptonLepton", "The cut applies only to lepton pairs (in case of invariant mass, " "lepton--anti-lepton pairs of same flavour).", LEPLEP); static SwitchOption interfacePairTypePhotonPhoton (interfacePairType, "PhotonPhoton", "The cut applies only to pairs photons.", PHOPHO); static SwitchOption interfacePairTypeBottomPairs (interfacePairType, "BottomPairs", "The cut applies only to pairs of bottom quarks.", BOTBOT); static SwitchOption interfacePairTypeJetBottom (interfacePairType, "JetBottom", "The cut applies only to bottom quarks paired with another coloured " "particle (jet).", BOTJET); static SwitchOption interfacePairTypePhotonJet (interfacePairType, "PhotonJet", "The cut applies only to a photon paired with a coloured particle (jet).", PHOJET); static SwitchOption interfacePairTypeJetLepton (interfacePairType, "JetLepton", "The cut applies only to a coloured particle (jet) paired with a lepton.", JETLEP); static SwitchOption interfacePairTypePhotonBottom (interfacePairType, "PhotonBottom", "The cut applies only to a photon paired with a bottom quark.", PHOBOT); static SwitchOption interfacePairTypeBottomLepton (interfacePairType, "BottomLepton", "The cut applies only to bottom quarks paired with a lepton.", BOTLEP); static SwitchOption interfacePairTypePhotonLepton (interfacePairType, "PhotonLepton", "The cut applies only to a photon paired with a lepton.", PHOLEP); static Parameter interfaceCut ("Cut", "The value of the cut to be applied (in units of GeV in case of " "minimum invariant mass).", &MadGraphTwoCut::theCut, 0.0, 0.0, 0, true, false, Interface::lowerlim); interfaceCut.rank(10); interfaceCutType.rank(9); interfacePairType.rank(8); interfaceCut.setHasDefault(false); interfaceCutType.setHasDefault(false); interfacePairType.setHasDefault(false); } thepeg-1.8.0.orig/LesHouches/LesHouchesEventHandler.cc0000644000175000017500000004141211747772425021064 0ustar sunsun// -*- C++ -*- // // LesHouchesEventHandler.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LesHouchesEventHandler class. // #include "LesHouchesEventHandler.h" #include "LesHouchesReader.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Handlers/LuminosityFunction.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/Utilities/LoopGuard.h" #include "ThePEG/EventRecord/Event.h" #include "ThePEG/EventRecord/Collision.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/SubProcess.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Utilities/Maths.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; LesHouchesEventHandler::~LesHouchesEventHandler() {} IBPtr LesHouchesEventHandler::clone() const { return new_ptr(*this); } IBPtr LesHouchesEventHandler::fullclone() const { return new_ptr(*this); } void LesHouchesEventHandler::doinit() { EventHandler::doinit(); for ( int i = 0, N = readers().size(); i < N; ++i ) readers()[i]->init(); } void LesHouchesEventHandler::initialize() { if ( lumiFnPtr() ) Repository::clog() << "The LuminosityFunction '" << lumiFnPtr()->name() << "' assigned to the LesHouchesEventHandler '" << name() << "' will not be active in this run. Instead the incoming " << "particles will be determined by the used LesHouchesReader objects." << Exception::warning; if ( readers().empty() ) throw LesHouchesInitError() << "No readers were defined for the LesHouchesEventHandler '" << name() << "'" << Exception::warning; // Go through all the readers and collect information about cross // sections and processes. typedef map ProcessMap; ProcessMap processes; PDPair incoming; Energy MaxEA = ZERO; Energy MaxEB = ZERO; for ( int i = 0, N = readers().size(); i < N; ++i ) { LesHouchesReader & reader = *readers()[i]; reader.initialize(*this); // Check that the incoming particles are consistent between the // readers. if ( !incoming.first ) { incoming.first = getParticleData(reader.heprup.IDBMUP.first); if ( !incoming.first ) Throw() << "Unknown beam PID " << reader.heprup.IDBMUP.first << ". Have you created a matching BeamParticle object?" << Exception::runerror; } if ( !incoming.second ) { incoming.second = getParticleData(reader.heprup.IDBMUP.second); if ( !incoming.second ) Throw() << "Unknown beam PID " << reader.heprup.IDBMUP.first << ". Have you created a matching BeamParticle object?" << Exception::runerror; } if ( incoming.first->id() != reader.heprup.IDBMUP.first || incoming.second->id() != reader.heprup.IDBMUP.second ) Repository::clog() << "The different LesHouchesReader objects in the " << "LesHouchesEventHandler '" << name() << "' have different " << "types of colliding particles." << Exception::warning; MaxEA = max(MaxEA, reader.heprup.EBMUP.first*GeV); MaxEB = max(MaxEB, reader.heprup.EBMUP.second*GeV); // Check that the weighting of the events in the different readers // is consistent with the ones requested for this event // handler. Also collect the sum of the maximum weights. if ( reader.negativeWeights() && weightOption() > 0 ) throw LesHouchesInitError() << "The reader '" << reader.name() << "' contains negatively weighted events, " << "which is not allowed for the LesHouchesEventHandler '" << name() << "'." << Exception::warning; // Check that we do not have the same process numbers in different // readers. for ( int ip = 0; ip < reader.heprup.NPRUP; ++ip ) { if ( reader.heprup.LPRUP[ip] ) { ProcessMap::iterator pit = processes.find(reader.heprup.LPRUP[ip]); if ( pit == processes.end() ) processes[reader.heprup.LPRUP[ip]] = readers()[i]; else if ( warnPNum ) { Throw() << "In the LesHouchesEventHandler '" << name() << "', both the '" << pit->second->name() << "' and '" << reader.name() << "' contains sub-process number " << pit->first << ". This process may be double-counted in this run." << Exception::warning; } } } selector().insert(reader.stats.maxXSec(), i); } stats.maxXSec(selector().sum()); histStats.maxXSec(selector().sum()); // Check that we have any cross section at all. if ( stats.maxXSec() <= ZERO ) throw LesHouchesInitError() << "The sum of the cross sections of the readers in the " << "LesHouchesEventHandler '" << name() << "' was zero." << Exception::warning; // We now create a LuminosityFunction object to inform others about // the energy of the beam. theIncoming = incoming; lumiFn(new_ptr(LuminosityFunction(MaxEA, MaxEB))); } void LesHouchesEventHandler::doinitrun() { EventHandler::doinitrun(); stats.reset(); histStats.reset(); for ( int i = 0, N = readers().size(); i < N; ++i ) { readers()[i]->initrun(); } } EventPtr LesHouchesEventHandler::generateEvent() { LoopGuard loopGuard(*this, maxLoop()); while ( true ) { loopGuard(); currentReader(readers()[selector().select(UseRandom::current())]); skipEvents(); currentReader()->reset(); double weight = currentReader()->getEvent(); if ( weightOption() == unitweight && weight < 0.0 ) weight = 0.0; if ( weightOption() == unitweight || weightOption() == unitnegweight ) { CrossSection newmax = selector().reweight(weight); if ( newmax > CrossSection() ) increaseMaxXSec(newmax); } select(weight/currentReader()->preweight); histStats.select(weight); if ( weightOption() == unitweight || weightOption() == unitnegweight ) { if ( !rndbool(abs(weight)) ) continue; weight = Math::sign(1.0, weight); } else if ( weight == 0.0 ) continue; accept(); // Divide by the bias introduced by the preweights in the reader. weight /= currentReader()->preweight; try { theLastXComb = currentReader()->getXComb(); currentEvent(new_ptr(Event(lastParticles(), this, generator()->runName(), generator()->currentEventNumber(), weight))); currentEvent()->optionalWeights() = currentReader()->optionalEventWeights(); performCollision(); if ( !currentCollision() ) throw Veto(); return currentEvent(); } catch (Veto) { reject(weight); } catch (Stop) { } catch (Exception &) { reject(weight); throw; } } } void LesHouchesEventHandler::skipEvents() { // Don't do this for readers which seem to generate events on the fly. if ( currentReader()->active() || currentReader()->NEvents() <= 0 ) return; // Estimate the fration of the total events available from // currentReader() which will be requested. double frac = currentReader()->stats.maxXSec()/stats.maxXSec(); if ( stats.accepted() > 0 ) frac *= double(stats.attempts())/double(stats.accepted()); else frac *= double(stats.attempts() + 1); double xscan = generator()->N()*frac/currentReader()->NEvents(); // Estimate the number of times we need to go through the events for // the currentReader(), and how many events on average we need to // skip for each attempted event to go through the file an integer // number of times. double nscan = ceil(xscan); double meanskip = nscan/xscan - 1.0; // Skip an average numer of steps with a Poissonian distribution. currentReader()-> skip(UseRandom::rndPoisson(meanskip)%currentReader()->NEvents()); } void LesHouchesEventHandler::select(double weight) { stats.select(weight); currentReader()->select(weight); } tCollPtr LesHouchesEventHandler::performCollision() { lastExtractor()->select(lastXCombPtr()); if ( CKKWHandler() ) CKKWHandler()->setXComb(lastXCombPtr()); currentCollision(new_ptr(Collision(lastParticles(), currentEvent(), this))); if ( currentEvent() ) currentEvent()->addCollision(currentCollision()); currentStep(new_ptr(Step(currentCollision(), this))); currentCollision()->addStep(currentStep()); currentStep()->addSubProcess(currentReader()->getSubProcess()); lastExtractor()->constructRemnants(lastXCombPtr()->partonBinInstances(), subProcess(), currentStep()); if ( !currentReader()->cuts().passCuts(*currentCollision()) ) throw Veto(); initGroups(); if ( ThePEG_DEBUG_ITEM(1) ) { if ( currentEvent() ) generator()->logfile() << *currentEvent(); else generator()->logfile() << *currentCollision(); } return continueCollision(); } EventPtr LesHouchesEventHandler::continueEvent() { try { continueCollision(); } catch (Veto) { reject(currentEvent()->weight()); } catch (Stop) { } catch (Exception &) { reject(currentEvent()->weight()); throw; } return currentEvent(); } void LesHouchesEventHandler::dofinish() { EventHandler::dofinish(); if ( selector().compensating() ) generator()->log() << "Warning: The run was ended while the LesHouchesEventHandler '" << name() << "' was still trying to compensate for weights larger than 1. " << "The cross section estimates may therefore be statistically " << "inaccurate." << endl; } void LesHouchesEventHandler::statistics(ostream & os) const { if ( statLevel() == 0 ) return; string line = "=======================================" "=======================================\n"; if ( stats.accepted() <= 0 ) { os << line << "No events generated by event handler '" << name() << "'." << endl; return; } os << line << "Statistics for Les Houches event handler \'" << name() << "\':\n" << " " << "generated number of Cross-section\n" << " " << " events attempts (nb)\n"; os << line << "Total:" << setw(42) << stats.accepted() << setw(13) << stats.attempts() << setw(17) << ouniterr(stats.xSec(), stats.xSecErr(), nanobarn) << endl << line; if ( statLevel() == 1 ) return; if ( statLevel() == 2 ) { os << "Per Les Houches Reader breakdown:\n"; for ( int i = 0, N = readers().size(); i < N; ++i ) { LesHouchesReader & reader = *readers()[i]; string n = reader.name(); n.resize(37, ' '); os << n << setw(11) << reader.stats.accepted() << setw(13) << reader.stats.attempts() << setw(17) << ouniterr(reader.stats.xSec(), reader.stats.xSecErr(), nanobarn) << endl; } os << line; } else { os << "Per Les Houches Reader (and process #) breakdown:\n"; for ( int i = 0, N = readers().size(); i < N; ++i ) { LesHouchesReader & reader = *readers()[i]; string n = reader.name() + " (all)"; n.resize(37, ' '); os << n << setw(11) << reader.stats.accepted() << setw(13) << reader.stats.attempts() << setw(17) << ouniterr(reader.stats.xSec(), reader.stats.xSecErr(), nanobarn) << endl; CrossSection xsectot = reader.stats.xSec(); if ( xsectot != ZERO ) xsectot /= reader.stats.sumWeights(); typedef LesHouchesReader::StatMap::const_iterator const_iterator; for ( const_iterator i = reader.statmap.begin(); i != reader.statmap.end(); ++i ) { ostringstream ss; ss << reader.name() << " (" << i->first << ")"; string n = ss.str(); n.resize(37, ' '); os << n << setw(11) << i->second.accepted() << setw(13) << i->second.attempts() << setw(17) << ouniterr(i->second.sumWeights()*xsectot, sqrt(i->second.sumWeights2())*xsectot, nanobarn) << endl; } os << line; } } string warn = "Warning: Result may be statistically incorrect since\n" " the following LesHouchesReaders were oversampled:\n"; for ( int i = 0, N = readers().size(); i < N; ++i ) { LesHouchesReader & reader = *readers()[i]; if ( reader.NEvents() > 0 && reader.stats.attempts() > reader.NEvents() ) { os << warn; warn = ""; os << "'" << reader.name() << "' (by a factor " << double(reader.stats.attempts())/double(reader.NEvents()) << ")" << endl; } } } void LesHouchesEventHandler::increaseMaxXSec(CrossSection maxxsec) { stats.maxXSec(selector().sum()); histStats.maxXSec(selector().sum()); currentReader()->increaseMaxXSec(maxxsec); } void LesHouchesEventHandler::accept() { stats.accept(); histStats.accept(); currentReader()->accept(); } void LesHouchesEventHandler::reject(double w) { stats.reject(w); histStats.reject(w); currentReader()->reject(w); } CrossSection LesHouchesEventHandler::histogramScale() const { return histStats.xSec()/histStats.sumWeights(); } CrossSection LesHouchesEventHandler::integratedXSec() const { return histStats.xSec(); } CrossSection LesHouchesEventHandler::integratedXSecErr() const { return histStats.xSecErr(); } void LesHouchesEventHandler::persistentOutput(PersistentOStream & os) const { os << stats << histStats << theReaders << theSelector << oenum(theWeightOption) << theUnitTolerance << theCurrentReader << warnPNum; } void LesHouchesEventHandler::persistentInput(PersistentIStream & is, int) { is >> stats >> histStats >> theReaders >> theSelector >> ienum(theWeightOption) >> theUnitTolerance >> theCurrentReader >> warnPNum; } ClassDescription LesHouchesEventHandler::initLesHouchesEventHandler; // Definition of the static class description member. void LesHouchesEventHandler::setUnitTolerance(double x) { theUnitTolerance = x; selector().tolerance(unitTolerance()); } void LesHouchesEventHandler::Init() { static ClassDocumentation documentation ("This is the main class administrating the selection of hard " "subprocesses from a set of ThePEG::LesHouchesReader objects."); static RefVector interfaceLesHouchesReaders ("LesHouchesReaders", "Objects capable of reading events from an event file or an " "external matrix element generator.", &LesHouchesEventHandler::theReaders, -1, false, false, true, false, false); static Switch interfaceWeightOption ("WeightOption", "The different ways to weight events in the Les Houches event handler. " "Whether weighted or not and whether or not negative weights are allowed.", &LesHouchesEventHandler::theWeightOption, unitweight, true, false); static SwitchOption interfaceWeightOptionUnitWeight (interfaceWeightOption, "UnitWeight", "All events have unit weight.", unitweight); static SwitchOption interfaceWeightOptionNegUnitWeight (interfaceWeightOption, "NegUnitWeight", "All events have weight +1 or maybe -1.", unitnegweight); static SwitchOption interfaceWeightOptionVarWeight (interfaceWeightOption, "VarWeight", "Events may have varying but positive weights.", varweight); static SwitchOption interfaceWeightOptionVarNegWeight (interfaceWeightOption, "VarNegWeight", "Events may have varying weights, both positive and negative.", varnegweight); static Switch interfaceWarnPNum ("WarnPNum", "Warn if the same process number is used in more than one " "LesHouchesReader.", &LesHouchesEventHandler::warnPNum, true, true, false); static SwitchOption interfaceWarnPNumWarning (interfaceWarnPNum, "Warning", "Give a warning message.", true); static SwitchOption interfaceWarnPNumNoWarning (interfaceWarnPNum, "NoWarning", "Don't give a warning message.", false); static Parameter interfaceUnitTolerance ("UnitTolerance", "If the WeightOption is set to unit weight, do not start compensating unless the a weight is found to be this much larger than unity.", &LesHouchesEventHandler::theUnitTolerance, 1.0e-6, 0.0, 0, true, false, Interface::lowerlim, &LesHouchesEventHandler::setUnitTolerance, (double(LesHouchesEventHandler::*)()const)(0), (double(LesHouchesEventHandler::*)()const)(0), (double(LesHouchesEventHandler::*)()const)(0), (double(LesHouchesEventHandler::*)()const)(0)); interfaceLesHouchesReaders.rank(10); interfaceWeightOption.rank(9); } thepeg-1.8.0.orig/LesHouches/MadGraphReader.cc0000644000175000017500000005117011747772425017332 0ustar sunsun// -*- C++ -*- // // MadGraphReader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MadGraphReader class. // #include "MadGraphReader.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDF/PDFBase.h" #include "ThePEG/LesHouches/MadGraphOneCut.h" #include "ThePEG/LesHouches/MadGraphTwoCut.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; using std::fgetc; using std::fgets; IBPtr MadGraphReader::clone() const { return new_ptr(*this); } IBPtr MadGraphReader::fullclone() const { return new_ptr(*this); } void MadGraphReader::open() { LesHouchesFileReader::open(); heprup.IDWTUP = 1; static const int ntags = 33; static const char * cuttags[] = {"ptj", "ptb", "pta", "ptl", "etaj", "etab", "etaa", "etal", "drjj", "drbb", "draa", "drll", "drbj", "draj", "drjl", "drab", "drbl", "dral", "mmjj", "mmbb", "mmaa", "mmll", "mmbj", "mmaj", "mmjl", "mmab", "mmbl", "mmal", "xptj", "xptb", "xpta", "xptl", "xetamin"}; ieve = neve = 0; // If we are reading a LHF formatted file things are rather easy. if ( LHFVersion.size() ) { // extract the number of events neve = numberOfEvents(outsideBlock); string madheader = outsideBlock; if ( neve == 0 ) { neve = numberOfEvents(headerBlock); madheader = headerBlock; } if ( neve == 0 ) Throw() << "The MadGraphReader '" << name() << "' expected the LHE file '" << filename() << "' to include MadGraph-specific header information, " << "but did not find any. The events may not be properly sampled." << Exception::warning; if ( neve != 0 ) NEvents(neve); // MadEvent has gives wrong values for XMAXUP and XWGTUP, they // need to be multiplied by the number of events to be LHEF // compliant. weightScale = neve*picobarn; // Scan information about cuts. for ( int itag = 0; itag < ntags; ++itag ) { string::size_type pos = madheader.find(string("= ") + cuttags[itag]); if ( pos != string::npos ) { string::size_type beg = max(madheader.rfind("#", pos) + 1, madheader.rfind("\n", pos) + 1); string value = madheader.substr(beg, pos - beg); for ( string::size_type i = 0; i < value.length(); ++i ) if ( value[i] == 'd' || value[i] == 'D' ) value[i] = 'e'; cuts[cuttags[itag]] = std::strtod(value.c_str(), NULL); } } return; } double xsec = -1.0; double maxw = -1.0; double ebeam1 = -1.0; double ebeam2 = -1.0; int lpp1 = 0; int lpp2 = 0; string pdftag; // First scan banner to extract some information // (LesHoushesFileReader::open has already read in the first line). cfile.resetline(); do { if ( !cfile ) break; if ( cfile.getc() != '#' ) { int test; cfile >> test; if ( cfile ) { cfile.resetline(); break; } } if ( cfile.find("# Number of Events") ) { cfile.skip(':'); cfile >> neve; } else if ( cfile.find("Integrated weight") ) { cfile.skip(':'); cfile >> xsec; } else if ( cfile.find("Max wgt") ) { cfile.skip(':'); cfile >> maxw; } else if ( cfile.find("ebeam(1)") || cfile.find("ebeam1") ) { cfile >> ebeam1; } else if ( cfile.find("ebeam(2)") || cfile.find("ebeam2") ) { cfile >> ebeam2; } else if ( cfile.find("lpp(1)") || cfile.find("lpp1") ) { cfile >> lpp1; } else if ( cfile.find("lpp(2)") || cfile.find("lpp2") ) { cfile >> lpp2; } else if ( cfile.find("PDF set") ) { cfile.skip('\''); cfile >> pdftag; pdftag = pdftag.substr(0, 7); } else if ( cfile.find("Number of Events Written ") ) { cfile.skip(':'); cfile >> neve; maxw = xsec/double(neve); } else { for ( int itag = 0; itag < ntags; ++itag ) { if ( cfile.find(string("= ") + cuttags[itag]) ) { cfile >> cuts[cuttags[itag]]; if ( cfile.getc() == 'd' ) { long x = 0; cfile >> x; cuts[cuttags[itag]] *= pow(10.0, double(x)); } break; } } } } while ( cfile.readline() ); // Return here if no comment block was found. if ( neve <= 0 ) return; // Convert the extracted information to LesHouches format. heprup.NPRUP = 1; heprup.LPRUP.push_back(0); heprup.XSECUP.push_back(xsec); heprup.XERRUP.push_back(0.0); heprup.XMAXUP.push_back(maxw); NEvents(neve); // MadEvent has gives wrong values for XMAXUP and XWGTUP, they // need to be multiplied by the number of events to be LHEF // compliant. weightScale = neve*picobarn; if ( !heprup.IDBMUP.first ) { if ( lpp1 == 1 ) heprup.IDBMUP.first = ParticleID::pplus; else if ( lpp1 == -1 ) heprup.IDBMUP.first = ParticleID::pbarminus; } if ( !heprup.IDBMUP.second ) { if ( lpp2 == 1 ) heprup.IDBMUP.second = ParticleID::pplus; else if ( lpp2 == -1 ) heprup.IDBMUP.second = ParticleID::pbarminus; } if ( heprup.EBMUP.first <= 0.0 ) heprup.EBMUP.first = ebeam1; if ( heprup.EBMUP.second <= 0.0 ) heprup.EBMUP.second = ebeam2; if ( !cfile ) throw LesHouchesFileError() << "An error occurred while '" << name() << "' was reading the file '" << filename() << "'." << Exception::runerror; if ( heprup.PDFSUP.first != 0 || heprup.PDFSUP.first != 0 ) return; // If we have an old MadGraph we have to try to figure out which PDF // codes to use. heprup.PDFGUP.first = heprup.PDFGUP.second = 0; if ( pdftag == "mrs02nl" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 20200; else if ( pdftag == "mrs02nn" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 20270; else if ( pdftag == "cteq6_m" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 10050; else if ( pdftag == "cteq6_l" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 10041; else if ( pdftag == "cteq6l1" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 10042; else if ( pdftag == "cteq5_m" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19050; else if ( pdftag == "cteq5_d" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19060; else if ( pdftag == "cteq5_l" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19070; else if ( pdftag == "cteq4_m" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19150; else if ( pdftag == "cteq4_d" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19160; else if ( pdftag == "cteq4_l" ) heprup.PDFSUP.first = heprup.PDFSUP.second = 19170; } long MadGraphReader::scan() { bool fixscale = !NEvents(); long neve = LesHouchesFileReader::scan(); if ( fixscale ) { // MadEvent has gives wrong values for XMAXUP and XWGTUP, they // need to be multiplied by the number of events to be LHEF // compliant. weightScale = neve*picobarn; if ( heprup.NPRUP > 1 ) weightScale /= heprup.NPRUP; } return neve; } bool MadGraphReader::doReadEvent() { if ( LesHouchesFileReader::doReadEvent() ) return true; if ( !cfile ) return false; hepeup.NUP = 0; ieve = 0; long evno = 0; hepeup.XWGTUP = 0.0; double scale = 0.0; double aEM = 0.0; double aS = 0.0; bool oldformat = false; cfile >> hepeup.NUP >> evno >> hepeup.XWGTUP >> scale >> aEM >> aS; if ( !cfile ) { hepeup.IDPRUP = evno; hepeup.SCALUP = fixedScale/GeV; hepeup.AQEDUP = fixedAEM; hepeup.AQCDUP = fixedAS; ++ieve; oldformat = true; } else { hepeup.IDPRUP = 0; ieve = evno; hepeup.SCALUP = scale; hepeup.AQEDUP = aEM; hepeup.AQCDUP = aS; } hepeup.IDUP.resize(hepeup.NUP); if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.IDUP[i]; hepeup.MOTHUP.resize(hepeup.NUP); if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.MOTHUP[i].first; if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.MOTHUP[i].second; hepeup.ICOLUP.resize(hepeup.NUP); if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.ICOLUP[i].first; if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.ICOLUP[i].second; // Try to figure out if the colour lines are reversed bool colrev = false; for ( int i = 0; i < hepeup.NUP; ++i ) if ( abs(hepeup.IDUP[i]) < 10 && hepeup.IDUP[i] < 0 && !hepeup.ICOLUP[i].second ) colrev = true; if ( colrev ) for ( int i = 0; i < hepeup.NUP; ++i ) swap(hepeup.ICOLUP[i].first, hepeup.ICOLUP[i].second); if ( oldformat ) { hepeup.ISTUP.assign(hepeup.NUP, 1); hepeup.ISTUP[0] = hepeup.ISTUP[1] = -1; hepeup.SPINUP.assign(hepeup.NUP, 9); } else { hepeup.ISTUP.resize(hepeup.NUP); if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.ISTUP[i]; hepeup.SPINUP.resize(hepeup.NUP, 9); if ( !cfile.readline() ) return false; for ( int i = 0; i < hepeup.NUP; ++i ) cfile >> hepeup.SPINUP[i]; } hepeup.PUP.resize(hepeup.NUP, vector(5)); for ( int i = 0; i < hepeup.NUP; ++i ) { if ( !cfile.readline() ) return false; int dummy = 0; cfile >> dummy >> hepeup.PUP[i][3] >> hepeup.PUP[i][0] >> hepeup.PUP[i][1] >> hepeup.PUP[i][2]; hepeup.PUP[i][4] = sqrt(max(sqr(hepeup.PUP[i][3]) - sqr(hepeup.PUP[i][0]) - sqr(hepeup.PUP[i][1]) - sqr(hepeup.PUP[i][2]), 0.0)); } if ( !cfile ) return false; // Set info not obtained from MadGraph. hepeup.VTIMUP = vector(hepeup.NUP, -1.0); // Deduce positions of incoming beams and corresponding partons. pair beampos(-1, -1); for ( int i = 0; i < hepeup.NUP; ++i ) { if ( hepeup.ISTUP[i] != -9 ) continue; if ( beampos.first < 0 ) beampos.first = i; else if ( beampos.second < 0 ) beampos.second = i; } pair partpos(-1, -1); for ( int i = hepeup.NUP - 1; i >= 0; --i ) { if ( hepeup.ISTUP[i] != -1 ) continue; if ( hepeup.MOTHUP[i].first > 0 && hepeup.MOTHUP[i].first == beampos.first ) partpos.first = i; else if ( hepeup.MOTHUP[i].first > 0 && hepeup.MOTHUP[i].first == beampos.second ) partpos.second = i; else if ( partpos.second < 0 ) partpos.second = i; else if ( partpos.first < 0 ) partpos.first = i; } // We set these to -1 to let the base class do the work. hepeup.XPDWUP.first = -1.0; hepeup.XPDWUP.second = -1.0; cfile.readline(); // Return true even if last read failed. return true; } void MadGraphReader::persistentOutput(PersistentOStream & os) const { os << ounit(fixedScale, GeV) << fixedAEM << fixedAS << cuts << doInitCuts; } void MadGraphReader::persistentInput(PersistentIStream & is, int) { is >> iunit(fixedScale, GeV) >> fixedAEM >> fixedAS >> cuts >> doInitCuts; } bool MadGraphReader::preInitialize() const { if ( LesHouchesFileReader::preInitialize() ) return true; if ( doInitCuts && !theCuts ) return true; return false; } void MadGraphReader::doinit() { LesHouchesFileReader::doinit(); if ( doInitCuts && !theCuts ) { theCuts = initCuts(); if ( !theCuts ) Throw() << "MadGraphReader '" << name() << "' could not create cut objects in pre-initialization." << Exception::warning; } } void MadGraphReader::initPDFs() { LesHouchesFileReader::initPDFs(); } CutsPtr MadGraphReader::initCuts() { CutsPtr newCuts; open(); close(); if ( cuts.empty() ) return CutsPtr(); vector ones; vector twos; vector onames; vector tnames; for ( map::iterator i = cuts.begin(); i != cuts.end(); ++i ) { if ( i->second <= 0.0 ) continue; MadGraphOneCut::CutType t = MadGraphOneCut::PT; char p = 0; if ( i->first.substr(0, 2) == "pt" ) { t = MadGraphOneCut::PT; p = i->first[2]; } else if ( i->first.substr(0, 3) == "eta" ) { t = MadGraphOneCut::ETA; p = i->first[3]; } else if ( i->first.substr(0, 3) == "xpt" ) { t = MadGraphOneCut::XPT; p = i->first[3]; } if ( p ) { MadGraphOneCut::PType pt = MadGraphOneCut::JET; switch ( p ) { case 'j': pt = MadGraphOneCut::JET; break; case 'b': pt = MadGraphOneCut::BOT; break; case 'a': pt = MadGraphOneCut::PHO; break; case 'l': pt = MadGraphOneCut::LEP; break; } ones.push_back(new_ptr(MadGraphOneCut(t, pt, i->second))); onames.push_back(i->first); continue; } if ( i->first.substr(0, 2) == "dr" || i->first.substr(0, 2) == "mm" ) { MadGraphTwoCut::CutType tt = MadGraphTwoCut::DELTAR; if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::INVMASS; MadGraphTwoCut::PPType pp = MadGraphTwoCut::JETJET; if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::JETJET; else if ( i->first.substr(2, 2) == "bb" ) pp = MadGraphTwoCut::BOTBOT; else if ( i->first.substr(2, 2) == "aa" ) pp = MadGraphTwoCut::PHOPHO; else if ( i->first.substr(2, 2) == "ll" ) pp = MadGraphTwoCut::LEPLEP; else if ( i->first.substr(2, 2) == "bj" ) pp = MadGraphTwoCut::BOTJET; else if ( i->first.substr(2, 2) == "aj" ) pp = MadGraphTwoCut::PHOJET; else if ( i->first.substr(2, 2) == "jl" ) pp = MadGraphTwoCut::JETLEP; else if ( i->first.substr(2, 2) == "ab" ) pp = MadGraphTwoCut::PHOBOT; else if ( i->first.substr(2, 2) == "bl" ) pp = MadGraphTwoCut::BOTLEP; else if ( i->first.substr(2, 2) == "al" ) pp = MadGraphTwoCut::PHOLEP; twos.push_back(new_ptr(MadGraphTwoCut(tt, pp, i->second))); tnames.push_back(i->first); } } if ( ones.empty() && twos.empty() ) return CutsPtr(); newCuts = new_ptr(Cuts()); generator()->preinitRegister(newCuts, fullName() + "/ExtractedCuts"); for ( int i = 0, N = ones.size(); i < N; ++i ) { generator()->preinitRegister(ones[i], fullName() + "/" + onames[i]); generator()->preinitInterface (newCuts, "OneCuts", 0, "insert", ones[i]->fullName()); // newCuts->add(tOneCutPtr(ones[i])); } for ( int i = 0, N = twos.size(); i < N; ++i ) { reporeg(twos[i], tnames[i]); generator()->preinitInterface (newCuts, "TwoCuts", 0, "insert", twos[i]->fullName()); // newCuts->add(tTwoCutPtr(twos[i])); } return newCuts; } string MadGraphReader::scanCuts(string) { if ( theCuts ) return "A Cuts object has already been assigned to this reader."; open(); close(); if ( cuts.empty() ) return "No information about cuts were found. " "Maybe the file was from an old version of MadGraph"; vector ones; vector twos; vector onames; vector tnames; for ( map::iterator i = cuts.begin(); i != cuts.end(); ++i ) { if ( i->second <= 0.0 ) continue; MadGraphOneCut::CutType t = MadGraphOneCut::PT; char p = 0; if ( i->first.substr(0, 2) == "pt" ) { t = MadGraphOneCut::PT; p = i->first[2]; } else if ( i->first.substr(0, 3) == "eta" ) { t = MadGraphOneCut::ETA; p = i->first[3]; } else if ( i->first.substr(0, 3) == "xpt" ) { t = MadGraphOneCut::XPT; p = i->first[3]; } if ( p ) { MadGraphOneCut::PType pt = MadGraphOneCut::JET; switch ( p ) { case 'j': pt = MadGraphOneCut::JET; break; case 'b': pt = MadGraphOneCut::BOT; break; case 'a': pt = MadGraphOneCut::PHO; break; case 'l': pt = MadGraphOneCut::LEP; break; } ones.push_back(new_ptr(MadGraphOneCut(t, pt, i->second))); onames.push_back(i->first); continue; } if ( i->first.substr(0, 2) == "dr" || i->first.substr(0, 2) == "mm" ) { MadGraphTwoCut::CutType tt = MadGraphTwoCut::DELTAR; if ( i->first.substr(0, 2) == "mm" ) tt = MadGraphTwoCut::INVMASS; MadGraphTwoCut::PPType pp = MadGraphTwoCut::JETJET; if ( i->first.substr(2, 2) == "jj" ) pp = MadGraphTwoCut::JETJET; else if ( i->first.substr(2, 2) == "bb" ) pp = MadGraphTwoCut::BOTBOT; else if ( i->first.substr(2, 2) == "aa" ) pp = MadGraphTwoCut::PHOPHO; else if ( i->first.substr(2, 2) == "ll" ) pp = MadGraphTwoCut::LEPLEP; else if ( i->first.substr(2, 2) == "bj" ) pp = MadGraphTwoCut::BOTJET; else if ( i->first.substr(2, 2) == "aj" ) pp = MadGraphTwoCut::PHOJET; else if ( i->first.substr(2, 2) == "jl" ) pp = MadGraphTwoCut::JETLEP; else if ( i->first.substr(2, 2) == "ab" ) pp = MadGraphTwoCut::PHOBOT; else if ( i->first.substr(2, 2) == "bl" ) pp = MadGraphTwoCut::BOTLEP; else if ( i->first.substr(2, 2) == "al" ) pp = MadGraphTwoCut::PHOLEP; twos.push_back(new_ptr(MadGraphTwoCut(tt, pp, i->second))); tnames.push_back(i->first); } } if ( ones.empty() && twos.empty() ) return "No non-zero cuts found."; theCuts = new_ptr(Cuts()); reporeg(theCuts, "ExtractedCuts"); for ( int i = 0, N = ones.size(); i < N; ++i ) { reporeg(ones[i], onames[i]); theCuts->add(tOneCutPtr(ones[i])); } for ( int i = 0, N = twos.size(); i < N; ++i ) { reporeg(twos[i], tnames[i]); theCuts->add(tTwoCutPtr(twos[i])); } return ""; } ClassDescription MadGraphReader::initMadGraphReader; // Definition of the static class description member. void MadGraphReader::Init() { static ClassDocumentation documentation ("ThePEG::MadGraphReader is used together with the LesHouchesEventHandler " "to read event files generated with the MadGraph/MadEvent program.", "Events were read from event files generated " "with the MadGraph/MadEvent\\cite{ThePEG::MadGraph} program.", "\\bibitem{ThePEG::MadGraph} F. Maltoni and T. Stelzer, " "hep-ph/0208156;\\\\" "T. Stelzer and W.F. Long, \\textit{Comput.~Phys.~Commun.} " "\\textbf{81} (1994) 357-371."); static Parameter interfaceFixedScale ("FixedScale", "Old MadGraph files do not necessarily contain information about " "the factorization (or renormalization) scale. In this case this " "is used instead.", &MadGraphReader::fixedScale, GeV, 91.188*GeV, ZERO, 1000.0*GeV, true, false, true); interfaceFixedScale.setHasDefault(false); static Parameter interfaceFixedAlphaEM ("FixedAlphaEM", "Old MadGraph files do not necessarily contain information about " "the value of \\f$\\alpha_{EM}\\f$. In this case this is used instead.", &MadGraphReader::fixedAEM, 0.007546772, 0.0, 1.0, true, false, true); interfaceFixedAlphaEM.setHasDefault(false); static Parameter interfaceFixedAlphaS ("FixedAlphaS", "Old MadGraph files do not necessarily contain information about " "the value of \\f$\\alpha_S\\f$. In this case this is used instead.", &MadGraphReader::fixedAS, 0.12, 0.0, 1.0, true, false, true); interfaceFixedAlphaS.setHasDefault(false); static Command interfaceScanCuts ("ScanCuts", "If no LesHouchesReader::Cuts has been assigned, " "the event file is scanned for information about generation cuts. If cuts " "are found, the corresponding objects will be created in a sub-directory " "with the same name as this object and assigned as the " "LesHouchesReader::Cuts of this reader.", &MadGraphReader::scanCuts, true); static Switch interfaceInitCuts ("InitCuts", "If no cuts were specified for this reader, try to extract cut " "information from the MadGraph file and assign the relevant cut " "objects when the reader is initialized.", &MadGraphReader::doInitCuts, false, true, false); static SwitchOption interfaceInitCutsYes (interfaceInitCuts, "Yes", "Extract cuts during initialization.", true); static SwitchOption interfaceInitCutsNo (interfaceInitCuts, "No", "Do not extract cuts during initialization.", false); interfaceScanCuts.rank(10.5); interfaceInitCuts.rank(10.6); } long MadGraphReader::numberOfEvents(string block) { long output(0); // Check for number of events in the file. string::size_type pos = block.find("## Number of Events :"); if ( pos == string::npos ) pos = block.find("# Number of Events :"); if ( pos != string::npos ) { pos += 28; output = std::strtol(block.c_str() + pos, NULL, 0); } return output; } thepeg-1.8.0.orig/LesHouches/LesHouchesFileReader.fh0000644000175000017500000000034511747772425020517 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the LesHouchesFileReader class. // #ifndef ThePEG_LesHouchesFileReader_FH #define ThePEG_LesHouchesFileReader_FH namespace ThePEG { class LesHouchesFileReader; } #endif thepeg-1.8.0.orig/LesHouches/LesHouchesReader.h0000644000175000017500000006410311747772425017553 0ustar sunsun// -*- C++ -*- // // LesHouchesReader.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LesHouchesReader_H #define THEPEG_LesHouchesReader_H // This is the declaration of the LesHouchesReader class. #include "LesHouches.h" #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/Utilities/ObjectIndexer.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Utilities/XSecStat.h" #include "ThePEG/PDF/PartonBinInstance.h" #include "ThePEG/PDF/PartonBin.fh" #include "ThePEG/MatrixElement/ReweightBase.h" #include "LesHouchesEventHandler.fh" #include "LesHouchesReader.fh" #include "ThePEG/Utilities/CFile.h" #include #include namespace ThePEG { /** * LesHouchesReader is an abstract base class to be used for objects * which reads event files or streams from matrix element * generators. Derived classes must at least implement the open() and * doReadEvent() methods to read in information about the whole run into * the HEPRUP variable and next event into the HEPEUP variable * respectively. Also the close() function to close the file or stream * read must be implemented. Although these functions are named as if * we are reading from event files, they could just as well implement * the actual generation of events. * * After filling the HEPRUP and HEPEUP variables, which are protected * and easily accesible from the sub-class, this base class will then * be responsible for transforming this data to the ThePEG Event * record in the getEvent() method. LesHouchesReaders can * only be used inside LesHouchesEventHandler objects. * * In the initialization the virtual open() and scan() functions are * called. Here the derived class must provide the information about * the processes in the variables corresponding to the HEPRUP common * block. Note that the IDWTUP is required to be +/- 1, and sub * classes are required to change the information accordingly to * ensure the correct corss section sampling. Note also that the * controlling LesHouchesEventHandler may choose to generate weighted * events even if IDWTUP is 1. * * Note that the information given per process in e.g. the XSECUP and * XMAXUP vectors is not used by the LesHouchesEventHandler and by * default the LesHouchesReader is not assumed to be able to actively * choose between the sub-processes. Instead, the * LesHouchesEventHandler can handle several LesHouchesReader objects * and choose between them. However, a sub-class of LesHouchesReader * may set the flag isActive, in which case it is assumed to be able * to select between its sub-processes itself. * * The LesHouchesReader may be assigned a number ReweightBase objects * which either completely reweights the events produced (in the * reweights vector), or only biases the selection without influencing * the cross section (in the preweights vector). Note that it is the * responsibility of a sub-class to call the reweight() function and * multiply the weight according to its return value (typically done * in the readEvent() function). * * @see \ref LesHouchesReaderInterfaces "The interfaces" * defined for LesHouchesReader. * @see Event * @see LesHouchesEventHandler */ class LesHouchesReader: public HandlerBase, public LastXCombInfo<> { /** * LesHouchesEventHandler should have access to our private parts. */ friend class LesHouchesEventHandler; /** * Map for accumulating statistics of cross sections per process * number. */ typedef map StatMap; /** * Map of XComb objects describing the incoming partons indexed by * the corresponding PartonBin pair. */ typedef map XCombMap; /** * A vector of pointers to ReweightBase objects. */ typedef vector ReweightVector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. If the optional argument is true, the reader * is assumed to be able to produce events on demand for a given * process. */ LesHouchesReader(bool active = false); /** * Copy-constructor. */ LesHouchesReader(const LesHouchesReader &); /** * Destructor. */ virtual ~LesHouchesReader(); //@} public: /** @name Main virtual fuctions to be overridden in * sub-classes. They are named as if we are reading from event * files, but could equally well implement the actual generation of * events. */ //@{ /** * Open a file or stream with events and read in the run information * into the heprup variable. */ virtual void open() = 0; /** * Read the next event from the file or stream into the * corresponding protected variables. Return false if there is no * more events. */ virtual bool doReadEvent() = 0; /** * Close the file or stream from which events have been read. */ virtual void close() = 0; //@} /** @name Other important function which may be overridden in * sub-classes which wants to bypass the basic HEPRUP or HEPEUP * variables or otherwise facilitate the conversion to ThePEG * objects. */ //@{ /** * Initialize. This function is called by the LesHouchesEventHandler * to which this object is assigned. */ virtual void initialize(LesHouchesEventHandler & eh); /** * Calls readEvent() or uncacheEvent() to read information into the * LesHouches common block variables. This function is called by the * LesHouchesEventHandler if this reader has been selectod to * produce an event. * * @return the weight asociated with this event. If negative weights * are allowed it should be between -1 and 1, otherwise between 0 * and 1. If outside these limits the previously estimated maximum * is violated. Note that the estimated maximum then should be * updated from the outside. */ virtual double getEvent(); /** * Calls doReadEvent() and performs pre-defined reweightings. A * sub-class overrides this function it must make sure that the * corresponding reweightings are done. */ virtual bool readEvent(); /** * Skip \a n events. Used by LesHouchesEventHandler to make sure * that a file is scanned an even number of times in case the events * are not ramdomly distributed in the file. */ virtual void skip(long n); /** * Get an XComb object. Converts the information in the Les Houches * common block variables to an XComb object describing the sub * process. This is the way information is conveyed from the reader * to the controlling LesHouchesEventHandler. */ tXCombPtr getXComb(); /** * Get a SubProcess object corresponding to the information in the * Les Houches common block variables. */ tSubProPtr getSubProcess(); /** * Scan the file or stream to obtain information about cross section * weights and particles etc. This function should fill the * variables corresponding to the /HEPRUP/ common block. The * function returns the number of events scanned. */ virtual long scan(); /** * Take the information corresponding to the HEPRUP common block and * initialize the statistics for this reader. */ virtual void initStat(); /** * Reweights the current event using the reweights and preweights * vectors. It is the responsibility of the sub-class to call this * function after the HEPEUP information has been retrieved. */ double reweight(); /** * Converts the information in the Les Houches common block * variables into a Particle objects. */ virtual void fillEvent(); /** * Removes the particles created in the last generated event, * preparing to produce a new one. */ void reset(); /** * Possibility for subclasses to recover from non-conformant * settings of XMAXUP when an event file has been scanned with \a * neve events. Should set weightScale so that the average XMAXUP * times weightScale gives the cross section for a process. (This is * needed for MadEvent). */ virtual void setWeightScale(long neve); //@} /** @name Access information about the current event. */ //@{ /** * Return the size of this event in bytes. To be used for the cache * file. \a npart is the number of particles. If \a npart is 0, the * number is taken from NUP. */ static size_t eventSize(int N) { return (N + 1)*sizeof(int) + // IDPRUP, ISTUP (7*N + 4)*sizeof(double) + // XWGTUP, SCALUP, AQEDUP, AQCDUP, PUP, // VTIMUP, SPINUP N*sizeof(long) + // IDUP 2*N*sizeof(pair) + // MOTHUP, ICOLUP sizeof(pair) + // XPDWUP. 2*sizeof(double); // lastweight and preweight } /** * The current event weight given by XWGTUP times possible * reweighting. Note that this is not necessarily the same as what * is returned by getEvent(), which is scaled with the maximum * weight. */ double eventWeight() const { return hepeup.XWGTUP*lastweight; } /** * Return the optional named weights associated to the current event. */ const map& optionalEventWeights() const { return optionalWeights; } /** * The pair of PartonBinInstance objects describing the current * incoming partons in the event. */ const PBIPair & partonBinInstances() const { return thePartonBinInstances; } /** * Return the instances of the beam particles for the current event. */ const PPair & beams() const { return theBeams; } /** * Return the instances of the incoming particles to the sub process * for the current event. */ const PPair & incoming() const { return theIncoming; } /** * Return the instances of the outgoing particles from the sub process * for the current event. */ const PVector & outgoing() const { return theOutgoing; } /** * Return the instances of the intermediate particles in the sub * process for the current event. */ const PVector & intermediates() const { return theIntermediates; } /** * If this reader is to be used (possibly together with others) for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the highest multiplicity matrix element in * the group. */ int maxMultCKKW() const { return theMaxMultCKKW; } /** * If this reader is to be used (possibly together with others) for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the lowest multiplicity matrix element in * the group. */ int minMultCKKW() const { return theMinMultCKKW; } //@} /** @name Other inlined access functions. */ //@{ /** * The number of events found in this reader. If less than zero the * number of events are unlimited. */ long NEvents() const { return theNEvents; } /** * The number of events produced so far. Is reset to zero if an * event file is reopened. */ long currentPosition() const { return position; } /** * The maximum number of events to scan to collect information about * processes and cross sections. If less than 0, all events will be * scanned. */ long maxScan() const { return theMaxScan; } /** * Return true if this reader is active. */ bool active() const { return isActive; } /** * True if negative weights may be produced. */ bool negativeWeights() const { return heprup.IDWTUP < 0; } /** * The collected cross section statistics for this reader. */ const XSecStat & xSecStats() const { return stats; } /** * Collected statistics about the individual processes. */ const StatMap & processStats() const { return statmap; } /** * Select the current event. It will later be rejected with a * probability given by \a weight. */ void select(double weight) { stats.select(weight); statmap[hepeup.IDPRUP].select(weight); } /** * Accept the current event assuming it was previously selcted. */ void accept() { stats.accept(); statmap[hepeup.IDPRUP].accept(); } /** * Reject the current event assuming it was previously accepted. */ void reject(double w) { stats.reject(w); statmap[hepeup.IDPRUP].reject(w); } /** * Increase the overestimated cross section for this reader. */ virtual void increaseMaxXSec(CrossSection maxxsec); /** * The PartonExtractor object used to construct remnants. */ tPExtrPtr partonExtractor() const { return thePartonExtractor; } /** * Return a possibly null pointer to a CascadeHandler to be used for * CKKW-reweighting. */ tCascHdlPtr CKKWHandler() const { return theCKKW; } /** * The pairs of PartonBin objects describing the partons which can * be extracted by the PartonExtractor object. */ const PartonPairVec & partonBins() const { return thePartonBins; } /** * The map of XComb objects indexed by the corresponding PartonBin * pair. */ const XCombMap & xCombs() const { return theXCombs; } /** * The Cuts object to be used for this reader. */ const Cuts & cuts() const { return *theCuts; } //@} protected: /** @name Functions for manipulating cache files. */ //@{ /** * Name of file used to cache the events form the reader in a * fast-readable form. If empty, no cache file will be generated. */ string cacheFileName() const { return theCacheFileName; } /** * Determines whether to apply cuts to events converting them to * ThePEG format. */ bool cutEarly() const { return doCutEarly; } /** * File stream for the cache. */ CFile cacheFile() const { return theCacheFile;} /** * Open the cache file for reading. */ void openReadCacheFile(); /** * Open the cache file for writing. */ void openWriteCacheFile(); /** * Close the cache file; */ void closeCacheFile(); /** * Write the current event to the cache file. */ void cacheEvent() const; /** * Read an event from the cache file. Return false if something went wrong. */ bool uncacheEvent(); /** * Reopen a reader. If we have reached the end of an event file, * reopen it and issue a warning if we have used up a large fraction * of it. */ void reopen(); /** * Helper function to write a variable to a memory location */ template static char * mwrite(char * pos, const T & t, size_t n = 1) { std::memcpy(pos, &t, n*sizeof(T)); return pos + n*sizeof(T); } /** * Helper function to read a variable from a memory location */ template static const char * mread(const char * pos, T & t, size_t n = 1) { std::memcpy(&t, pos, n*sizeof(T)); return pos + n*sizeof(T); } //@} /** @name Auxilliary virtual methods which may be verridden by sub-classes. */ //@{ /** * Check the existence of a pair of PartonBin objects corresponding * to the current event. * * @return false if no pair of suitable PartonBin objects was found. */ virtual bool checkPartonBin(); /** * Create instances of all particles in the event and store them * in particleIndex. */ virtual void createParticles(); /** * Using the already created particles create a pair of * PartonBinInstance objects corresponding to the incoming * partons. Return the corresponding PartonBin objects. */ virtual tcPBPair createPartonBinInstances(); /** * Create instances of the incoming beams in the event and store * them in particleIndex. If no beam particles are included in the * event they are created from the run info. */ virtual void createBeams(); /** * Go through the mother indices and connect up the Particles. */ virtual void connectMothers(); //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Set functions for some variables not in the Les Houches accord. */ //@{ /** * The number of events in this reader. If less than zero the number * of events is unlimited. */ void NEvents(long x) { theNEvents = x; } /** * The map of XComb objects indexed by the corresponding PartonBin * pair. */ XCombMap & xCombs() { return theXCombs; } //@} /** @name Standard (and non-standard) Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish() { close(); HandlerBase::dofinish(); } /** * Return true if this object needs to be initialized before all * other objects because it needs to extract PDFs from the event file. */ virtual bool preInitialize() const; /** * Called from doinit() to extract PDFs from the event file and add * the corresponding objects to the current EventGenerator. */ virtual void initPDFs(); //@} protected: /** * The HEPRUP common block. */ HEPRUP heprup; /** * The HEPEUP common block. */ HEPEUP hepeup; /** * The ParticleData objects corresponding to the incoming particles. */ tcPDPair inData; /** * The PDFBase objects which has been used for the beam particle * when generating the events being read. Specified in the interface * or derived from PDFGUP and PDFSUP. */ pair inPDF; /** * The PDFBase object to be used in the subsequent generation. */ pair outPDF; /** * The PartonExtractor object used to construct remnants. */ PExtrPtr thePartonExtractor; /** * A pointer to a CascadeHandler to be used for CKKW-reweighting. */ tCascHdlPtr theCKKW; /** * The pairs of PartonBin objects describing the partons which can * be extracted by the PartonExtractor object. */ PartonPairVec thePartonBins; /** * The map of XComb objects indexed by the corresponding PartonBin * pair. */ XCombMap theXCombs; /** * The Cuts object to be used for this reader. */ CutsPtr theCuts; /** * The number of events in this reader. If less than zero the number * of events is unlimited. */ long theNEvents; /** * The number of events produced by this reader so far. Is reset * every time an event file is reopened. */ long position; /** * The number of times this reader has been reopened. */ int reopened; /** * The maximum number of events to scan to collect information about * processes and cross sections. If less than 0, all events will be * scanned. */ long theMaxScan; /** * Flag to tell whether we are in the process of scanning. */ bool scanning; /** * True if this is an active reader. */ bool isActive; /** * Name of file used to cache the events form the reader in a * fast-readable form. If empty, no cache file will be generated. */ string theCacheFileName; /** * Determines whether to apply cuts to events before converting them * to ThePEG format. */ bool doCutEarly; /** * Collect statistics for this reader. */ XSecStat stats; /** * Collect statistics for each individual process. */ StatMap statmap; /** * The pair of PartonBinInstance objects describing the current * incoming partons in the event. */ PBIPair thePartonBinInstances; /** * Association between ColourLines and colour indices in the current * translation. */ ObjectIndexer colourIndex; /** * Association between Particles and indices in the current * translation. */ ObjectIndexer particleIndex; /** * The instances of the beam particles for the current event. */ PPair theBeams; /** * The instances of the incoming particles to the sub process for * the current event. */ PPair theIncoming; /** * The instances of the outgoing particles from the sub process for * the current event. */ PVector theOutgoing; /** * The instances of the intermediate particles in the sub process for * the current event. */ PVector theIntermediates; /** * File stream for the cache. */ CFile theCacheFile; /** * The reweight objects modifying the weights of this reader. */ ReweightVector reweights; /** * The preweight objects modifying the weights of this reader. */ ReweightVector preweights; /** * The factor with which this reader was last pre-weighted. */ double preweight; /** * Should the event be reweighted by PDFs used by the PartonExtractor? */ bool reweightPDF; /** * Should PDFBase objects be constructed from the information in the * event file in the initialization? */ bool doInitPDFs; /** * If this reader is to be used (possibly together with others) for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the highest multiplicity matrix element in * the group. */ int theMaxMultCKKW; /** * If this reader is to be used (possibly together with others) for * CKKW reweighting and veto, this should give the multiplicity of * outgoing particles in the lowest multiplicity matrix element in * the group. */ int theMinMultCKKW; /** * The weight multiplying the last read event due to PDF * reweighting, CKKW reweighting or assigned reweight and preweight * objects. */ double lastweight; /** * The optional weights associated to the last read events. */ map optionalWeights; /** * If the maximum cross section of this reader has been increased * with increaseMaxXSec(), this is the total factor with which it * has been increased. */ double maxFactor; /** * The (reweighted) XWGTUP value should be scaled with this cross * section when compared to the overestimated cross section. */ CrossSection weightScale; /** * Individual scales for different sub-processes if reweighted. */ vector xSecWeights; /** * Individual maximum weights for individual (possibly reweighted) * processes. */ map maxWeights; /** * Is set to true when getEvent() is called from skip(int). */ bool skipping; /** * Option for the treatment of the momenta supplied */ unsigned int theMomentumTreatment; /** * Set to true if warnings about possible weight incompatibilities * should be issued. */ bool useWeightWarnings; /** * Option to allow reopening of the file */ bool theReOpenAllowed; /** * Use the spin information */ bool theIncludeSpin; private: /** Access function for the interface. */ void setBeamA(long id); /** Access function for the interface. */ long getBeamA() const; /** Access function for the interface. */ void setBeamB(long id); /** Access function for the interface. */ long getBeamB() const; /** Access function for the interface. */ void setEBeamA(Energy e); /** Access function for the interface. */ Energy getEBeamA() const; /** Access function for the interface. */ void setEBeamB(Energy e); /** Access function for the interface. */ Energy getEBeamB() const; /** Access function for the interface. */ void setPDFA(PDFPtr); /** Access function for the interface. */ PDFPtr getPDFA() const; /** Access function for the interface. */ void setPDFB(PDFPtr); /** Access function for the interface. */ PDFPtr getPDFB() const; private: /** * Describe an abstract base class with persistent data. */ static AbstractClassDescription initLesHouchesReader; /** * Private and non-existent assignment operator. */ LesHouchesReader & operator=(const LesHouchesReader &); public: /** @cond EXCEPTIONCLASSES */ /** Exception class used by LesHouchesReader in case inconsistencies * are encountered. */ class LesHouchesInconsistencyError: public Exception {}; /** Exception class used by LesHouchesReader in case more events than available are requested. */ class LesHouchesReopenWarning: public Exception {}; /** Exception class used by LesHouchesReader in case reopening an event file fails. */ class LesHouchesReopenError: public Exception {}; /** Exception class used by LesHouchesReader in case there is information missing in the initialization phase. */ class LesHouchesInitError: public InitException {}; /** @endcond */ }; /// Stream output for HEPEUP ostream & operator<<(ostream & os, const HEPEUP & h); } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of LesHouchesReader. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of LesHouchesReader. */ typedef HandlerBase NthBase; }; /** * This template specialization informs ThePEG about the name of the * LesHouchesReader class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::LesHouchesReader"; } /** * Return the name of the shared library to be loaded to get access * to the LesHouchesReader class and every other class it uses * (except the base class). */ static string library() { return "LesHouches.so"; } }; /** @endcond */ } #endif /* THEPEG_LesHouchesReader_H */ thepeg-1.8.0.orig/LesHouches/LesHouchesFileReader.h0000644000175000017500000001577511747772425020366 0ustar sunsun// -*- C++ -*- // // LesHouchesFileReader.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LesHouchesFileReader_H #define THEPEG_LesHouchesFileReader_H // This is the declaration of the LesHouchesFileReader class. #include "ThePEG/LesHouches/LesHouchesReader.h" #include "LesHouchesFileReader.fh" #include "ThePEG/PDT/Decayer.h" #include "ThePEG/Utilities/CFileLineReader.h" #include namespace ThePEG { /** * LesHouchesFileReader is an base class to be used for objects which * reads event files from matrix element generators. It inherits from * LesHouchesReader and extends it by defining a file handle to be * read from, which is opened and closed by the open() and close() * functions. Note that the file handle is a standard C filehandle and * not a C++ stream. This is because there is no standard way in C++ * to connect a pipe to a stream for reading eg. gzipped files. This * class is able to read plain event files conforming to the Les * Houches Event File accord. * * @see \ref LesHouchesFileReaderInterfaces "The interfaces" * defined for LesHouchesFileReader. * @see Event * @see LesHouchesReader */ class LesHouchesFileReader: public LesHouchesReader { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ LesHouchesFileReader() : neve(0), ieve(0), theQNumbers(false) {} /** * Copy-constructor. Note that a file which is opened in the object * copied from will have to be reopened in this. */ LesHouchesFileReader(const LesHouchesFileReader &); /** * Destructor. */ virtual ~LesHouchesFileReader(); //@} public: /** @name Virtual functions specified by the LesHouchesReader base class. */ //@{ /** * Initialize. This function is called by the LesHouchesEventHandler * to which this object is assigned. */ virtual void initialize(LesHouchesEventHandler & eh); /** * Open a file with events. Derived classes should overwrite it and * first calling it before reading in the run information into the * corresponding protected variables. */ virtual void open(); /** * Close the file from which events have been read. */ virtual void close(); /** * Read the next event from the file or stream into the * corresponding protected variables. Return false if there is no * more events or if this was not a LHF event file. */ virtual bool doReadEvent(); //@} /** * Return the name of the file from where to read events. */ string filename() const { return theFileName; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Standard (and non-standard) Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Return true if this object needs to be initialized before all * other objects because it needs to extract PDFs from the event file. */ virtual bool preInitialize() const; //@ protected: /** * The wrapper around the C FILE stream from which to read */ CFileLineReader cfile; protected: /** * The number of events in this file. */ long neve; /** * The current event number. */ long ieve; /** * If the file is a standard Les Houches formatted file (LHF) this * is its version number. If empty, this is not a Les Houches * formatted file */ string LHFVersion; /** * If LHF. All lines (since the last open() or readEvent()) outside * the header, init and event tags. */ string outsideBlock; /** * If LHF. All lines from the header block. */ string headerBlock; /** * If LHF. Additional comments found in the init block. */ string initComments; /** * If LHF. Map of attributes (name-value pairs) found in the init * tag. */ map initAttributes; /** * If LHF. Additional comments found with the last read event. */ string eventComments; /** * If LHF. Map of attributes (name-value pairs) found in the last * event tag. */ map eventAttributes; private: /** * The name of the file from where to read events. */ string theFileName; /** * Whether or not to search for QNUMBERS stuff */ bool theQNumbers; /** * Decayer for any decay modes read from the file */ DecayerPtr theDecayer; private: /** * Describe an abstract base class with persistent data. */ static ClassDescription initLesHouchesFileReader; /** * Private and non-existent assignment operator. */ LesHouchesFileReader & operator=(const LesHouchesFileReader &); public: /** @cond EXCEPTIONCLASSES */ /** Exception class used by LesHouchesFileReader if reading the file * fails. */ class LesHouchesFileError: public Exception {}; /** @endcond */ }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** * This template specialization informs ThePEG about the * base class of LesHouchesFileReader. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the base class of LesHouchesFileReader. */ typedef LesHouchesReader NthBase; }; /** * This template specialization informs ThePEG about the name of the * LesHouchesFileReader class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** * Return the class name. */ static string className() { return "ThePEG::LesHouchesFileReader"; } /** * Return the name of the shared library to be loaded to get access * to the LesHouchesFileReader class and every other class it uses * (except the base class). */ static string library() { return "LesHouches.so"; } }; /** @endcond */ } #endif /* THEPEG_LesHouchesFileReader_H */ thepeg-1.8.0.orig/LesHouches/LesHouchesReader.fh0000644000175000017500000000047511747772425017723 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the LesHouchesReader class. // #ifndef ThePEG_LesHouchesReader_FH #define ThePEG_LesHouchesReader_FH #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class LesHouchesReader; ThePEG_DECLARE_CLASS_POINTERS(LesHouchesReader,LesHouchesReaderPtr); } #endif thepeg-1.8.0.orig/LesHouches/Makefile.in0000644000175000017500000005476511756366734016301 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = LesHouches ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(pkglib_LTLIBRARIES) LesHouches_la_LIBADD = am__objects_1 = LesHouchesReader.lo LesHouchesFileReader.lo \ LesHouchesEventHandler.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_LesHouches_la_OBJECTS = $(am__objects_1) $(am__objects_3) LesHouches_la_OBJECTS = $(am_LesHouches_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent LesHouches_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(LesHouches_la_LDFLAGS) $(LDFLAGS) \ -o $@ MadGraphReader_la_LIBADD = am_MadGraphReader_la_OBJECTS = MadGraphReader.lo MadGraphOneCut.lo \ MadGraphTwoCut.lo MadGraphReader_la_OBJECTS = $(am_MadGraphReader_la_OBJECTS) MadGraphReader_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(MadGraphReader_la_LDFLAGS) \ $(LDFLAGS) -o $@ DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(LesHouches_la_SOURCES) $(MadGraphReader_la_SOURCES) DIST_SOURCES = $(LesHouches_la_SOURCES) $(MadGraphReader_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = LesHouchesReader.cc LesHouchesFileReader.cc \ LesHouchesEventHandler.cc DOCFILES = LesHouchesReader.h LesHouchesFileReader.h \ LesHouchesEventHandler.h LesHouches.h INCLUDEFILES = $(DOCFILES) LesHouchesReader.fh \ LesHouchesFileReader.fh \ LesHouchesEventHandler.fh pkglib_LTLIBRARIES = LesHouches.la MadGraphReader.la # Version info should be updated if any interface or persistent I/O # function is changed MadGraphReader_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MadGraphReader_la_SOURCES = MadGraphReader.cc MadGraphReader.h \ MadGraphOneCut.cc MadGraphOneCut.h \ MadGraphTwoCut.cc MadGraphTwoCut.h # Version info should be updated if any interface or persistent I/O # function is changed LesHouches_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LesHouches_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu LesHouches/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu LesHouches/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } LesHouches.la: $(LesHouches_la_OBJECTS) $(LesHouches_la_DEPENDENCIES) $(EXTRA_LesHouches_la_DEPENDENCIES) $(AM_V_CXXLD)$(LesHouches_la_LINK) -rpath $(pkglibdir) $(LesHouches_la_OBJECTS) $(LesHouches_la_LIBADD) $(LIBS) MadGraphReader.la: $(MadGraphReader_la_OBJECTS) $(MadGraphReader_la_DEPENDENCIES) $(EXTRA_MadGraphReader_la_DEPENDENCIES) $(AM_V_CXXLD)$(MadGraphReader_la_LINK) -rpath $(pkglibdir) $(MadGraphReader_la_OBJECTS) $(MadGraphReader_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LesHouchesEventHandler.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LesHouchesFileReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/LesHouchesReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MadGraphOneCut.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MadGraphReader.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MadGraphTwoCut.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-pkglibLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pkglibLTLIBRARIES cscopelist ctags \ distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/LesHouches/LesHouchesEventHandler.h0000644000175000017500000002435211747772425020732 0ustar sunsun// -*- C++ -*- // // LesHouchesEventHandler.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LesHouchesEventHandler_H #define THEPEG_LesHouchesEventHandler_H // // This is the declaration of the LesHouchesEventHandler class. // #include "ThePEG/Handlers/EventHandler.h" #include "LesHouchesEventHandler.fh" #include "LesHouchesReader.fh" #include "ThePEG/Utilities/CompSelector.h" #include "ThePEG/Utilities/XSecStat.h" namespace ThePEG { /** * The LesHouchesEventHandler inherits from the general EventHandler * class and administers the reading of events generated by external * matrix element generator programs according to the Les Houches * accord. * * The class has a list of LesHouchesReaders which * typically are connected to files with event data produced by * external matrix element generator programs. When an event is * requested by LesHouchesEventHandler, one of the readers are chosen, * an event is read in and then passed to the different * StepHandler defined in the underlying * EventHandler class. * * @see \ref LesHouchesEventHandlerInterfaces "The interfaces" * defined for LesHouchesEventHandler. */ class LesHouchesEventHandler: public EventHandler { public: /** * A vector of LesHouchesReader objects. */ typedef vector ReaderVector; /** * A selector of readers. */ typedef CompSelector ReaderSelector; /** * Enumerate the weighting options. */ enum WeightOpt { unitweight = 1, /**< All events have unit weight. */ unitnegweight = -1, /**< All events have wight +/- 1. */ varweight = 2, /**< Varying positive weights. */ varnegweight = -2 /**< Varying positive or negative weights. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ LesHouchesEventHandler() : theWeightOption(unitweight), theUnitTolerance(1.0e-6), warnPNum(true) { selector().tolerance(unitTolerance()); } /** * The destructor. */ virtual ~LesHouchesEventHandler(); //@} public: /** @name Initialization and finalization functions. */ //@{ /** * Initialize this event handler and all related objects needed to * generate events. */ virtual void initialize(); /** * Write out accumulated statistics about intergrated cross sections * and stuff. */ virtual void statistics(ostream &) const; /** * Histogram scale. A histogram bin which has been filled with the * weights associated with the Event objects should be scaled by * this factor to give the correct cross section. */ virtual CrossSection histogramScale() const; /** * The estimated total integrated cross section of the processes * generated in this run. * @return 0 if no integrated cross section could be estimated. */ virtual CrossSection integratedXSec() const; /** * The estimated error in the total integrated cross section of the * processes generated in this run. * @return 0 if no integrated cross section error could be estimated. */ virtual CrossSection integratedXSecErr() const; //@} /** @name Functions used for the actual generation */ //@{ /** * Generate an event. */ virtual EventPtr generateEvent(); /** * Create the Event and Collision objects. Used by the * generateEvent() function. */ virtual tCollPtr performCollision(); /** * Continue generating an event if the generation has been stopped * before finishing. */ virtual EventPtr continueEvent(); //@} /** @name Functions to manipulate statistics. */ //@{ /** * An event has been selected. Signal that an event has been * selected with the given \a weight. If unit weights are requested, * the event will be accepted with that weight. This also takes care * of the statistics collection of the selected reader object. */ void select(double weight); /** * Accept the current event, taking care of the statistics * collection of the corresponding reader objects. */ void accept(); /** * Reject the current event, taking care of the statistics * collection of the corresponding reader objects. */ void reject(double weight); /** * Increase the overestimated cross section for the selected reader. */ void increaseMaxXSec(CrossSection maxxsec); /** * Skip some events. To ensure a reader file is scanned an even * number of times, skip a number of events for the selected reader. */ void skipEvents(); //@} /** @name Simple access functions. */ //@{ /** * The way weights are to be treated. */ WeightOpt weightOption() const { return theWeightOption; } /** * If the weight option is set to unit weight, do not start * compensating unless the weight is this much larger than unity. */ double unitTolerance() const { return theUnitTolerance; } /** * Access the list of readers. */ const ReaderVector & readers() const { return theReaders; } /** * The selector to choose readers according to their overestimated * cross section. */ const ReaderSelector & selector() const { return theSelector; } /** * The currently selected reader object. */ tLesHouchesReaderPtr currentReader() const { return theCurrentReader; } /** * Set the currently selected reader object. */ void currentReader(tLesHouchesReaderPtr x) { theCurrentReader = x; } //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); /** * Finalize this object. Called in the run phase just after a * run has ended. Used eg. to write out statistics. */ virtual void dofinish(); //@} protected: /** * Access the list of readers. */ ReaderVector & readers() { return theReaders; } /** * The selector to choose readers according to their overestimated * cross section. */ ReaderSelector & selector() { return theSelector; } /** * Helper function for the interface; */ void setUnitTolerance(double); /** * Collect statistics for this event handler. */ XSecStat stats; /** * Collect statistics for this event handler. To be used for * histogram scaling. */ XSecStat histStats; private: /** * The list of readers. */ ReaderVector theReaders; /** * The selector to choose readers according to their overestimated * cross section. */ ReaderSelector theSelector; /** * The way weights are to be treated. */ WeightOpt theWeightOption; /** * If the weight option is set to unit weight, do not start * compensating unless the weight is this much larger than unity. */ double theUnitTolerance; /** * The currently selected reader object. */ tLesHouchesReaderPtr theCurrentReader; /** * Warn if the same process number is used in more than one * LesHouchesReader. */ bool warnPNum; public: /** @cond EXCEPTIONCLASSES */ /** * Exception class used if no readers were assigned. */ class LesHouchesInitError: public InitException {}; /** * Exception class used if the same process number is used by more * than ne reader. */ class LesHouchesPNumException: public InitException {}; /** @endcond */ private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initLesHouchesEventHandler; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ LesHouchesEventHandler & operator=(const LesHouchesEventHandler &); }; } // CLASSDOC OFF #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of LesHouchesEventHandler. */ template <> struct BaseClassTrait { /** Typedef of the first base class of LesHouchesEventHandler. */ typedef EventHandler NthBase; }; /** This template specialization informs ThePEG about the name of * the LesHouchesEventHandler class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::LesHouchesEventHandler"; } /** Return the name of the shared library be loaded to get access to * the LesHouchesEventHandler class and every other class it uses * (except the base class). */ static string library() { return "LesHouches.so"; } }; /** @endcond */ } #endif /* THEPEG_LesHouchesEventHandler_H */ thepeg-1.8.0.orig/LesHouches/MadGraphOneCut.cc0000644000175000017500000001202011747772425017314 0ustar sunsun// -*- C++ -*- // // MadGraphOneCut.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MadGraphOneCut class. // #include "MadGraphOneCut.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr MadGraphOneCut::clone() const { return new_ptr(*this); } IBPtr MadGraphOneCut::fullclone() const { return new_ptr(*this); } Energy MadGraphOneCut::minKT(tcPDPtr p) const { if ( cutType != PT || !checkType(p) ) return ZERO; return theCut*GeV; } double MadGraphOneCut::minEta(tcPDPtr p) const { if ( cutType != ETA || !checkType(p) ) return -Constants::MaxRapidity; return -theCut; } double MadGraphOneCut::maxEta(tcPDPtr p) const { if ( cutType != ETA || !checkType(p) ) return Constants::MaxRapidity; return theCut; } Energy MadGraphOneCut::minMaxKT(tcPDPtr p) const { if ( cutType != XPT || !checkType(p) ) return ZERO; return theCut*GeV; } bool MadGraphOneCut::passCuts(tcCutsPtr parent, tcPDPtr ptype, LorentzMomentum p) const { if ( !checkType(ptype) ) return true; if ( cutType == PT ) return p.perp() > theCut*GeV; if ( cutType == ETA ) { double y = p.rapidity() + parent->Y() + parent->currentYHat(); return abs(p.mt()*sinh(y)) < p.perp()*sinh(theCut); } return true; } bool MadGraphOneCut::checkType(tcPDPtr p) const { switch ( abs(p->id()) ) { case ParticleID::d: case ParticleID::u: case ParticleID::s: case ParticleID::c: case ParticleID::g: return particleType == JET; case ParticleID::b: return particleType == JET || particleType == BOT; case ParticleID::gamma: return particleType == PHO; case ParticleID::eminus: case ParticleID::nu_e: case ParticleID::muminus: case ParticleID::nu_mu: case ParticleID::tauminus: case ParticleID::nu_tau: return particleType == LEP; default: return false; } } void MadGraphOneCut::persistentOutput(PersistentOStream & os) const { os << oenum(cutType) << oenum(particleType) << theCut; } void MadGraphOneCut::persistentInput(PersistentIStream & is, int) { is >> ienum(cutType) >> ienum(particleType) >> theCut; } ClassDescription MadGraphOneCut::initMadGraphOneCut; // Definition of the static class description member. void MadGraphOneCut::Init() { static ClassDocumentation documentation ("Objects of the MadGraphOneCut class can be created automatically by " "the MadGraphReader class when scanning event files for information " "about cuts. It is also possible to create objects by hand and use " "it as any other OneCutBase object."); static Switch interfaceCutType ("CutType", "The type of cut this object will do.", &MadGraphOneCut::cutType, PT, true, false); static SwitchOption interfaceCutTypePT (interfaceCutType, "MinPT", "The minimum transverse momentum of a particle.", PT); static SwitchOption interfaceCutTypeMaxEta (interfaceCutType, "MaxEta", "The maximum (absolute value of) pseudo-rapidity of a particle.", ETA); static SwitchOption interfaceCutTypeMinMaxPT (interfaceCutType, "MinMaxPT", "The minimum transverse momentum of the particle with largest " "transverse momentum.", XPT); static Switch interfaceParticleType ("ParticleType", "The types of particles this cut is applied to.", &MadGraphOneCut::particleType, JET, true, false); static SwitchOption interfaceParticleTypeJets (interfaceParticleType, "Jets", "The cut applies only to coloured particles (jets).", JET); static SwitchOption interfaceParticleTypeLeptons (interfaceParticleType, "Leptons", "The cut applies only to leptons.", LEP); static SwitchOption interfaceParticleTypePhotons (interfaceParticleType, "Photons", "The cut applies only to photons.", PHO); static SwitchOption interfaceParticleTypeBottom (interfaceParticleType, "Bottom", "The cut applies only to bottom quarks.", BOT); static Parameter interfaceCut ("Cut", "The value of the cut to be applied (in units of GeV in case of a " "transverse momentum).", &MadGraphOneCut::theCut, 0.0, 0.0, 0, true, false, Interface::lowerlim); interfaceCut.rank(10); interfaceCutType.rank(9); interfaceParticleType.rank(8); interfaceCut.setHasDefault(false); interfaceCutType.setHasDefault(false); interfaceParticleType.setHasDefault(false); } thepeg-1.8.0.orig/LesHouches/LesHouchesReader.cc0000644000175000017500000015431411754436343017707 0ustar sunsun// -*- C++ -*- // // LesHouchesReader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LesHouchesReader class. // #include "LesHouchesReader.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Command.h" #include "config.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/PDF/PartonExtractor.h" #include "ThePEG/PDF/NoPDF.h" #include "ThePEG/Cuts/Cuts.h" #include "ThePEG/EventRecord/TmpTransform.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Handlers/XComb.h" #include "ThePEG/Handlers/CascadeHandler.h" #include "LesHouchesEventHandler.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Debug.h" #include "ThePEG/Helicity/WaveFunction/SpinorWaveFunction.h" using namespace ThePEG; LesHouchesReader::LesHouchesReader(bool active) : theNEvents(0), position(0), reopened(0), theMaxScan(-1), scanning(false), isActive(active), theCacheFileName(""), doCutEarly(true), preweight(1.0), reweightPDF(false), doInitPDFs(false), theMaxMultCKKW(0), theMinMultCKKW(0), lastweight(1.0), maxFactor(1.0), weightScale(1.0*picobarn), skipping(false), theMomentumTreatment(0), useWeightWarnings(true),theReOpenAllowed(true), theIncludeSpin(true) {} LesHouchesReader::LesHouchesReader(const LesHouchesReader & x) : HandlerBase(x), LastXCombInfo<>(x), heprup(x.heprup), hepeup(x.hepeup), inData(x.inData), inPDF(x.inPDF), outPDF(x.outPDF), thePartonExtractor(x.thePartonExtractor), thePartonBins(x.thePartonBins), theXCombs(x.theXCombs), theCuts(x.theCuts), theNEvents(x.theNEvents), position(x.position), reopened(x.reopened), theMaxScan(x.theMaxScan), scanning(false), isActive(x.isActive), theCacheFileName(x.theCacheFileName), doCutEarly(x.doCutEarly), stats(x.stats), statmap(x.statmap), thePartonBinInstances(x.thePartonBinInstances), reweights(x.reweights), preweights(x.preweights), preweight(x.preweight), reweightPDF(x.reweightPDF), doInitPDFs(x.doInitPDFs), theMaxMultCKKW(x.theMaxMultCKKW), theMinMultCKKW(x.theMinMultCKKW), lastweight(x.lastweight), maxFactor(x.maxFactor), weightScale(x.weightScale), xSecWeights(x.xSecWeights), maxWeights(x.maxWeights), skipping(x.skipping), theMomentumTreatment(x.theMomentumTreatment), useWeightWarnings(x.useWeightWarnings), theReOpenAllowed(x.theReOpenAllowed), theIncludeSpin(x.theIncludeSpin) {} LesHouchesReader::~LesHouchesReader() {} void LesHouchesReader::doinitrun() { HandlerBase::doinitrun(); stats.reset(); for ( StatMap::iterator i = statmap.begin(); i != statmap.end(); ++i ) i->second.reset(); open(); if ( cacheFileName().length() ) openReadCacheFile(); position = 0; reopened = 0; } bool LesHouchesReader::preInitialize() const { if ( HandlerBase::preInitialize() ) return true; if ( doInitPDFs && ! ( inPDF.first && inPDF.second ) ) return true; return false; } void LesHouchesReader::doinit() { HandlerBase::doinit(); open(); close(); if ( !heprup.IDBMUP.first || !heprup.IDBMUP.second ) Throw() << "No information about incoming particles were found in " << "LesHouchesReader '" << name() << "'." << Exception::warning; inData = make_pair(getParticleData(heprup.IDBMUP.first), getParticleData(heprup.IDBMUP.second)); if ( heprup.EBMUP.first <= 0.0 || heprup.EBMUP.second <= 0.0 ) Throw() << "No information about the energy of incoming particles were found in " << "LesHouchesReader '" << name() << "'." << Exception::warning; if ( doInitPDFs && ! ( inPDF.first && inPDF.second ) ) { initPDFs(); if ( ! ( inPDF.first && inPDF.second ) ) Throw() << "LesHouchesReader '" << name() << "' could not create PDFBase objects in pre-initialization." << Exception::warning; } else if ( !inPDF.first || !inPDF.second ) Throw() << "No information about the PDFs of incoming particles were found in " << "LesHouchesReader '" << name() << "'." << Exception::warning; } void LesHouchesReader::initPDFs() { if ( inPDF.first && inPDF.second ) return; string remhname; if ( heprup.PDFSUP.first && !inPDF.first) { inPDF.first = dynamic_ptr_cast (generator()->preinitCreate("ThePEG::LHAPDF", fullName() + "/PDFA", "ThePEGLHAPDF.so")); if ( !inPDF.first ) { Throw() << "LesHouchesReader '" << name() << "' could not use information " << "about the PDFs used because the LHAPDF library was not properly " "defined." << Exception::warning; return; } remhname = fullName() + "/DummyRemH"; generator()->preinitCreate("ThePEG::NoRemnants", remhname); generator()->preinitInterface(inPDF.first, "RemnantHandler", "set", remhname); if ( heprup.PDFGUP.first > 0 && heprup.PDFGUP.first < 10 ) { ostringstream os; os << heprup.PDFGUP.first << " " << heprup.PDFSUP.first; generator()->preinitInterface(inPDF.first, "PDFLIBNumbers", "set", os.str()); } else { ostringstream os; os << heprup.PDFGUP.first*1000 + heprup.PDFSUP.first; generator()->preinitInterface(inPDF.first, "PDFNumber", "set", os.str()); } generator()->preinitInterface(inPDF.first, "RangeException", "newdef", "Freeze"); } if ( heprup.PDFSUP.second && !inPDF.second) { inPDF.second = dynamic_ptr_cast (generator()->preinitCreate("ThePEG::LHAPDF", fullName() + "/PDFB", "ThePEGLHAPDF.so")); if ( !inPDF.second ) { Throw() << "LesHouchesReader '" << name() << "' could not use information " << "about the PDFs used because the LHAPDF library was not properly " "defined." << Exception::warning; return; } if ( remhname == "" ) { remhname = fullName() + "/DummyRemH"; generator()->preinitCreate("ThePEG::NoRemnants", remhname); } generator()->preinitInterface(inPDF.second, "RemnantHandler", "set", remhname); if ( heprup.PDFGUP.second > 0 && heprup.PDFGUP.second < 10 ) { ostringstream os; os << heprup.PDFGUP.second << " " << heprup.PDFSUP.second; generator()->preinitInterface(inPDF.second, "PDFLIBNumbers", "set", os.str()); } else { ostringstream os; os << heprup.PDFGUP.second*1000 + heprup.PDFSUP.second; generator()->preinitInterface(inPDF.second, "PDFNumber", "set", os.str()); } generator()->preinitInterface(inPDF.second, "RangeException", "newdef", "Freeze"); } if ( ! ( inPDF.first && inPDF.second ) ) Throw() << "LesHouchesReader '" << name() << "' could not find information about the PDFs used." << Exception::warning; } void LesHouchesReader::initialize(LesHouchesEventHandler & eh) { Energy2 Smax = ZERO; double Y = 0.0; if ( !theCuts ) { theCuts = eh.cuts(); if ( !theCuts ) Throw() << "No Cuts object was assigned to the LesHouchesReader '" << name() << "' nor was one\nassigned to the controlling " << "LesHouchesEventHandler '" << eh.name() << "'.\nAt least one of them " << "needs to have a Cuts object." << Exception::runerror; Smax = cuts().SMax(); Y = cuts().Y(); } theCKKW = eh.CKKWHandler(); if ( !partonExtractor() ) { thePartonExtractor = eh.partonExtractor(); if ( !partonExtractor() ) Throw() << "No PartonExtractor object was assigned to the LesHouchesReader '" << name() << "' nor was one\nassigned to the controlling " << "LesHouchesEventHandler '" << eh.name() << "'.\nAt least one of them " << "needs to have a PartonExtractor object." << Exception::runerror; } open(); Energy emax = 2.0*sqrt(heprup.EBMUP.first*heprup.EBMUP.second)*GeV; theCuts->initialize(sqr(emax), 0.5*log(heprup.EBMUP.first/heprup.EBMUP.second)); if ( Smax > ZERO && ( Smax != cuts().SMax() || Y != cuts().Y() ) ) Throw() << "The LesHouchesReader '" << name() << "' uses the same Cuts object " << "as another LesHouchesReader which has not got the same energies of " << "the colliding particles. For the generation to work properly " << "different LesHouchesReader object with different colliding particles " << "must be assigned different (although possibly identical) Cuts " << "objects." << Exception::warning; thePartonBins = partonExtractor()->getPartons(emax, inData, cuts()); for ( int i = 0, N = partonBins().size(); i < N; ++i ) { theXCombs[partonBins()[i]] = new_ptr(XComb(emax, inData, &eh, partonExtractor(), CKKWHandler(), partonBins()[i], theCuts)); partonExtractor()->nDims(partonBins()[i]); } outPDF = make_pair(partonExtractor()->getPDF(inData.first), partonExtractor()->getPDF(inData.second)); close(); if ( !heprup.IDWTUP && useWeightWarnings ) Throw() << "No information about the weighting scheme was found. The events " << "produced by LesHouchesReader " << name() << " may not be sampled correctly." << Exception::warning; if ( abs(heprup.IDWTUP) > 1 && useWeightWarnings ) Throw() << "LesHouchesReader " << name() << " has the IDWTUP flag set to " << heprup.IDWTUP << " which is not supported by this reader, the " << "produced events may not be sampled correctly. It is up to " << "sub-classes of LesHouchesReader to correctly convert to match IDWTUP " << "+/- 1. Will try to make intelligent guesses to get " << "correct statistics.\nIn most cases this should be sufficient. " << "Unset WeightWarnings to avoid this message" << Exception::warning; if ( heprup.IDWTUP != eh.weightOption() && abs(heprup.IDWTUP) < 3 && useWeightWarnings ) Throw() << "LesHouchesReader " << name() << " has the IDWTUP flag set to " << heprup.IDWTUP << ", which does not correspond\nto the weight option " << eh.weightOption() << " set in " << "the LesHouchesEventHandler " << eh.name() << ".\n\n" << "Use the following handler setting instead:\n" << " set " << eh.name() << ":WeightOption " << heprup.IDWTUP << "\nWill try to make intelligent guesses to get " << "correct statistics. In most cases this should be sufficient. " << "Unset WeightWarnings to avoid this message" << Exception::warning; scan(); initStat(); } long LesHouchesReader::scan() { open(); // Shall we write the events to a cache file for fast reading? If so // we write to a temporary file if the caches events should be // randomized. if ( cacheFileName().length() ) openWriteCacheFile(); // Keep track of the number of events scanned. long neve = 0; long cuteve = 0; bool negw = false; // If the open() has not already gotten information about subprocesses // and cross sections we have to scan through the events. if ( !heprup.NPRUP || cacheFile() || abs(heprup.IDWTUP) != 1 ) { // why scan if IDWTUP != 1? HoldFlag<> isScanning(scanning); double oldsum = 0.0; vector lprup; vector newmax; vector oldeve; vector neweve; for ( int i = 0; ( maxScan() < 0 || i < maxScan() ) && readEvent(); ++i ) { if ( !checkPartonBin() ) Throw() << "Found event in LesHouchesReader '" << name() << "' which cannot be handeled by the assigned PartonExtractor '" << partonExtractor()->name() << "'." << Exception::runerror; vector::iterator idit = find(lprup.begin(), lprup.end(), hepeup.IDPRUP); int id = lprup.size(); if ( idit == lprup.end() ) { lprup.push_back(hepeup.IDPRUP); newmax.push_back(0.0); neweve.push_back(0); oldeve.push_back(0); } else { id = idit - lprup.begin(); } ++neve; ++oldeve[id]; oldsum += hepeup.XWGTUP; if ( cacheFile() ) { if ( eventWeight() == 0.0 ) { ++cuteve; continue; } cacheEvent(); } ++neweve[id]; newmax[id] = max(newmax[id], abs(eventWeight())); if ( eventWeight() < 0.0 ) negw = true; } xSecWeights.resize(oldeve.size(), 1.0); for ( int i = 0, N = oldeve.size(); i < N; ++i ) if ( oldeve[i] ) xSecWeights[i] = double(neweve[i])/double(oldeve[i]); if ( maxScan() < 0 || neve > NEvents() ) NEvents(neve - cuteve); if ( lprup.size() == heprup.LPRUP.size() ) { for ( int id = 0, N = lprup.size(); id < N; ++id ) { vector::iterator idit = find(heprup.LPRUP.begin(), heprup.LPRUP.end(), hepeup.IDPRUP); if ( idit == heprup.LPRUP.end() ) { Throw() << "When scanning events, the LesHouschesReader '" << name() << "' found undeclared processes." << Exception::warning; heprup.NPRUP = 0; break; } int idh = idit - heprup.LPRUP.begin(); heprup.XMAXUP[idh] = newmax[id]; } } if ( heprup.NPRUP == 0 ) { // No heprup block was supplied or something went wrong. heprup.NPRUP = lprup.size(); heprup.LPRUP.resize(lprup.size()); heprup.XMAXUP.resize(lprup.size()); for ( int id = 0, N = lprup.size(); id < N; ++id ) { heprup.LPRUP[id] = lprup[id]; heprup.XMAXUP[id] = newmax[id]; } } else if ( abs(heprup.IDWTUP) != 1 ) { // Try to fix things if abs(heprup.IDWTUP) != 1. double sumxsec = 0.0; for ( int id = 0; id < heprup.NPRUP; ++id ) sumxsec += heprup.XSECUP[id]; weightScale = picobarn*neve*sumxsec/oldsum; } } if ( cacheFile() ) closeCacheFile(); if ( negw ) heprup.IDWTUP = min(-abs(heprup.IDWTUP), -1); return neve; } void LesHouchesReader::setWeightScale(long) {} void LesHouchesReader::initStat() { stats.reset(); statmap.clear(); if ( heprup.NPRUP <= 0 ) return; double sumx = 0.0; xSecWeights.resize(heprup.NPRUP, 1.0); maxWeights.clear(); for ( int ip = 0; ip < heprup.NPRUP; ++ip ) { sumx = max(heprup.XMAXUP[ip]*xSecWeights[ip], sumx); statmap[heprup.LPRUP[ip]] = XSecStat(heprup.XMAXUP[ip]*weightScale*xSecWeights[ip]); maxWeights[heprup.LPRUP[ip]] = heprup.XMAXUP[ip]; } stats.maxXSec(sumx*weightScale); maxFactor = 1.0; } void LesHouchesReader::increaseMaxXSec(CrossSection maxxsec) { for ( int i = 0; i < heprup.NPRUP; ++i ) statmap[heprup.LPRUP[i]].maxXSec(statmap[heprup.LPRUP[i]].maxXSec()* maxxsec/stats.maxXSec()); maxFactor *= maxxsec/stats.maxXSec(); stats.maxXSec(maxxsec); } tXCombPtr LesHouchesReader::getXComb() { if ( lastXCombPtr() ) return lastXCombPtr(); fillEvent(); connectMothers(); tcPBPair sel = createPartonBinInstances(); tXCombPtr lastXC = xCombs()[sel]; // clean up the old XComb object before switching to a new one if ( theLastXComb && theLastXComb != lastXC ) theLastXComb->clean(); theLastXComb = lastXC; lastXCombPtr()->subProcess(SubProPtr()); lastXCombPtr()->setPartonBinInstances(partonBinInstances(), sqr(hepeup.SCALUP)*GeV2); lastXCombPtr()->lastAlphaS(hepeup.AQCDUP); lastXCombPtr()->lastAlphaEM(hepeup.AQEDUP); return lastXCombPtr(); } tSubProPtr LesHouchesReader::getSubProcess() { getXComb(); if ( subProcess() ) return subProcess(); lastXCombPtr()->subProcess(new_ptr(SubProcess(lastPartons(), tCollPtr(), this))); subProcess()->setOutgoing(outgoing().begin(), outgoing().end()); subProcess()->setIntermediates(intermediates().begin(), intermediates().end()); return subProcess(); } void LesHouchesReader::fillEvent() { if ( !particleIndex.empty() ) return; particleIndex.clear(); colourIndex.clear(); colourIndex(0, tColinePtr()); createParticles(); createBeams(); } void LesHouchesReader::reopen() { // If we didn't know how many events there were, we know now. if ( NEvents() <= 0 ) NEvents(position); ++reopened; // How large fraction of the events have we actually used? And how // large will we have used if we go through the file again? double frac = double(stats.attempts())/double(NEvents()); if ( frac*double(reopened + 1)/double(reopened) > 1.0 && NEvents() - stats.attempts() < generator()->N() - generator()->currentEventNumber() ) { if(theReOpenAllowed) generator()->logWarning(LesHouchesReopenWarning() << "Reopening LesHouchesReader '" << name() << "' after accessing " << stats.attempts() << " events out of " << NEvents() << Exception::warning); else throw LesHouchesReopenWarning() << "More events requested than available in LesHouchesReader " << name() << Exception::runerror; } if ( cacheFile() ) { closeCacheFile(); openReadCacheFile(); if ( !uncacheEvent() ) Throw() << "Could not reopen LesHouchesReader '" << name() << "'." << Exception::runerror; } else { close(); open(); if ( !readEvent() ) Throw() << "Could not reopen LesHouchesReader '" << name() << "'." << Exception::runerror; } } void LesHouchesReader::reset() { particleIndex.clear(); colourIndex.clear(); if ( theLastXComb ) theLastXComb->clean(); theLastXComb = tXCombPtr(); } bool LesHouchesReader::readEvent() { reset(); if ( !doReadEvent() ) return false; // If we are just skipping event we do not need to reweight or do // anything fancy. if ( skipping ) return true; if ( cacheFile() && !scanning ) return true; // Reweight according to the re- and pre-weights objects in the // LesHouchesReader base class. lastweight = reweight(); if ( !reweightPDF && !cutEarly() ) return true; // We should try to reweight the PDFs or make early cuts here. fillEvent(); double x1 = incoming().first->momentum().plus()/ beams().first->momentum().plus(); if ( reweightPDF && inPDF.first && outPDF.first && inPDF.first != outPDF.first ) { if ( hepeup.XPDWUP.first <= 0.0 ) hepeup.XPDWUP.first = inPDF.first->xfx(inData.first, incoming().first->dataPtr(), sqr(hepeup.SCALUP*GeV), x1); double xf = outPDF.first->xfx(inData.first, incoming().first->dataPtr(), sqr(hepeup.SCALUP*GeV), x1); lastweight *= xf/hepeup.XPDWUP.first; hepeup.XPDWUP.first = xf; } double x2 = incoming().second->momentum().minus()/ beams().second->momentum().minus(); if ( reweightPDF && inPDF.second && outPDF.second && inPDF.second != outPDF.second ) { if ( hepeup.XPDWUP.second <= 0.0 ) hepeup.XPDWUP.second = inPDF.second->xfx(inData.second, incoming().second->dataPtr(), sqr(hepeup.SCALUP*GeV), x2); double xf = outPDF.second->xfx(inData.second, incoming().second->dataPtr(), sqr(hepeup.SCALUP*GeV), x2); lastweight *= xf/hepeup.XPDWUP.second; hepeup.XPDWUP.second = xf; } if ( cutEarly() ) { if ( !cuts().initSubProcess((incoming().first->momentum() + incoming().second->momentum()).m2(), 0.5*log(x1/x2)) ) lastweight = 0.0; tSubProPtr sub = getSubProcess(); TmpTransform tmp(sub, Utilities::getBoostToCM(sub->incoming())); if ( !cuts().passCuts(*sub) ) lastweight = 0.0; } return true; } double LesHouchesReader::getEvent() { if ( cacheFile() ) { if ( !uncacheEvent() ) reopen(); } else { if ( !readEvent() ) reopen(); } ++position; double max = maxWeights[hepeup.IDPRUP]*maxFactor; return max != 0.0? eventWeight()/max: 0.0; } void LesHouchesReader::skip(long n) { HoldFlag<> skipflag(skipping); while ( n-- ) getEvent(); } double LesHouchesReader::reweight() { preweight = 1.0; if ( reweights.empty() && preweights.empty() && !( CKKWHandler() && maxMultCKKW() > 0 && maxMultCKKW() > minMultCKKW() ) ) return 1.0; fillEvent(); getSubProcess(); for ( int i = 0, N = preweights.size(); i < N; ++i ) { preweights[i]->setXComb(lastXCombPtr()); preweight *= preweights[i]->weight(); } double weight = preweight; for ( int i = 0, N = reweights.size(); i < N; ++i ) { reweights[i]->setXComb(lastXCombPtr()); weight *= reweights[i]->weight(); } // If we are caching events we do not want to do CKKW reweighting. if ( cacheFile() ) return weight; if ( CKKWHandler() && maxMultCKKW() > 0 && maxMultCKKW() > minMultCKKW() ) { CKKWHandler()->setXComb(lastXCombPtr()); weight *= CKKWHandler()->reweightCKKW(minMultCKKW(), maxMultCKKW()); } return weight; } bool LesHouchesReader::checkPartonBin() { // First find the positions of the incoming partons. pair< vector, vector > inc; for ( int i = 0; i < hepeup.NUP; ++i ) { if ( hepeup.ISTUP[i] == -9 ) { if ( inc.first.empty() ) inc.first.push_back(i); else if ( inc.second.empty() ) inc.second.push_back(i); } else if ( hepeup.ISTUP[i] == -1 ) { if ( inc.first.size() && hepeup.MOTHUP[i].first == inc.first.back() + 1 ) inc.first.push_back(i); else if ( inc.second.size() && hepeup.MOTHUP[i].first == inc.second.back() + 1 ) inc.second.push_back(i); else if ( inc.first.empty() ) { inc.first.push_back(-1); inc.first.push_back(i); } else if ( inc.second.empty() ) { inc.second.push_back(-1); inc.second.push_back(i); } else if ( inc.first.size() <= inc.second.size() ) inc.first.push_back(i); else inc.second.push_back(i); } } // Now store the corresponding id numbers pair< vector, vector > ids; ids.first.push_back(inc.first[0] < 0? heprup.IDBMUP.first: hepeup.IDUP[inc.first[0]]); for ( int i = 1, N = inc.first.size(); i < N; ++i ) ids.first.push_back(hepeup.IDUP[inc.first[i]]); ids.second.push_back(inc.second[0] < 0? heprup.IDBMUP.second: hepeup.IDUP[inc.second[0]]); for ( int i = 1, N = inc.second.size(); i < N; ++i ) ids.second.push_back(hepeup.IDUP[inc.second[i]]); // Find the correct pair of parton bins. PBPair pbp; for ( int i = 0, N = partonBins().size(); i < N; ++i ) { tcPBPtr curr = partonBins()[i].first; int icurr = inc.first.size() - 1; while ( curr && icurr >= 0 ) { if ( curr->parton()->id () != ids.first[icurr] ) break; curr = curr->incoming(); --icurr; } if(!(!partonBins()[i].first->incoming() && !partonBins()[i].first->particle() && partonBins()[i].first->parton()->id () == ids.first[0] && ( inc.first.size()==1 || (inc.first.size()==2 && ids.first[0]==ids.first[1]))) && ( curr || icurr >= 0 ) ) continue; curr = partonBins()[i].second; icurr = inc.second.size() - 1; while ( curr && icurr >= 0 ) { if ( curr->parton()->id () != ids.second[icurr] ) break; curr = curr->incoming(); --icurr; } if(!(!partonBins()[i].second->incoming() && !partonBins()[i].second->particle() && partonBins()[i].second->parton()->id () == ids.second[0] && ( inc.second.size()==1 || (inc.second.size()==2 && ids.second[0]==ids.second[1]))) && ( curr || icurr >= 0 ) ) continue; pbp = partonBins()[i]; } // If we are only checking we return here. return ( pbp.first && pbp.second ); } namespace { bool recursionNotNull(tcPBPtr bin, tcPPtr p) { while ( bin && p ) { if ( p->dataPtr() != bin->parton() ) break; bin = bin->incoming(); p = p->parents().size()? p->parents()[0]: tPPtr(); } return bin || p; } } tcPBPair LesHouchesReader::createPartonBinInstances() { tcPBPair sel; for ( int i = 0, N = partonBins().size(); i < N; ++i ) { tcPBPtr bin = partonBins()[i].first; tcPPtr p = incoming().first; if ( recursionNotNull(bin,p) ) continue; bin = partonBins()[i].second; p = incoming().second; if ( recursionNotNull(bin,p) ) continue; sel = partonBins()[i]; break; } if ( !sel.first || !sel.second ) Throw() << "Could not find appropriate PartonBin objects for event produced by " << "LesHouchesReader '" << name() << "'." << Exception::runerror; Direction<0> dir(true); thePartonBinInstances.first = new_ptr(PartonBinInstance(incoming().first, sel.first, -sqr(hepeup.SCALUP*GeV))); if ( thePartonBinInstances.first->xi() > 1.00001 ) { Throw() << "Found an event with momentum fraction larger than unity (x1=" << thePartonBinInstances.first->xi() << "). The event will be skipped." << Exception::warning; throw Veto(); } dir.reverse(); thePartonBinInstances.second = new_ptr(PartonBinInstance(incoming().second, sel.second, -sqr(hepeup.SCALUP*GeV))); if ( thePartonBinInstances.second->xi() > 1.00001 ) { Throw() << "Found an event with momentum fraction larger than unity (x2=" << thePartonBinInstances.second->xi() << "). The event will be skipped." << Exception::warning; throw Veto(); } return sel; } void LesHouchesReader::createParticles() { theBeams = PPair(); theIncoming = PPair(); theOutgoing = PVector(); theIntermediates = PVector(); for ( int i = 0, N = hepeup.IDUP.size(); i < N; ++i ) { if ( !hepeup.IDUP[i] ) continue; Lorentz5Momentum mom(hepeup.PUP[i][0]*GeV, hepeup.PUP[i][1]*GeV, hepeup.PUP[i][2]*GeV, hepeup.PUP[i][3]*GeV, hepeup.PUP[i][4]*GeV); if(theMomentumTreatment == 1) mom.rescaleEnergy(); else if(theMomentumTreatment == 2) mom.rescaleMass(); PDPtr pd = getParticleData(hepeup.IDUP[i]); if (!pd) { Throw() << "LesHouchesReader '" << name() << "' found unknown particle ID " << hepeup.IDUP[i] << " in Les Houches common block structure.\n" << "You need to define the new particle in an input file.\n" << Exception::runerror; } PPtr p = pd->produceParticle(mom); if(hepeup.ICOLUP[i].first>=0 && hepeup.ICOLUP[i].second >=0) { tColinePtr c = colourIndex(hepeup.ICOLUP[i].first); if ( c ) c->addColoured(p); c = colourIndex(hepeup.ICOLUP[i].second); if ( c ) c->addAntiColoured(p); } else { tColinePtr c1 = colourIndex(abs(hepeup.ICOLUP[i].first )); tColinePtr c2 = colourIndex(abs(hepeup.ICOLUP[i].second)); if(pd->hasColour()) { c1->addColouredIndexed(p,1); c2->addColouredIndexed(p,2); } else { c1->addAntiColouredIndexed(p,1); c2->addAntiColouredIndexed(p,2); } } particleIndex(i + 1, p); switch ( hepeup.ISTUP[i] ) { case -9: if ( !theBeams.first ) theBeams.first = p; else if ( !theBeams.second ) theBeams.second = p; else Throw() << "To many incoming beam particles in the LesHouchesReader '" << name() << "'." << Exception::runerror; break; case -1: if ( !theIncoming.first ) theIncoming.first = p; else if ( !theIncoming.second ) theIncoming.second = p; else if ( particleIndex(theIncoming.first) == hepeup.MOTHUP[i].first ) theIncoming.first = p; else if ( particleIndex(theIncoming.second) == hepeup.MOTHUP[i].first ) theIncoming.second = p; else Throw() << "To many incoming particles to hard subprocess in the " << "LesHouchesReader '" << name() << "'." << Exception::runerror; p->scale(sqr(hepeup.SCALUP*GeV)); break; case 1: theOutgoing.push_back(p); p->scale(sqr(hepeup.SCALUP*GeV)); break; case -2: case 2: case 3: theIntermediates.push_back(p); break; default: Throw() << "Unknown status code (" << hepeup.ISTUP[i] << ") in the LesHouchesReader '" << name() << "'." << Exception::runerror; } if( theIncludeSpin && abs(pd->id()) == ParticleID::tauminus && hepeup.SPINUP[i] !=0) { if(pd->iSpin() == PDT::Spin1Half ) { vector wave; Helicity::SpinorWaveFunction(wave,p,Helicity::outgoing,true); RhoDMatrix rho(pd->iSpin(),true); rho(0,0) = 0.5*(1.-hepeup.SPINUP[i]); rho(1,1) = 0.5*(1.+hepeup.SPINUP[i]); p->spinInfo()->rhoMatrix() = rho; p->spinInfo()-> DMatrix() = rho; } } } // check the colour flows, and if necessary create any sources/sinks // hard process // get the particles in the hard process PVector external; for ( int i = 0, N = hepeup.IDUP.size(); i < N; ++i ) { unsigned int moth; switch ( hepeup.ISTUP[i] ) { case -1: external.push_back(particleIndex.find(i+1)); break; case 1: case 2: case 3: moth = hepeup.MOTHUP[i].first; if(moth!=0 && (hepeup.ISTUP[moth]==-1||hepeup.ISTUP[moth]==-2|| hepeup.ISTUP[moth]==-9)) external.push_back(particleIndex.find(i+1)); moth = hepeup.MOTHUP[i].second; if(moth!=0 && (hepeup.ISTUP[moth]==-1||hepeup.ISTUP[moth]==-2|| hepeup.ISTUP[moth]==-9)) external.push_back(particleIndex.find(i+1)); break; case -2: case -9: default: break; } } // check the incoming/outgoing lines match vector unMatchedColour,unMatchedAntiColour; for(unsigned int ix=0;ix col = external[ix]->colourInfo()-> colourLines(); vector anti = external[ix]->colourInfo()->antiColourLines(); if(hepeup.ISTUP[particleIndex(external[ix])-1]<0) swap(col,anti); if(!col.empty()) { for(unsigned int ic1=0;ic1 col2; if(hepeup.ISTUP[particleIndex(external[iy])-1]<0) { if(external[iy]->colourInfo()->colourLines().empty()) continue; col2 = external[iy]->colourInfo()->colourLines(); } else if(hepeup.ISTUP[particleIndex(external[iy])-1]>0) { if(external[iy]->colourInfo()->antiColourLines().empty()) continue; col2 = external[iy]->colourInfo()->antiColourLines(); } for(unsigned int ic2=0;ic2(col[ic1])); } } if(!anti.empty()) { for(unsigned int ic1=0;ic1 anti2; if(hepeup.ISTUP[particleIndex(external[iy])-1]<0) { if(external[iy]->colourInfo()->colourLines().empty()) continue; anti2 = external[iy]->colourInfo()->antiColourLines(); } else if(hepeup.ISTUP[particleIndex(external[iy])-1]>0) { if(external[iy]->colourInfo()->antiColourLines().empty()) continue; anti2 = external[iy]->colourInfo()->colourLines(); } for(unsigned int ic2=0;ic2(anti[ic1])); } } } // might have source/sink if( unMatchedColour.size() + unMatchedAntiColour.size() != 0) { if(unMatchedColour.size() == 3 ) { unMatchedColour[0]->setSourceNeighbours(unMatchedColour[1], unMatchedColour[2]); } else if(unMatchedColour.size() != 0 && ThePEG_DEBUG_LEVEL) { Throw() << "LesHouchesReader '" << name() << "' found inconsistent colour " << "flow in Les Houches common block structure for hard process.\n" << hepeup << Exception::runerror; } if(unMatchedAntiColour.size() == 3 ) { unMatchedAntiColour[0]->setSinkNeighbours(unMatchedAntiColour[1], unMatchedAntiColour[2]); } else if(unMatchedAntiColour.size() != 0 && ThePEG_DEBUG_LEVEL) { Throw() << "LesHouchesReader '" << name() << "' found inconsistent colour " << "flow in Les Houches common block structure for hard process.\n" << hepeup << Exception::runerror; } } // any subsequent decays for ( int i = 0, N = hepeup.IDUP.size(); i < N; ++i ) { if(hepeup.ISTUP[i] !=2 && hepeup.ISTUP[i] !=3) continue; PVector external; external.push_back(particleIndex.find(i+1)); for ( int j = 0; j < N; ++j ) { if(hepeup.MOTHUP[j].first==i+1|| hepeup.MOTHUP[j].second==i+1) external.push_back(particleIndex.find(j+1)); } // check the incoming/outgoing lines match vector unMatchedColour,unMatchedAntiColour; for(unsigned int ix=0;ix col = external[ix]->colourInfo()-> colourLines(); vector anti = external[ix]->colourInfo()->antiColourLines(); if(ix==0) swap(col,anti); if(!col.empty()) { for(unsigned int ic1=0;ic1 col2; if(iy==0) { if(external[iy]->colourInfo()->colourLines().empty()) continue; col2 = external[iy]->colourInfo()->colourLines(); } else { if(external[iy]->colourInfo()->antiColourLines().empty()) continue; col2 = external[iy]->colourInfo()->antiColourLines(); } for(unsigned int ic2=0;ic2(col[ic1])); } } if(!anti.empty()) { for(unsigned int ic1=0;ic1 anti2; if(iy==0) { if(external[iy]->colourInfo()->colourLines().empty()) continue; anti2 = external[iy]->colourInfo()->antiColourLines(); } else { if(external[iy]->colourInfo()->antiColourLines().empty()) continue; anti2 = external[iy]->colourInfo()->colourLines(); } for(unsigned int ic2=0;ic2(anti[ic1])); } } } // might have source/sink if( unMatchedColour.size() + unMatchedAntiColour.size() != 0) { if(unMatchedColour.size() == 3 ) { unMatchedColour[0]->setSourceNeighbours(unMatchedColour[1], unMatchedColour[2]); } else if(unMatchedColour.size() != 0 && ThePEG_DEBUG_LEVEL) { Throw() << "LesHouchesReader '" << name() << "' found inconsistent colour " << "flow in Les Houches common block structure for decay of \n" << *external[0] << "\n" << hepeup << Exception::runerror; } if(unMatchedAntiColour.size() == 3 ) { unMatchedAntiColour[0]->setSinkNeighbours(unMatchedAntiColour[1], unMatchedAntiColour[2]); } else if(unMatchedAntiColour.size() != 0 && ThePEG_DEBUG_LEVEL) { Throw() << "LesHouchesReader '" << name() << "' found inconsistent colour " << "flow in Les Houches common block structure for decay of\n" << *external[0] << "\n" << hepeup << Exception::runerror; } } } } void LesHouchesReader::createBeams() { if ( !theBeams.first && dynamic_ptr_cast::tcp>(inPDF.first) ) { theBeams.first = theIncoming.first; } else if ( !theBeams.first ) { theBeams.first = getParticleData(heprup.IDBMUP.first)->produceParticle(); double m = theBeams.first->mass()/GeV; theBeams.first->set5Momentum (Lorentz5Momentum(ZERO, ZERO, sqrt(sqr(heprup.EBMUP.first) - sqr(m))*GeV, heprup.EBMUP.first*GeV, m*GeV)); hepeup.IDUP.push_back(heprup.IDBMUP.first); hepeup.ISTUP.push_back(-9); hepeup.MOTHUP.push_back(make_pair(0, 0)); hepeup.ICOLUP.push_back(make_pair(0, 0)); hepeup.VTIMUP.push_back(0.0); hepeup.SPINUP.push_back(0.0); particleIndex(hepeup.IDUP.size(), theBeams.first); hepeup.MOTHUP[particleIndex(theIncoming.first) - 1].first = hepeup.IDUP.size(); } if ( !theBeams.second && dynamic_ptr_cast::tcp>(inPDF.second) ) { theBeams.second = theIncoming.second; } else if ( !theBeams.second ) { theBeams.second = getParticleData(heprup.IDBMUP.second)->produceParticle(); double m = theBeams.second->mass()/GeV; theBeams.second->set5Momentum (Lorentz5Momentum(ZERO, ZERO, -sqrt(sqr(heprup.EBMUP.second) - sqr(m))*GeV, heprup.EBMUP.second*GeV, m*GeV)); hepeup.IDUP.push_back(heprup.IDBMUP.second); hepeup.ISTUP.push_back(-9); hepeup.MOTHUP.push_back(make_pair(0, 0)); hepeup.ICOLUP.push_back(make_pair(0, 0)); hepeup.VTIMUP.push_back(0.0); hepeup.SPINUP.push_back(0.0); particleIndex(hepeup.IDUP.size(), theBeams.second); hepeup.MOTHUP[particleIndex(theIncoming.second) - 1].first = hepeup.IDUP.size(); } } void LesHouchesReader::connectMothers() { const ObjectIndexer & pi = particleIndex; for ( int i = 0, N = hepeup.IDUP.size(); i < N; ++i ) { if ( pi(hepeup.MOTHUP[i].first) ) pi(hepeup.MOTHUP[i].first)->addChild(pi(i + 1)); if ( pi(hepeup.MOTHUP[i].second) && hepeup.MOTHUP[i].second != hepeup.MOTHUP[i].first ) pi(hepeup.MOTHUP[i].second)->addChild(pi(i + 1)); } } void LesHouchesReader::openReadCacheFile() { if ( cacheFile() ) closeCacheFile(); cacheFile().open(cacheFileName(), "r"); position = 0; } void LesHouchesReader::openWriteCacheFile() { if ( cacheFile() ) closeCacheFile(); cacheFile().open(cacheFileName(), "w"); } void LesHouchesReader::closeCacheFile() { cacheFile().close(); } void LesHouchesReader::cacheEvent() const { static vector buff; cacheFile().write(&hepeup.NUP, sizeof(hepeup.NUP)); buff.resize(eventSize(hepeup.NUP)); char * pos = &buff[0]; pos = mwrite(pos, hepeup.IDPRUP); pos = mwrite(pos, hepeup.XWGTUP); pos = mwrite(pos, hepeup.XPDWUP); pos = mwrite(pos, hepeup.SCALUP); pos = mwrite(pos, hepeup.AQEDUP); pos = mwrite(pos, hepeup.AQCDUP); pos = mwrite(pos, hepeup.IDUP[0], hepeup.NUP); pos = mwrite(pos, hepeup.ISTUP[0], hepeup.NUP); pos = mwrite(pos, hepeup.MOTHUP[0], hepeup.NUP); pos = mwrite(pos, hepeup.ICOLUP[0], hepeup.NUP); for ( int i = 0; i < hepeup.NUP; ++i ) pos = mwrite(pos, hepeup.PUP[i][0], 5); pos = mwrite(pos, hepeup.VTIMUP[0], hepeup.NUP); pos = mwrite(pos, hepeup.SPINUP[0], hepeup.NUP); pos = mwrite(pos, lastweight); pos = mwrite(pos, optionalWeights); pos = mwrite(pos, preweight); cacheFile().write(&buff[0], buff.size(), 1); } bool LesHouchesReader::uncacheEvent() { reset(); static vector buff; if ( cacheFile().read(&hepeup.NUP, sizeof(hepeup.NUP)) != 1 ) return false; buff.resize(eventSize(hepeup.NUP)); if ( cacheFile().read(&buff[0], buff.size()) != 1 ) return false; const char * pos = &buff[0]; pos = mread(pos, hepeup.IDPRUP); pos = mread(pos, hepeup.XWGTUP); pos = mread(pos, hepeup.XPDWUP); pos = mread(pos, hepeup.SCALUP); pos = mread(pos, hepeup.AQEDUP); pos = mread(pos, hepeup.AQCDUP); hepeup.IDUP.resize(hepeup.NUP); pos = mread(pos, hepeup.IDUP[0], hepeup.NUP); hepeup.ISTUP.resize(hepeup.NUP); pos = mread(pos, hepeup.ISTUP[0], hepeup.NUP); hepeup.MOTHUP.resize(hepeup.NUP); pos = mread(pos, hepeup.MOTHUP[0], hepeup.NUP); hepeup.ICOLUP.resize(hepeup.NUP); pos = mread(pos, hepeup.ICOLUP[0], hepeup.NUP); hepeup.PUP.resize(hepeup.NUP, vector(5)); for ( int i = 0; i < hepeup.NUP; ++i ) pos = mread(pos, hepeup.PUP[i][0], 5); hepeup.VTIMUP.resize(hepeup.NUP); pos = mread(pos, hepeup.VTIMUP[0], hepeup.NUP); hepeup.SPINUP.resize(hepeup.NUP); pos = mread(pos, hepeup.SPINUP[0], hepeup.NUP); pos = mread(pos, lastweight); pos = mread(pos, optionalWeights); pos = mread(pos, preweight); // If we are skipping, we do not have to do anything else. if ( skipping ) return true; if ( CKKWHandler() && maxMultCKKW() > 0 && maxMultCKKW() > minMultCKKW() ) { // The cached event has not been submitted to CKKW reweighting, so // we do that now. fillEvent(); getSubProcess(); CKKWHandler()->setXComb(lastXCombPtr()); lastweight *= CKKWHandler()->reweightCKKW(minMultCKKW(), maxMultCKKW()); } return true; } void LesHouchesReader::persistentOutput(PersistentOStream & os) const { os << heprup.IDBMUP << heprup.EBMUP << heprup.PDFGUP << heprup.PDFSUP << heprup.IDWTUP << heprup.NPRUP << heprup.XSECUP << heprup.XERRUP << heprup.XMAXUP << heprup.LPRUP << hepeup.NUP << hepeup.IDPRUP << hepeup.XWGTUP << hepeup.XPDWUP << hepeup.SCALUP << hepeup.AQEDUP << hepeup.AQCDUP << hepeup.IDUP << hepeup.ISTUP << hepeup.MOTHUP << hepeup.ICOLUP << hepeup.PUP << hepeup.VTIMUP << hepeup.SPINUP << inData << inPDF << outPDF << thePartonExtractor << theCKKW << thePartonBins << theXCombs << theCuts << theNEvents << position << reopened << theMaxScan << isActive << theCacheFileName << doCutEarly << stats << statmap << thePartonBinInstances << theBeams << theIncoming << theOutgoing << theIntermediates << reweights << preweights << preweight << reweightPDF << doInitPDFs << theLastXComb << theMaxMultCKKW << theMinMultCKKW << lastweight << optionalWeights << maxFactor << ounit(weightScale, picobarn) << xSecWeights << maxWeights << theMomentumTreatment << useWeightWarnings << theReOpenAllowed << theIncludeSpin; } void LesHouchesReader::persistentInput(PersistentIStream & is, int) { if ( cacheFile() ) closeCacheFile(); is >> heprup.IDBMUP >> heprup.EBMUP >> heprup.PDFGUP >> heprup.PDFSUP >> heprup.IDWTUP >> heprup.NPRUP >> heprup.XSECUP >> heprup.XERRUP >> heprup.XMAXUP >> heprup.LPRUP >> hepeup.NUP >> hepeup.IDPRUP >> hepeup.XWGTUP >> hepeup.XPDWUP >> hepeup.SCALUP >> hepeup.AQEDUP >> hepeup.AQCDUP >> hepeup.IDUP >> hepeup.ISTUP >> hepeup.MOTHUP >> hepeup.ICOLUP >> hepeup.PUP >> hepeup.VTIMUP >> hepeup.SPINUP >> inData >> inPDF >> outPDF >> thePartonExtractor >> theCKKW >> thePartonBins >> theXCombs >> theCuts >> theNEvents >> position >> reopened >> theMaxScan >> isActive >> theCacheFileName >> doCutEarly >> stats >> statmap >> thePartonBinInstances >> theBeams >> theIncoming >> theOutgoing >> theIntermediates >> reweights >> preweights >> preweight >> reweightPDF >> doInitPDFs >> theLastXComb >> theMaxMultCKKW >> theMinMultCKKW >> lastweight >> optionalWeights >> maxFactor >> iunit(weightScale, picobarn) >> xSecWeights >> maxWeights >> theMomentumTreatment >> useWeightWarnings >> theReOpenAllowed >> theIncludeSpin; } AbstractClassDescription LesHouchesReader::initLesHouchesReader; // Definition of the static class description member. void LesHouchesReader::setBeamA(long id) { heprup.IDBMUP.first = id; } long LesHouchesReader::getBeamA() const { return heprup.IDBMUP.first; } void LesHouchesReader::setBeamB(long id) { heprup.IDBMUP.second = id; } long LesHouchesReader::getBeamB() const { return heprup.IDBMUP.second; } void LesHouchesReader::setEBeamA(Energy e) { heprup.EBMUP.first = e/GeV; } Energy LesHouchesReader::getEBeamA() const { return heprup.EBMUP.first*GeV; } void LesHouchesReader::setEBeamB(Energy e) { heprup.EBMUP.second = e/GeV; } Energy LesHouchesReader::getEBeamB() const { return heprup.EBMUP.second*GeV; } void LesHouchesReader::setPDFA(PDFPtr pdf) { inPDF.first = pdf; } PDFPtr LesHouchesReader::getPDFA() const { return inPDF.first; } void LesHouchesReader::setPDFB(PDFPtr pdf) { inPDF.second = pdf; } PDFPtr LesHouchesReader::getPDFB() const { return inPDF.second; } void LesHouchesReader::Init() { static ClassDocumentation documentation ("ThePEG::LesHouchesReader is an abstract base class to be used " "for objects which reads event files or streams from matrix element " "generators."); static Parameter interfaceBeamA ("BeamA", "The PDG id of the incoming particle along the positive z-axis. " "If zero the corresponding information is to be deduced from the " "event stream/file.", 0, 0, 0, 0, true, false, false, &LesHouchesReader::setBeamA, &LesHouchesReader::getBeamA, 0, 0, 0); static Parameter interfaceBeamB ("BeamB", "The PDG id of the incoming particle along the negative z-axis. " "If zero the corresponding information is to be deduced from the " "event stream/file.", 0, 0, 0, 0, true, false, false, &LesHouchesReader::setBeamB, &LesHouchesReader::getBeamB, 0, 0, 0); static Parameter interfaceEBeamA ("EBeamA", "The energy of the incoming particle along the positive z-axis. " "If zero the corresponding information is to be deduced from the " "event stream/file.", 0, GeV, ZERO, ZERO, 1000000000.0*GeV, true, false, true, &LesHouchesReader::setEBeamA, &LesHouchesReader::getEBeamA, 0, 0, 0); static Parameter interfaceEBeamB ("EBeamB", "The energy of the incoming particle along the negative z-axis. " "If zero the corresponding information is to be deduced from the " "event stream/file.", 0, GeV, ZERO, ZERO, 1000000000.0*GeV, true, false, true, &LesHouchesReader::setEBeamB, &LesHouchesReader::getEBeamB, 0, 0, 0); static Reference interfacePDFA ("PDFA", "The PDF used for incoming particle along the positive z-axis. " "If null the corresponding information is to be deduced from the " "event stream/file.", 0, true, false, true, true, false, &LesHouchesReader::setPDFA, &LesHouchesReader::getPDFA, 0); static Reference interfacePDFB ("PDFB", "The PDF used for incoming particle along the negative z-axis. " "If null the corresponding information is to be deduced from the " "event stream/file.", 0, true, false, true, true, false, &LesHouchesReader::setPDFB, &LesHouchesReader::getPDFB, 0); static Parameter interfaceMaxScan ("MaxScan", "The maximum number of events to scan to obtain information about " "processes and cross section in the intialization.", &LesHouchesReader::theMaxScan, -1, 0, 0, true, false, false); static Parameter interfaceCacheFileName ("CacheFileName", "Name of file used to cache the events form the reader in a fast-readable " "form. If empty, no cache file will be generated.", &LesHouchesReader::theCacheFileName, "", true, false); interfaceCacheFileName.fileType(); static Switch interfaceCutEarly ("CutEarly", "Determines whether to apply cuts to events before converting to " "ThePEG format.", &LesHouchesReader::doCutEarly, true, true, false); static SwitchOption interfaceCutEarlyYes (interfaceCutEarly, "Yes", "Event are cut before converted.", true); static SwitchOption interfaceCutEarlyNo (interfaceCutEarly, "No", "Events are not cut before converted.", false); static Reference interfacePartonExtractor ("PartonExtractor", "The PartonExtractor object used to construct remnants. If no object is " "provided the LesHouchesEventHandler object must provide one instead.", &LesHouchesReader::thePartonExtractor, true, false, true, true, false); static Reference interfaceCuts ("Cuts", "The Cuts object to be used for this reader. Note that these " "must not be looser cuts than those used in the actual generation. " "If no object is provided the LesHouchesEventHandler object must " "provide one instead.", &LesHouchesReader::theCuts, true, false, true, true, false); static RefVector interfaceReweights ("Reweights", "A list of ThePEG::ReweightBase objects to modify this the weight of " "this reader.", &LesHouchesReader::reweights, 0, false, false, true, false); static RefVector interfacePreweights ("Preweights", "A list of ThePEG::ReweightBase objects to bias the phase space for this " "reader without influencing the actual cross section.", &LesHouchesReader::preweights, 0, false, false, true, false); static Switch interfaceReweightPDF ("ReweightPDF", "If the PDFs used in the generation for this reader is different " "from the ones assumed by the associated PartonExtractor object, " "should the events be reweighted to fit the latter?", &LesHouchesReader::reweightPDF, false, true, false); static SwitchOption interfaceReweightPDFNo (interfaceReweightPDF, "No", "The event weights are kept as they are.", false); static SwitchOption interfaceReweightPDFYes (interfaceReweightPDF, "Yes", "The events are reweighted.", true); static Switch interfaceInitPDFs ("InitPDFs", "If no PDFs were specified in PDFA or " "PDFBfor this reader, try to extract the " "information from the event file and assign the relevant PDFBase" "objects when the reader is initialized.", &LesHouchesReader::doInitPDFs, false, true, false); static SwitchOption interfaceInitPDFsYes (interfaceInitPDFs, "Yes", "Extract PDFs during initialization.", true); static SwitchOption interfaceInitPDFsNo (interfaceInitPDFs, "No", "Do not extract PDFs during initialization.", false); static Parameter interfaceMaxMultCKKW ("MaxMultCKKW", "If this reader is to be used (possibly together with others) for CKKW-" "reweighting and veto, this should give the multiplicity of outgoing " "particles in the highest multiplicity matrix element in the group. " "If set to zero, no CKKW procedure should be applied.", &LesHouchesReader::theMaxMultCKKW, 0, 0, 0, true, false, Interface::lowerlim); static Parameter interfaceMinMultCKKW ("MinMultCKKW", "If this reader is to be used (possibly together with others) for CKKW-" "reweighting and veto, this should give the multiplicity of outgoing " "particles in the lowest multiplicity matrix element in the group. If " "larger or equal to MaxMultCKKW, no CKKW " "procedure should be applied.", &LesHouchesReader::theMinMultCKKW, 0, 0, 0, true, false, Interface::lowerlim); static Switch interfaceMomentumTreatment ("MomentumTreatment", "Treatment of the momenta supplied by the interface", &LesHouchesReader::theMomentumTreatment, 0, false, false); static SwitchOption interfaceMomentumTreatmentAccept (interfaceMomentumTreatment, "Accept", "Just accept the momenta given", 0); static SwitchOption interfaceMomentumTreatmentRescaleEnergy (interfaceMomentumTreatment, "RescaleEnergy", "Rescale the energy supplied so it is consistent with the mass", 1); static SwitchOption interfaceMomentumTreatmentRescaleMass (interfaceMomentumTreatment, "RescaleMass", "Rescale the mass supplied so it is consistent with the" " energy and momentum", 2); static Switch interfaceWeightWarnings ("WeightWarnings", "Determines if warnings about possible weight incompatibilities should " "be issued when this reader is initialized.", &LesHouchesReader::useWeightWarnings, true, true, false); static SwitchOption interfaceWeightWarningsWarnAboutWeights (interfaceWeightWarnings, "WarnAboutWeights", "Warn about possible incompatibilities with the weight option in the " "Les Houches common block and the requested weight treatment.", true); static SwitchOption interfaceWeightWarningsDontWarnAboutWeights (interfaceWeightWarnings, "DontWarnAboutWeights", "Do not warn about possible incompatibilities with the weight option " "in the Les Houches common block and the requested weight treatment.", false); static Switch interfaceAllowedTopReOpen ("AllowedToReOpen", "Can the file be reopened if more events are requested than the file contains?", &LesHouchesReader::theReOpenAllowed, true, false, false); static SwitchOption interfaceAllowedTopReOpenYes (interfaceAllowedTopReOpen, "Yes", "Allowed to reopen the file", true); static SwitchOption interfaceAllowedTopReOpenNo (interfaceAllowedTopReOpen, "No", "Not allowed to reopen the file", false); static Switch interfaceIncludeSpin ("IncludeSpin", "Use the spin information present in the event file, for tau leptons" " only as this is the only case which makes any sense", &LesHouchesReader::theIncludeSpin, true, false, false); static SwitchOption interfaceIncludeSpinYes (interfaceIncludeSpin, "Yes", "Use the spin information", true); static SwitchOption interfaceIncludeSpinNo (interfaceIncludeSpin, "No", "Don't use the spin information", false); interfaceCuts.rank(8); interfacePartonExtractor.rank(7); interfaceBeamA.rank(5); interfaceBeamB.rank(4); interfaceEBeamA.rank(3); interfaceEBeamB.rank(2); interfaceMaxMultCKKW.rank(1.5); interfaceMinMultCKKW.rank(1.0); interfaceBeamA.setHasDefault(false); interfaceBeamB.setHasDefault(false); interfaceEBeamA.setHasDefault(false); interfaceEBeamB.setHasDefault(false); interfaceMaxMultCKKW.setHasDefault(false); interfaceMinMultCKKW.setHasDefault(false); } namespace ThePEG { ostream & operator<<(ostream & os, const HEPEUP & h) { os << "\n" << " " << setw(4) << h.NUP << " " << setw(6) << h.IDPRUP << " " << setw(14) << h.XWGTUP << " " << setw(14) << h.SCALUP << " " << setw(14) << h.AQEDUP << " " << setw(14) << h.AQCDUP << "\n"; for ( int i = 0; i < h.NUP; ++i ) os << " " << setw(8) << h.IDUP[i] << " " << setw(2) << h.ISTUP[i] << " " << setw(4) << h.MOTHUP[i].first << " " << setw(4) << h.MOTHUP[i].second << " " << setw(4) << h.ICOLUP[i].first << " " << setw(4) << h.ICOLUP[i].second << " " << setw(14) << h.PUP[i][0] << " " << setw(14) << h.PUP[i][1] << " " << setw(14) << h.PUP[i][2] << " " << setw(14) << h.PUP[i][3] << " " << setw(14) << h.PUP[i][4] << " " << setw(1) << h.VTIMUP[i] << " " << setw(1) << h.SPINUP[i] << std::endl; os << "" << std::endl; return os; } } thepeg-1.8.0.orig/LesHouches/MadGraphTwoCut.h0000644000175000017500000001740411747772425017221 0ustar sunsun// -*- C++ -*- // // MadGraphTwoCut.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_MadGraphTwoCut_H #define THEPEG_MadGraphTwoCut_H // // This is the declaration of the MadGraphTwoCut class. // #include "ThePEG/Cuts/TwoCutBase.h" namespace ThePEG { /** * Objects of the MadGraphTwoCut class can be created automatically by * the MadGraphReader class when scanning event files for information * about cuts. It is also possible to create objects by hand and use * it as any other OneCutBase object. * * @see \ref MadGraphTwoCutInterfaces "The interfaces" * defined for MadGraphTwoCut. */ class MadGraphTwoCut: public TwoCutBase { public: /** * Enumerate the different kinds of cuts made by MadGraph. */ enum CutType { INVMASS, /**< The minimum invariant mass of two particles. */ DELTAR /**< The minimum pseudo-rapidity--azimuth-angle distance between two particles. */ }; /** * Enumerate the types of particles the cut is made on. */ enum PType { JET, /**< Coloured particles (jets). */ LEP, /**< Leptons. */ PHO, /**< Photons. */ BOT, /**< Bottom quarks. */ NOT /**< Other types not cut on. */ }; /** * Enumerate the types of particles pairs the cut is made on. */ enum PPType { JETJET, /**< The cut applies only to pairs of coloured particles (jets). */ LEPLEP, /**< The cut applies only to lepton pairs (in case of INVMASS lepton--anti-lepton pairs of same flavour). */ PHOPHO, /**< The cut applies only to pairs photons. */ BOTBOT, /**< The cut applies only to pairs of bottom quarks. */ BOTJET, /**< The cut applies only to bottom quarks paired with another coloured particle (jet). */ PHOJET, /**< The cut applies only to a photon paired with a coloured particle (jet). */ JETLEP, /**< The cut applies only to a coloured particle (jet) paired with a lepton. */ PHOBOT, /**< The cut applies only to a photon paired with a bottom quark. */ BOTLEP, /**< The cut applies only to bottom quarks paired with a lepton. */ PHOLEP /**< The cut applies only to a photon paired with a lepton. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ MadGraphTwoCut() : cutType(DELTAR), pairType(JETJET), theCut(0.0) {} /** * The constructor used by the MadGraphReader. * @param t is the type of the cut. * @param p is the type of particles the cut is applied to. * @param c is the value of the cut (in units of GeV where applicable). */ MadGraphTwoCut(CutType t, PPType p, double c) : cutType(t), pairType(p), theCut(c) {} //@} public: /** @name Virtual functions mandated by the base class. */ //@{ /** * Return the minimum allowed squared invariant mass of two outgoing * partons of type \a pi and \a pj. */ virtual Energy2 minSij(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the negative of the squared * invariant mass of an incoming parton of type \a pi and an * outgoing parton of type \a po. */ virtual Energy2 minTij(tcPDPtr pi, tcPDPtr po) const; /** * Return the minimum allowed value of \f$\Delta * R_{ij}=\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ of two * outgoing partons of type \a pi and \a pj. */ virtual double minDeltaR(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the longitudinally invariant * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$\min(p_{\perp i}, p_{\perp * j})\sqrt{\Delta\eta_{ij}^2+\Delta\phi_{ij}^2}\f$ for two outgoing * partons, or simply \f$p_{\perp i}\f$ or \f$p_{\perp j}\f$ for a * single outgoing parton. Returns 0 if both partons are incoming. A * null pointer indicates an incoming parton, hence the type of the * incoming parton is irrelevant. */ virtual Energy minKTClus(tcPDPtr pi, tcPDPtr pj) const; /** * Return the minimum allowed value of the Durham * \f$k_\perp\f$-algorithms distance measure. This is defined as * \f$2\min(E_j^2, E_j^2)(1-\cos\theta_{ij})/\hat{s}\f$ for two * outgoing partons. */ virtual double minDurham(tcPDPtr pi, tcPDPtr pj) const; /** * Return true if a pair of particles with type \a pitype and \a * pjtype and momenta \a pi and \a pj respectively passes the * cuts. \a inci and \a inj indicates if the corresponding particles * are incoming. */ virtual bool passCuts(tcCutsPtr parent, tcPDPtr pitype, tcPDPtr pjtype, LorentzMomentum pi, LorentzMomentum pj, bool inci = false, bool incj = false) const; //@} protected: /** * Returns true if cut should be applied to pair of particles of * type \a pi and \a pj. */ bool checkType(tcPDPtr pi, tcPDPtr pj) const; /** * Get the type of particle \a p. */ PType getType(tcPDPtr p) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The type of this cut. */ CutType cutType; /** * The type of particle pairs this cut applies to. */ PPType pairType; /** * The value of the cut to be applied. */ double theCut; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initMadGraphTwoCut; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MadGraphTwoCut & operator=(const MadGraphTwoCut &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MadGraphTwoCut. */ template <> struct BaseClassTrait { /** Typedef of the first base class of MadGraphTwoCut. */ typedef TwoCutBase NthBase; }; /** This template specialization informs ThePEG about the name of * the MadGraphTwoCut class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MadGraphTwoCut"; } /** Return the name(s) of the shared library (or libraries) be loaded to get * access to the MadGraphTwoCut class and any other class on which it depends * (except the base class). */ static string library() { return "MadGraphReader.so"; } }; /** @endcond */ } #endif /* THEPEG_MadGraphTwoCut_H */ thepeg-1.8.0.orig/LesHouches/LesHouches.h0000644000175000017500000001307411747772425016431 0ustar sunsun// -*- C++ -*- // // LesHouches.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_LesHouches_H #define THEPEG_LesHouches_H // // This is the declaration of the LesHouches class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * The HEPRUP class is a simple container corresponding to the Les * Houches accord (hep-ph/0109068) common block with the same * name. The members are named in the same way as in the common * block. However, fortran arrays are represented by vectors, except * for the arrays of length two which are represented by pair objects. */ class HEPRUP { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ HEPRUP() : IDWTUP(0), NPRUP(0) {} //@} public: /** * Set the NPRUP variable, corresponding to the number of * sub-processes, to \a nrup, and resize all relevant vectors * accordingly. */ void resize(int nrup) { NPRUP = nrup; resize(); } /** * Assuming the NPRUP variable, corresponding to the number of * sub-processes, is correctly set, resize the relevant vectors * accordingly. */ void resize() { XSECUP.resize(NPRUP); XERRUP.resize(NPRUP); XMAXUP.resize(NPRUP); LPRUP.resize(NPRUP); } /** * PDG id's of beam particles. (first/second is in +/-z direction). */ pair IDBMUP; /** * Energy of beam particles given in GeV. */ pair EBMUP; /** * The author group for the PDF used for the beams according to the * PDFLib specification. */ pair PDFGUP; /** * The id number the PDF used for the beams according to the * PDFLib specification. */ pair PDFSUP; /** * Master switch indicating how the ME generator envisages the * events weights should be interpreted according to the Les Houches * accord. */ int IDWTUP; /** * The number of different subprocesses in this file (should * typically be just one) */ int NPRUP; /** * The cross sections for the different subprocesses in pb. */ vector XSECUP; /** * The statistical error in the cross sections for the different * subprocesses in pb. */ vector XERRUP; /** * The maximum event weights (in XWGTUP) for different subprocesses. */ vector XMAXUP; /** * The subprocess code for the different subprocesses. */ vector LPRUP; }; /** * The HEPEUP class is a simple container corresponding to the Les * Houches accord (hep-ph/0109068) common block with the same * name. The members are named in the same way as in the common * block. However, fortran arrays are represented by vectors, except * for the arrays of length two which are represented by pair objects. */ class HEPEUP { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ HEPEUP() : NUP(0), IDPRUP(0), XWGTUP(0.0), XPDWUP(0.0, 0.0), SCALUP(0.0), AQEDUP(0.0), AQCDUP(0.0) {} //@} public: /** * Set the NUP variable, corresponding to the number of particles in * the current event, to \a nup, and resize all relevant vectors * accordingly. */ void resize(int nup) { NUP = nup; resize(); } /** * Assuming the NUP variable, corresponding to the number of * particles in the current event, is correctly set, resize the * relevant vectors accordingly. */ void resize() { IDUP.resize(NUP); ISTUP.resize(NUP); MOTHUP.resize(NUP); ICOLUP.resize(NUP); PUP.resize(NUP, std::vector(5)); VTIMUP.resize(NUP); SPINUP.resize(NUP); } /** * The number of particle entries in the current event. */ int NUP; /** * The subprocess code for this event (as given in LPRUP). */ int IDPRUP; /** * The weight for this event. */ double XWGTUP; /** * The PDF weights for the two incoming partons. Note that this * variable is not present in the current LesHouches accord * (hep-ph/0109068), hopefully it will be present in a future * accord. */ pair XPDWUP; /** * The scale in GeV used in the calculation of the PDF's in this * event. */ double SCALUP; /** * The value of the QED coupling used in this event. */ double AQEDUP; /** * The value of the QCD coupling used in this event. */ double AQCDUP; /** * The PDG id's for the particle entries in this event. */ vector IDUP; /** * The status codes for the particle entries in this event. */ vector ISTUP; /** * Indices for the first and last mother for the particle entries in * this event. */ vector< pair > MOTHUP; /** * The colour-line indices (first(second) is (anti)colour) for the * particle entries in this event. */ vector< pair > ICOLUP; /** * Lab frame momentum (Px, Py, Pz, E and M in GeV) for the particle * entries in this event. */ vector< vector > PUP; /** * Invariant lifetime (c*tau, distance from production to decay im * mm) for the particle entries in this event. */ vector VTIMUP; /** * Spin info for the particle entries in this event given as the * cosine of the angle between the spin vector of a particle and the * 3-momentum of the decaying particle, specified in the lab frame. */ vector SPINUP; }; } #endif /* THEPEG_LesHouches_H */ thepeg-1.8.0.orig/LesHouches/Makefile.am0000644000175000017500000000175611747772425016256 0ustar sunsunmySOURCES = LesHouchesReader.cc LesHouchesFileReader.cc \ LesHouchesEventHandler.cc DOCFILES = LesHouchesReader.h LesHouchesFileReader.h \ LesHouchesEventHandler.h LesHouches.h INCLUDEFILES = $(DOCFILES) LesHouchesReader.fh \ LesHouchesFileReader.fh \ LesHouchesEventHandler.fh pkglib_LTLIBRARIES = LesHouches.la MadGraphReader.la # Version info should be updated if any interface or persistent I/O # function is changed MadGraphReader_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) MadGraphReader_la_SOURCES = MadGraphReader.cc MadGraphReader.h \ MadGraphOneCut.cc MadGraphOneCut.h \ MadGraphTwoCut.cc MadGraphTwoCut.h # Version info should be updated if any interface or persistent I/O # function is changed LesHouches_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) LesHouches_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/LesHouches/LesHouchesFileReader.cc0000644000175000017500000005277211747772425020522 0ustar sunsun// -*- C++ -*- // // LesHouchesFileReader.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the LesHouchesFileReader class. // #include "LesHouchesFileReader.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; LesHouchesFileReader:: LesHouchesFileReader(const LesHouchesFileReader & x) : LesHouchesReader(x), neve(x.neve), ieve(0), LHFVersion(x.LHFVersion), outsideBlock(x.outsideBlock), headerBlock(x.headerBlock), initComments(x.initComments), initAttributes(x.initAttributes), eventComments(x.eventComments), eventAttributes(x.eventAttributes), theFileName(x.theFileName), theQNumbers(x.theQNumbers), theDecayer(x.theDecayer) {} LesHouchesFileReader::~LesHouchesFileReader() {} IBPtr LesHouchesFileReader::clone() const { return new_ptr(*this); } IBPtr LesHouchesFileReader::fullclone() const { return new_ptr(*this); } bool LesHouchesFileReader::preInitialize() const { return true; } void LesHouchesFileReader::doinit() { LesHouchesReader::doinit(); // are we using QNUMBERS if(!theQNumbers) return; // parse the header block and create // any new particles needed in QNUMBERS blocks string block = headerBlock; string line = ""; bool readingSLHA = false; int (*pf)(int) = tolower; do { line = StringUtils::car(block,"\r\n"); block = StringUtils::cdr(block,"\r\n"); if(line[0]=='#') continue; // are we reading the SLHA block if(readingSLHA) { // reached the end of slha block ? if(line.find(" split = StringUtils::split(line,"#"); // check for a qnumbers block transform(split[0].begin(), split[0].end(), split[0].begin(), pf); // if not contine if(split[0].find("block qnumbers")==string::npos) continue; // get name from comment string name = StringUtils::stripws(split[1]); // extract the PDG code split = StringUtils::split(split[0]," "); istringstream is(split[2]); long PDGCode(0); is >> PDGCode; // get the charge, spin, colour and whether an antiparticle int charge(0),spin(0),colour(0),anti(0); for(unsigned int ix=0;ix<4;++ix) { line = StringUtils::car(block,"\r\n"); block = StringUtils::cdr(block,"\r\n"); int dummy[2]; istringstream is(line); is >> dummy[0] >> dummy[1]; switch (dummy[0]) { case 1: charge = dummy[1]; break; case 2: spin = dummy[1]; break; case 3: colour = dummy[1]; break; case 4: anti = dummy[1]; break; default: assert(false); } } // check if particles already exist PDPair newParticle; newParticle.first = getParticleData(PDGCode); if(newParticle.first) Throw() << "Particle with PDG code " << PDGCode << " whose creation was requested in a QNUMBERS Block" << " already exists. Retaining the original particle" << Exception::warning; if(anti) { newParticle.second = getParticleData(-PDGCode); if(newParticle.second) Throw() << "Anti-particle with PDG code " << -PDGCode << " whose creation was requested in a QNUMBERS Block" << " already exists. Retaining the original particle" << Exception::warning; if(( newParticle.first && !newParticle.second ) || ( newParticle.second && !newParticle.first ) ) Throw() << "Either particle or anti-particle with PDG code " << PDGCode << " whose creation was requested in a QNUMBERS Block" << " already exists, but not both the particle and antiparticle. " << " Something dodgy here stopping" << Exception::runerror; } // already exists continue if(newParticle.first) continue; // create the particles // particle with no anti particle if( anti == 0 ) { // construct the name if(name=="") { ostringstream temp; temp << PDGCode; name = temp.str(); } // create the ParticleData object newParticle.first = ParticleData::Create(PDGCode,name); } // particle anti-particle pair else { // construct the names string nameAnti; if(name=="") { ostringstream temp; temp << PDGCode; name = temp.str(); ostringstream temp2; temp << -PDGCode; nameAnti = temp2.str(); } else { nameAnti=name; for(string::iterator it=nameAnti.begin();it!=nameAnti.end();++it) { if(*it=='+') nameAnti.replace(it,it+1,"-"); else if(*it=='-') nameAnti.replace(it,it+1,"+"); } if(nameAnti==name) nameAnti += "bar"; } // create the ParticleData objects newParticle = ParticleData::Create(PDGCode,name,nameAnti); } // set the particle properties if(colour==1) colour = 0; newParticle.first->iColour(PDT::Colour(colour)); newParticle.first->iSpin (PDT::Spin (spin )); newParticle.first->iCharge(PDT::Charge(charge)); // register it generator()->preinitRegister(newParticle.first, "/Herwig/Particles/"+newParticle.first->PDGName()); // set the antiparticle properties if(newParticle.second) { if(colour==3||colour==6) colour *= -1; charge = -charge; newParticle.second->iColour(PDT::Colour(colour)); newParticle.second->iSpin (PDT::Spin (spin )); newParticle.second->iCharge(PDT::Charge(charge)); // register it generator()->preinitRegister(newParticle.second, "/Herwig/Particles/"+newParticle.second->PDGName()); } } // start of SLHA block ? else if(line.find("> id >> mass; // skip resetting masses on SM particles // as it can cause problems later on in event generation if(abs(id)<=6 || (abs(id)>=11 && abs(id)<=16) || abs(id)==23 || abs(id)==24) { block = StringUtils::cdr(block,"\r\n"); line = StringUtils::car(block,"\r\n"); continue; } // magnitude of mass for susy models mass = abs(mass); // set the mass tPDPtr particle = getParticleData(id); if(!particle) throw SetupException() << "LesHouchesFileReader::doinit() - Particle with PDG code not" << id << " not found." << Exception::runerror; const InterfaceBase * ifb = BaseRepository::FindInterface(particle, "NominalMass"); ostringstream os; os << mass; ifb->exec(*particle, "set", os.str()); // read the next line block = StringUtils::cdr(block,"\r\n"); line = StringUtils::car(block,"\r\n"); }; } // found a decay block else if(line.find("decay") == 0) { // get PGD code and width istringstream iss(line); string dummy; long parent(0); Energy width(ZERO); iss >> dummy >> parent >> iunit(width, GeV); // get the ParticleData object PDPtr inpart = getParticleData(parent); if(!inpart) { throw SetupException() << "LesHouchesFileReader::doinit() - A ParticleData object with the PDG code " << parent << " does not exist. " << Exception::runerror; return; } // set the width inpart->width(width); if( width > ZERO ) { inpart->cTau(hbarc/width); inpart->widthCut(5.*width); inpart->stable(false); } // construct prefix for DecayModes string prefix(inpart->name() + "->"), tag(prefix),line(""); unsigned int nmode(0); // read any decay modes line = StringUtils::car(block,"\r\n"); while(line[0] != 'D' && line[0] != 'B' && line[0] != 'd' && line[0] != 'b' && line != "") { // skip comments if(line[0] == '#') { block = StringUtils::cdr(block,"\r\n"); line = StringUtils::car(block,"\r\n"); continue; } // read decay mode and construct the tag istringstream is(line); double brat(0.); unsigned int nda(0),npr(0); is >> brat >> nda; while( true ) { long t; is >> t; if( is.fail() ) break; if( t == abs(parent) ) throw SetupException() << "An error occurred while read a decay of the " << inpart->PDGName() << ". One of its products has the same PDG code " << "as the parent particle in LesHouchesFileReader::doinit()." << " Please check the Les Houches file.\n" << Exception::runerror; tcPDPtr p = getParticleData(t); if( !p ) throw SetupException() << "LesHouchesFileReader::doinit() -" << " An unknown PDG code has been encounterd " << "while reading a decay mode. ID: " << t << Exception::runerror; ++npr; tag += p->name() + ","; } if( npr != nda ) throw SetupException() << "LesHouchesFileReader::doinit() - While reading a decay of the " << inpart->PDGName() << " from an SLHA file, an inconsistency " << "between the number of decay products and the value in " << "the 'NDA' column was found. Please check if the spectrum " << "file is correct.\n" << Exception::warning; // create the DecayMode if( npr > 1 ) { if( nmode==0 ) { generator()->preinitInterface(inpart, "VariableRatio" , "set","false"); if(inpart->massGenerator()) { ok = false; Throw() << inpart->PDGName() << " already has a MassGenerator set" << " this is incompatible with using QNUMBERS " << "Use\n" << "set " << inpart->fullName() << ":Mass_generator NULL\n" << "to fix this." << Exception::warning; } if(inpart->widthGenerator()) { ok = false; Throw() << inpart->PDGName() << " already has a WidthGenerator set" << " this is incompatible with using QNUMBERS " << "Use\n" << "set " << inpart->fullName() << ":Width_generator NULL\n" << "to fix this." << Exception::warning; } unsigned int ntemp=0; for(DecaySet::const_iterator dit = inpart->decayModes().begin(); dit != inpart->decayModes().end(); ++dit ) { if((**dit).on()) ++ntemp; } if(ntemp!=0) { ok = false; Throw() << inpart->PDGName() << " already has DecayModes" << " this is incompatible with using QNUMBERS " << "Use\n" << "do " << inpart->fullName() << ":SelectDecayModes none\n" << " to fix this." << Exception::warning; } } inpart->stable(false); tag.replace(tag.size() - 1, 1, ";"); DMPtr dm = generator()->findDecayMode(tag); if(!dm) { if(!theDecayer) Throw() << "LesHouchesFileReader::doinit() Decayer" << " must be set to allow the creation of new" << " decay modes" << Exception::runerror; dm = generator()->preinitCreateDecayMode(tag); if(!dm) Throw() << "LesHouchesFileReader::doinit() - Needed to create " << "new decaymode but one could not be created for the tag " << tag << Exception::warning; } generator()->preinitInterface(dm, "Decayer", "set", theDecayer->fullName()); ostringstream br; br << setprecision(13) << brat; generator()->preinitInterface(dm, "BranchingRatio", "set", br.str()); generator()->preinitInterface(dm, "OnOff", "set", "On"); if(dm->CC()) { generator()->preinitInterface(dm->CC(), "BranchingRatio", "set", br.str()); generator()->preinitInterface(dm->CC(), "OnOff", "set", "On"); } ++nmode; } tag=prefix; // read the next line block = StringUtils::cdr(block,"\r\n"); line = StringUtils::car(block,"\r\n"); }; if(nmode>0) { inpart->update(); if(inpart->CC()) inpart->CC()->update(); } } } // start of SLHA block ? else if(line.find("() << "The file associated with '" << name() << "' does not contain a " << "proper formatted Les Houches event file. The events may not be " << "properly sampled." << Exception::warning; } void LesHouchesFileReader::open() { if ( filename().empty() ) throw LesHouchesFileError() << "No Les Houches file name. " << "Use 'set " << name() << ":FileName'." << Exception::runerror; cfile.open(filename()); if ( !cfile ) throw LesHouchesFileError() << "The LesHouchesFileReader '" << name() << "' could not open the " << "event file called '" << theFileName << "'." << Exception::runerror; cfile.readline(); if ( !cfile.find(" attributes = StringUtils::xmlAttributes("LesHouchesEvents", cfile.getline()); LHFVersion = attributes["version"]; if ( LHFVersion.empty() ) return; bool readingHeader = false; bool readingInit = false; headerBlock = ""; // Loop over all lines until we hit the tag. while ( cfile.readline() && !cfile.find("") ) { if ( cfile.find("> heprup.IDBMUP.first >> heprup.IDBMUP.second >> heprup.EBMUP.first >> heprup.EBMUP.second >> heprup.PDFGUP.first >> heprup.PDFGUP.second >> heprup.PDFSUP.first >> heprup.PDFSUP.second >> heprup.IDWTUP >> heprup.NPRUP ) ) { heprup.NPRUP = -42; LHFVersion = ""; return; } heprup.resize(); for ( int i = 0; i < heprup.NPRUP; ++i ) { cfile.readline(); if ( !( cfile >> heprup.XSECUP[i] >> heprup.XERRUP[i] >> heprup.XMAXUP[i] >> heprup.LPRUP[i] ) ) { heprup.NPRUP = -42; LHFVersion = ""; return; } } } else if ( cfile.find("> hepeup.NUP >> hepeup.IDPRUP >> hepeup.XWGTUP >> hepeup.SCALUP >> hepeup.AQEDUP >> hepeup.AQCDUP ) ) return false; hepeup.resize(); // Read all particle lines. for ( int i = 0; i < hepeup.NUP; ++i ) { if ( !cfile.readline() ) return false; if ( !( cfile >> hepeup.IDUP[i] >> hepeup.ISTUP[i] >> hepeup.MOTHUP[i].first >> hepeup.MOTHUP[i].second >> hepeup.ICOLUP[i].first >> hepeup.ICOLUP[i].second >> hepeup.PUP[i][0] >> hepeup.PUP[i][1] >> hepeup.PUP[i][2] >> hepeup.PUP[i][3] >> hepeup.PUP[i][4] >> hepeup.VTIMUP[i] >> hepeup.SPINUP[i] ) ) return false; if(isnan(hepeup.PUP[i][0])||isnan(hepeup.PUP[i][1])|| isnan(hepeup.PUP[i][2])||isnan(hepeup.PUP[i][3])|| isnan(hepeup.PUP[i][4])) throw Exception() << "nan's as momenta in Les Houches file " << Exception::eventerror; if(hepeup.MOTHUP[i].first -1==i || hepeup.MOTHUP[i].second-1==i) { throw Exception() << "Particle has itself as a mother in Les Houches " << "file, this is not allowed\n" << Exception::eventerror; } } // Now read any additional comments and named weights. optionalWeights.clear(); while ( cfile.readline() && !cfile.find("") ) { // parse weightinfo elements if ( cfile.find(" weightAttributes = StringUtils::xmlAttributes("weightinfo",cfile.getline()); if ( !cfile.readline() ) return false; double weightValue; cfile >> weightValue; if ( !cfile.readline() ) return false; if ( !cfile.find("") ) { throw LesHouchesFileError() << "error while parsing weight information in " << theFileName << Exception::eventerror; } // ignore the single unnamed weight, but warn if multiple of the // same name map::const_iterator weightName = weightAttributes.find("name"); if ( weightName != weightAttributes.end() ) { map::iterator wit = optionalWeights.find(weightName->second); if ( wit == optionalWeights.end() ) { optionalWeights[weightName->second] = weightValue; } else { throw LesHouchesFileError() << "multiple weights of the same name in " << theFileName << Exception::eventerror; } } continue; } eventComments += cfile.getline() + "\n"; } if ( !cfile ) return false; return true; } void LesHouchesFileReader::close() { cfile.close(); } void LesHouchesFileReader::persistentOutput(PersistentOStream & os) const { os << neve << LHFVersion << outsideBlock << headerBlock << initComments << initAttributes << eventComments << eventAttributes << theFileName << theQNumbers << theDecayer; } void LesHouchesFileReader::persistentInput(PersistentIStream & is, int) { is >> neve >> LHFVersion >> outsideBlock >> headerBlock >> initComments >> initAttributes >> eventComments >> eventAttributes >> theFileName >> theQNumbers >> theDecayer; ieve = 0; } ClassDescription LesHouchesFileReader::initLesHouchesFileReader; // Definition of the static class description member. void LesHouchesFileReader::Init() { static ClassDocumentation documentation ("ThePEG::LesHouchesFileReader is an base class to be used for objects " "which reads event files from matrix element generators. This class is " "able to read plain event files conforming to the Les Houches Event File " "accord."); static Parameter interfaceFileName ("FileName", "The name of a file containing events conforming to the Les Houches " "protocol to be read into ThePEG. A file name ending in " ".gz will be read from a pipe which uses " "zcat. If a file name ends in | the " "preceeding string is interpreted as a command, the output of which " "will be read through a pipe.", &LesHouchesFileReader::theFileName, "", false, false); interfaceFileName.fileType(); interfaceFileName.rank(11); static Switch interfaceQNumbers ("QNumbers", "Whether or not to read search for and read a QNUMBERS" " block in the header of the file.", &LesHouchesFileReader::theQNumbers, false, false, false); static SwitchOption interfaceQNumbersYes (interfaceQNumbers, "Yes", "Use QNUMBERS", true); static SwitchOption interfaceQNumbersNo (interfaceQNumbers, "No", "Don't use QNUMBERS", false); static Reference interfaceDecayer ("Decayer", "Decayer to use for any decays read from the QNUMBERS Blocks", &LesHouchesFileReader::theDecayer, false, false, true, true, false); } thepeg-1.8.0.orig/Makefile.am0000644000175000017500000000072211747772425014204 0ustar sunsunif JAVAGUI JAVADIR = java endif MAINDIRS = include Config Utilities Helicity Interface LesHouches Vectors \ PDT PDF Persistency Handlers MatrixElement Pointer ACDC \ StandardModel Repository EventRecord Cuts Analysis lib src Doc DIST_SUBDIRS = $(MAINDIRS) java SUBDIRS = $(MAINDIRS) $(JAVADIR) EXTRA_DIST = GUIDELINES DISTCHECK_CONFIGURE_FLAGS = --enable-unitchecks --without-LHAPDF ACLOCAL_AMFLAGS = -I m4 DISTCLEANFILES = config.thepeg thepeg-1.8.0.orig/PDT/0000755000175000017500000000000011756460366012574 5ustar sunsunthepeg-1.8.0.orig/PDT/Onium3GDecayer.cc0000644000175000017500000001104111747772425015660 0ustar sunsun// -*- C++ -*- // // Onium3GDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Onium3GDecayer class. // #include "Onium3GDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/HandlerGroup.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; Onium3GDecayer::~Onium3GDecayer() {} IBPtr Onium3GDecayer::clone() const { return new_ptr(*this); } IBPtr Onium3GDecayer::fullclone() const { return new_ptr(*this); } bool Onium3GDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() != 3 || !dm.cascadeProducts().empty() || !dm.productMatchers().empty() || dm.wildProductMatcher() ) return false; if ( !VectorMesonMatcher::Check(*dm.parent()) ) return false; vector flv = PDT::flavourContent(*dm.parent()); if ( abs(flv[0]) < 4 || flv[0] + flv[1] != 0 ) return false; int ng = 0; int np = 0; for ( int i = 0; i < 3; ++i ) if ( dm.orderedProducts()[i]->id() == ParticleID::g ) ++ng; else if ( dm.orderedProducts()[i]->id() == ParticleID::gamma ) ++np; if ( ng < 2 || ng + np != 3 ) return false; return true; } ParticleVector Onium3GDecayer::decay(const DecayMode & dm, const Particle & parent) const { PVector children = FlatDecayer::decay(dm, parent); PVector gluons; for ( int i = 0, N = children.size(); i < N; ++i ) { children[i]->scale(sqr(parent.mass())); if ( children[i]->id() == ParticleID::g ) gluons.push_back(children[i]); } for ( int i = 0, N = gluons.size(); i < N; ++i ) gluons[i]->colourNeighbour(gluons[(i + 1)%N]); HintPtr h = ptr_new(); h->tag(children.begin(), children.end()); using namespace Group; generator()->currentEventHandler()-> addStep(main, shower()? cascade: hadron, tStepHdlPtr(), h); return children; } double Onium3GDecayer::reweight(const DecayMode &, const Particle & parent, const ParticleVector & ch) const { vector x(3); Energy2 m2 = parent.momentum().mass2(); x[0] = 2.0*ch[1]->momentum()*ch[2]->momentum()/m2; x[1] = 2.0*ch[2]->momentum()*ch[0]->momentum()/m2; x[2] = 2.0*ch[0]->momentum()*ch[1]->momentum()/m2; for ( int i = 0; i < 3; ++i ) if ( ch[i]->id() == ParticleID::gamma && (1.0 - x[i])*m2 < sqr(minGGMass()) ) return 0.0; return 0.5*(sqr((1.0 - x[0])/(x[1]*x[2])) + sqr((1.0 - x[1])/(x[2]*x[0])) + sqr((1.0 - x[2])/(x[0]*x[1]))); } void Onium3GDecayer::persistentOutput(PersistentOStream & os) const { os << doShower << ounit(theMinGGMass,GeV); } void Onium3GDecayer::persistentInput(PersistentIStream & is, int) { is >> doShower >> iunit(theMinGGMass,GeV); } ClassDescription Onium3GDecayer::initOnium3GDecayer; // Definition of the static class description member. void Onium3GDecayer::Init() { static ClassDocumentation documentation ("This class performs the decay of a spin-1 onium resonance into " "three gluons or two gluons and a photon. After the decay the " "collision handler is instructed to restart the generation from the " "hadronization (or optionally the parton cascade) stage."); static Switch interfaceShower ("Shower", "Should the produced gluons be showered or only hadronized?", &Onium3GDecayer::doShower, true, true, false); static SwitchOption interfaceShowerYes (interfaceShower, "Yes", "The produced gluons should be showered before hadronization.", true); static SwitchOption interfaceShowerNo (interfaceShower, "No", "The produced gluons should be hadronized whithout preceeding shower.", false); static Parameter interfaceMinGGMass ("MinGGMass", "The minimum invariant mass of the two gluons allowed in gamma-g-g " "decays.", &Onium3GDecayer::theMinGGMass, GeV, 2.0*GeV, ZERO, 10.0*GeV, true, false, true); interfaceShower.rank(10); } thepeg-1.8.0.orig/PDT/SimpleBaryonRemnantDecayer.cc0000644000175000017500000003224011747772425020334 0ustar sunsun// -*- C++ -*- // // SimpleBaryonRemnantDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the SimpleBaryonRemnantDecayer class. // #include "SimpleBaryonRemnantDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/RemnantData.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/PDF/BeamParticleData.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; SimpleBaryonRemnantDecayer::~SimpleBaryonRemnantDecayer() {} IBPtr SimpleBaryonRemnantDecayer::clone() const { return new_ptr(*this); } IBPtr SimpleBaryonRemnantDecayer::fullclone() const { return new_ptr(*this); } bool SimpleBaryonRemnantDecayer::accept(const DecayMode &) const { return true; } bool SimpleBaryonRemnantDecayer:: canHandle(tcPDPtr particle, tcPDPtr parton) const { return BaryonMatcher::Check(*particle) && StandardQCDPartonMatcher::Check(*parton); } bool SimpleBaryonRemnantDecayer:: checkExtract(tcPPtr parent, tcPPtr parton, const LorentzMomentum & pnew) const { return pnew.e() > parent->nominalMass() + parton->data().constituentMass(); } ParticleVector SimpleBaryonRemnantDecayer:: decay(const DecayMode & dm, const Particle & p, Step & step) const { ParticleVector children; tcRemPPtr remnant = dynamic_ptr_cast(&p); if ( !remnant ) return children; tRemPDPtr rpd = data(remnant); PVector ex = extracted(remnant); tcPPtr particle = parent(remnant); if ( !particle || ex.empty() || !rpd ) return children; // We can't handle multiple extractions (yet) if ( ex.size() != 1 ) return children; tPPtr parton = ex[0]; tPVector subsys = getSubSystem(particle, parton); tPVector subpart; LorentzMomentum pitot = Utilities::sumMomentum(subsys) + remnant->momentum(); Energy2 s = ZERO; Energy2 shat = ZERO; LorentzMomentum psub; Energy minmass = particle->nominalMass() + 2.0*parton->nominalMass() + margin(); unsigned int closeskip = 0; while ( closeskip < subsys.size() ) { subpart = tPVector(subsys.begin() + closeskip, subsys.end()); while ( !subpart.empty() ) { psub = Utilities::sumMomentum(subpart); s = max((remnant->momentum() + psub).m2(), ZERO); shat = max(psub.m2(), ZERO); if ( subpart.size() == 1 ) shat = max(subpart[0]->momentum().mass2(), ZERO); if ( sqrt(s) > sqrt(shat) + minmass ) break; subpart.pop_back(); } if ( !subpart.empty() ) break; ++closeskip; } if ( subpart.empty() ) { if ( respectDISKinematics() ) { // If we couldn't find any way of shuffling momentum and this may // have been a DIS event, try to include the scattered lepton as // well. { HoldFlag nodis(respectDIS, 0); children = decay(dm, p, step); } if ( respectDISKinematics() == 1 ) Throw() << "The decay of the remnant '" << p.PDGName() << "' changed the kinematics of a scattered lepton in a DIS event.\n" << *step.collision()->event() << Exception::warning; return children; } else { Throw() << "Could not decay remnant '" << p.PDGName() << "' since not enough energy-momentum was available." << Exception::eventerror; } } const BaryonContent & bi = getBaryonInfo(particle->dataPtr()); // Check if we are extracting a valence quark int iq = parton->id(); vector vflav = bi.flav; vector::iterator v = find(vflav.begin(), vflav.end(), bi.sign*iq); double pval = 0.0; if ( v != vflav.end() ) { vflav.erase(v); tcPDFPtr pdf; const BeamParticleData * beamp = dynamic_cast(&*particle->dataPtr()); if ( beamp ) pdf = beamp->pdf(); if ( pdf && !specialValence() ) { Energy2 scale = abs(parton->scale()); double x = shat/s; pval = pdf->xfvx(particle->dataPtr(), parton->dataPtr(), scale, x)/ pdf->xfx(particle->dataPtr(), parton->dataPtr(), scale, x); } else { pval = 1; } } Energy mr = ZERO; while ( true ) { children.clear(); if ( rndbool(pval) ) { // A simple valence remnant. int idqr = 1000*max(vflav[0], vflav[1]) + 100*min(vflav[0], vflav[1]) + 3; if ( vflav[0] != vflav[1] && rndbool(0.25) ) idqr -= 2; children.push_back(getParticleData(bi.sign*idqr)->produceParticle()); mr = children[0]->mass(); } else { // We haven't extracted a valence so we first divide up the baryon // in a quark and a diquark. pair r = bi.flavsel.select(UseRandom::current()); int iqr = r.first*bi.sign; int idqr = r.second*bi.sign; if ( iq == ParticleID::g ) { children.push_back(getParticleData(iqr)->produceParticle()); children.push_back(getParticleData(idqr)->produceParticle()); } else if ( iq*iqr > 0 ) { children.push_back(getParticleData(idqr)->produceParticle()); children.push_back(flavourGenerator().getHadron (getParticleData(-iq), getParticleData(iqr))->produceParticle()); } else { children.push_back(getParticleData(iqr)->produceParticle()); children.push_back(flavourGenerator().getHadron (getParticleData(-iq), getParticleData(idqr))->produceParticle()); } TransverseMomentum ptr = pTGenerator()->generate(); Energy2 mt02 = children[0]->momentum().mass2() + ptr.pt2(); Energy2 mt12 = children[1]->momentum().mass2() + ptr.pt2(); double z = zGenerator().generate(children[1]->dataPtr(), children[0]->dataPtr(), mt12); mr = sqrt(mt02/(1.0 - z) + mt12/z); if ( sqrt(s) <= sqrt(shat) + mr ) continue; children[0]->set3Momentum(static_cast (lightCone((1.0 - z)*mr, mt02/((1.0 - z)*mr), ptr))); children[1]->set3Momentum(static_cast (lightCone(z*mr, mt12/(z*mr), -ptr))); } break; } // Make copies of all final particles in the hard subsystem which // will take recoil. for ( unsigned int i = 0, N = subsys.size(); i < N; ++i ) { if ( subsys[i]->birthStep() != &step ) subsys[i] = step.copyParticle(subsys[i]); if ( i >= closeskip && i - closeskip < subpart.size() ) subpart[i - closeskip] = subsys[i]; } // Boost part of the hard subsystem to give energy to the new // remnants. LorentzMomentum pr = remnant->momentum(); LorentzRotation R = Utilities::getBoostToCM(make_pair(psub, pr)); Energy pz = SimplePhaseSpace::getMagnitude(s, sqrt(shat), mr); if ( subpart.size() > 1 ) { LorentzRotation Rs(-(R*psub).boostVector()); Rs.boost(0.0, 0.0, pz/sqrt(sqr(pz) + shat)); Rs = Rs*R; R.invert(); Rs = R*Rs; Utilities::transform(subpart, Rs); } else { subpart[0]->set5Momentum( Lorentz5Momentum(ZERO, ZERO, pz, sqrt(sqr(pz) + shat), sqrt(shat))); R.invert(); Utilities::transform(subpart, R); } LorentzRotation Rr(0.0, 0.0, -pz/sqrt(sqr(pz) + sqr(mr))); Rr = R*Rr; Utilities::transform(children, Rr); // Give the remnants and subsystem a transverse momentum by Lorentz // rotations. LorentzMomentum pr0 = ( pr = Utilities::sumMomentum(children) ); LorentzMomentum psub0 = ( psub = Utilities::sumMomentum(subsys) ); LorentzMomentum ksub = pr + psub - particle->momentum(); R = Utilities::boostToCM(make_pair(&psub, &pr)); TransverseMomentum kt; do { kt = pTGenerator()->generate(); } while ( kt.pt() >= psub.z() ); LorentzRotation Rtot = R; Rtot.rotateY(asin(kt.pt()/psub.z())); Rtot.rotateZ(kt.phi()); Rtot = R.inverse()*Rtot; psub = Rtot*psub0; pr = Rtot*pr0; Utilities::transform(children, Rtot); if ( subsys.size() > 1 ) Utilities::transform(subsys, Utilities::getTransformToMomentum(psub0, psub, ksub)); else subsys[0]->setMomentum(psub); // Make small z-boosts to correct Utilities::transform(subsys, getZBoost(Utilities::sumMomentum(subsys), psub)); LorentzMomentum pftot = Utilities::sumMomentum(subsys) + Utilities::sumMomentum(children); R = getZBoost(pftot, pitot); Utilities::transform(subsys, R); Utilities::transform(children, R); return children; } const SimpleBaryonRemnantDecayer::BaryonContent & SimpleBaryonRemnantDecayer::getBaryonInfo(tcPDPtr baryon) const { map::iterator it = baryonmap.find(baryon); if ( it != baryonmap.end() ) return it->second; BaryonContent & bi = baryonmap[baryon]; int pid = baryon->id(); bi.sign = pid < 0? -1: 1; bi.flav = vector(3); bi.flav[0] = (pid = abs(pid)/10)%10; bi.flav[1] = (pid /= 10)%10; bi.flav[2] = (pid /= 10)%10; bi.flavsel = VSelector< pair >(); for ( int iq1 = 0; iq1 < 3; ++iq1 ) { int iq2 = (iq1 + 1)%3; int iq3 = (iq2 + 1)%3; int idq = 1000*max(bi.flav[iq2], bi.flav[iq3]) + 100*min(bi.flav[iq2], bi.flav[iq3]) + 3; bi.flavsel.insert(3.0, make_pair(bi.flav[iq1], idq)); if ( bi.flav[iq2] == bi.flav[iq3] ) continue; bi.flavsel.insert(1.0, make_pair(bi.flav[iq1], idq - 2)); } return bi; } bool SimpleBaryonRemnantDecayer::preInitialize() const { return RemnantDecayer::preInitialize() || !theZGenerator || !theFlavourGenerator; } void SimpleBaryonRemnantDecayer::doinit() { RemnantDecayer::doinit(); if ( !theZGenerator ) { theZGenerator = dynamic_ptr_cast (generator()->preinitCreate("ThePEG::SimpleZGenerator", fullName() + "/ZGen", "SimpleZGenerator.so")); } if ( !theFlavourGenerator ) { theFlavourGenerator = dynamic_ptr_cast (generator()->preinitCreate("ThePEG::SimpleFlavour", fullName() + "/FlavGen", "SimpleFlavour.so")); } } void SimpleBaryonRemnantDecayer:: persistentOutput(PersistentOStream & os) const { os << theZGenerator << theFlavourGenerator << ounit(theMargin,GeV) << useSpecialValence; } void SimpleBaryonRemnantDecayer:: persistentInput(PersistentIStream & is, int) { is >> theZGenerator >> theFlavourGenerator >> iunit(theMargin,GeV) >> useSpecialValence; } ClassDescription SimpleBaryonRemnantDecayer::initSimpleBaryonRemnantDecayer; // Definition of the static class description member. void SimpleBaryonRemnantDecayer::Init() { static ClassDocumentation documentation ("The SimpleBaryonRemnantDecayer class inherits from the RemnantDecayer " "class and is able to decay RemnantParticles produced by the " "SoftRemnantHandler class for the cases when a single parton has been " "extracted from a baryon."); static Reference interfaceZGenerator ("ZGenerator", "The object responsible for generating momentum fractions in case " "of more than one remnant. If not set and the controlling EventGenerator " "has a default ZGenerator object, this will be used. Otherwise a " "SimpleZGenerator object created with default settings in the " "initialization will be used instead.", &SimpleBaryonRemnantDecayer::theZGenerator, true, false, true, true, true); static Reference interfaceFlavourGenerator ("FlavourGenerator", "The object responsible for handling the flavour contents of a baryon. " "If not set and the controlling EventGenerator " "has a default FlavourGenerator object, this will be used. Otherwise a " "SimpleFlavour object created with default settings in the " "initialization will be used instead.", &SimpleBaryonRemnantDecayer::theFlavourGenerator, true, false, true, true, true); static Parameter interfaceMargin ("EnergyMargin", "The energy margin (in GeV) to be added to the sum of the parent and " "parton masses to determine if it is possible to construct the remnants " "with the given (upper limit of the) virtuality of the extracted parton.", &SimpleBaryonRemnantDecayer::theMargin, GeV, 1.0*GeV, ZERO, 10.0*GeV, false, false, true); static Switch interfaceSpecialValence ("SpecialValence", "If true, an extracted valence quark will always give a di-quark remnant.", &SimpleBaryonRemnantDecayer::useSpecialValence, false, true, false); static SwitchOption interfaceSpecialValenceYes (interfaceSpecialValence, "Yes", "An extracted valence quark will always give a di-quark remnant.", true); static SwitchOption interfaceSpecialValenceNo (interfaceSpecialValence, "No", "An extracted valence flavour may be considered to be a sea-quark.", false); interfaceZGenerator.rank(8); interfaceFlavourGenerator.rank(7); } thepeg-1.8.0.orig/PDT/WidthGenerator.fh0000644000175000017500000000051311747772425016042 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_WidthGenerator_FH #define ThePEG_WidthGenerator_FH // // This is the forward declaration of the WidthGenerator class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class WidthGenerator; ThePEG_DECLARE_POINTERS(WidthGenerator,WidthGeneratorPtr); } #endif /* ThePEG_WidthGenerator_FH */ thepeg-1.8.0.orig/PDT/ConstituentParticleData.cc0000644000175000017500000000556411747772425017714 0ustar sunsun// -*- C++ -*- // // ConstituentParticleData.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ConstituentParticleData class. // #include "ConstituentParticleData.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; ConstituentParticleData::ConstituentParticleData(long newId, string newPDGName) : ParticleData(newId, newPDGName), theConstituentMass(ZERO), theDefaultConstituentMass(ZERO) {} PDPtr ConstituentParticleData:: Create(long newId, string newPDGName) { return new_ptr(ConstituentParticleData(newId, newPDGName)); } PDPair ConstituentParticleData:: Create(long newId, string newPDGName, string newAntiPDGName) { PDPair pap; pap.first = new_ptr(ConstituentParticleData(newId, newPDGName)); pap.second = new_ptr(ConstituentParticleData(-newId, newAntiPDGName)); antiSetup(pap); return pap; } void ConstituentParticleData::readSetup(istream & is) { ParticleData::readSetup(is); is >> iunit(theDefaultConstituentMass, GeV); theConstituentMass = theDefaultConstituentMass; } PDPtr ConstituentParticleData::pdclone() const { return new_ptr(*this); } void ConstituentParticleData::persistentOutput(PersistentOStream & os) const { os << ounit(theConstituentMass, GeV) << ounit(theDefaultConstituentMass, GeV); } void ConstituentParticleData::persistentInput(PersistentIStream & is, int) { is >> iunit(theConstituentMass, GeV) >> iunit(theDefaultConstituentMass, GeV); } void ConstituentParticleData::setConstituentMass(Energy m) { theConstituentMass = m; ConstituentParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->theConstituentMass = m; } Energy ConstituentParticleData::defConstituentMass() const { return theDefaultConstituentMass; } ClassDescription ConstituentParticleData::initConstituentParticleData; void ConstituentParticleData::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::ConstituentParticleData class"); static Parameter interfaceMass ("ConstituentMass", "The constituent mass of the particle in GeV.", &ConstituentParticleData::theConstituentMass, GeV, ZERO, ZERO, Constants::MaxEnergy, false, false, Interface::lowerlim, &ConstituentParticleData::setConstituentMass, 0, 0, 0, &ConstituentParticleData::defConstituentMass); interfaceMass.rank(11.5); } thepeg-1.8.0.orig/PDT/MassGenerator.fh0000644000175000017500000000047611747772425015676 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_MassGenerator_FH #define ThePEG_MassGenerator_FH // // This is the forward declaration of the MassGenerator class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class MassGenerator; ThePEG_DECLARE_POINTERS(MassGenerator,MassGenPtr); } #endif /* ThePEG_MassGenerator_FH */ thepeg-1.8.0.orig/PDT/FlatDecayer.h0000644000175000017500000000751711747772425015144 0ustar sunsun// -*- C++ -*- // // FlatDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_FlatDecayer_H #define ThePEG_FlatDecayer_H // This is the declaration of the FlatDecayer class. #include "ThePEG/PDT/Decayer.h" namespace ThePEG { /** * The FlatDecayer class inrerits from the abstract Decayer class and * implements the decay of a given Particle to a given set of children * according to a flat phase space distribution. * * It is possible to implement a more complicated decay distribution * by inheriting from the FlatDecayer class and only override the * virtual function reweight() to return a weight (between zero and * one) of a given phase space point relative to the flat * distribution. * * @see \ref FlatDecayerInterfaces "The interfaces" * defined for FlatDecayer. * @see Decayer * @see Particle */ class FlatDecayer: public Decayer { public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; /** * Give a weight to a phase space point. To be overridden by * subclasses. For a given decay mode, \a dm, decaying \a parent * particle and decayproducts, \a children, distributed according to * a flat distribution in phase space, return a weight (less or * equal to unity) modifying the flat distribution to the desired * one. Note that the chosen phase space point may be rejected, but * the chosen decay channel will not. This means that the weight * returned by this function does not influence the branching * ratios. For the FlatDecayer class this function simply returns 1. */ virtual double reweight(const DecayMode &, const Particle & , const ParticleVector & ) const { return 1.0; } //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initFlatDecayer; /** * Private and non-existent assignment operator. */ FlatDecayer & operator=(const FlatDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of FlatDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of FlatDecayer. */ typedef Decayer NthBase; }; /** This template specialization informs ThePEG about the name of the * FlatDecayer class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::FlatDecayer"; } }; /** @endcond */ } #endif /* ThePEG_FlatDecayer_H */ thepeg-1.8.0.orig/PDT/DecayMode.cc0000644000175000017500000005325511747772425014751 0ustar sunsun// -*- C++ -*- // // DecayMode.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DecayMode class. // #include "DecayMode.h" #include "DecayMode.xh" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Utilities/EnumIO.h" using namespace ThePEG; DecayMode::DecayMode() : theBrat(0.0), isOn(false) {} DecayMode::DecayMode(tPDPtr newParticle, double newBrat, bool newOn) : theBrat(newBrat), isOn(newOn), theParent(newParticle) {} DecayMode::DecayMode(const DecayMode & dm) : Interfaced(dm), theTag(dm.theTag), theBrat(dm.theBrat), isOn(dm.isOn), theParent(dm.theParent), theProducts(dm.theProducts), theOrderedProducts(dm.theOrderedProducts), theCascadeProducts(dm.theCascadeProducts), theMatchers(dm.theMatchers), theWildMatcher(dm.theWildMatcher), theExcluded(dm.theExcluded), theOverlap(dm.theOverlap), theDecayer(dm.theDecayer), theAntiPartner(dm.theAntiPartner), theLinks(dm.theLinks) {} DecayMode::~DecayMode() {} DMPtr DecayMode::Create(tPDPtr newParent, double newBrat, bool newOn) { DMPtr dm = new_ptr(DecayMode(newParent, newBrat, newOn)); Repository::Register(dm, newParent->fullName() + "/NEWMODE"); if ( !newParent->CC() ) return dm; DMPtr adm = new_ptr(DecayMode(newParent->CC(), newBrat, newOn)); Repository::Register(adm, newParent->CC()->fullName() + "/NEWMODE"); dm->theAntiPartner = adm; adm->theAntiPartner = dm; return dm; } void DecayMode::readSetup(istream & is) { string decnam; is >> theBrat >> ienum(isOn) >> decnam; if ( decnam.empty() ) return; BaseRepository::DirectoryAppend(decnam); setDecayer(BaseRepository::GetObject(decnam)); } IBPtr DecayMode::clone() const { return dmclone(); } DMPtr DecayMode::dmclone() const { return new_ptr(*this); } IBPtr DecayMode::fullclone() const { DMPtr dm = dmclone(); Repository::Register(dm); if ( !CC() ) return dm; DMPtr adm = CC()->dmclone(); Repository::Register(adm); dm->theAntiPartner = adm; adm->theAntiPartner = dm; return dm; } void DecayMode::doupdate() { Interfaced::doupdate(); bool redo = touched(); UpdateChecker::check(decayer(), redo); if ( !redo ) return; if ( theBrat > 0.0 && isOn && !decayer()->accept(*this) ) throw DecModNoAccept(tag(), decayer()->name()); } void DecayMode::rebind(const TranslationMap & trans) { try { theParent = trans.alwaysTranslate(theParent); ParticleMSet newProducts; trans.alwaysTranslate(inserter(newProducts), products().begin(), products().end()); products().swap(newProducts); tPDVector newOrdered; trans.alwaysTranslate(inserter(newOrdered), orderedProducts().begin(), orderedProducts().end()); theOrderedProducts.swap(newOrdered); ModeMSet newCasc; trans.alwaysTranslate(inserter(newCasc), cascadeProducts().begin(), cascadeProducts().end()); cascadeProducts().swap(newCasc); MatcherMSet newMatchers; trans.alwaysTranslate(inserter(newMatchers), productMatchers().begin(), productMatchers().end()); productMatchers().swap(newMatchers); wildProductMatcher() = trans.alwaysTranslate(wildProductMatcher()); ParticleMSet newExclude; trans.alwaysTranslate(inserter(newExclude), excluded().begin(), excluded().end()); excluded().swap(newExclude); theAntiPartner = trans.alwaysTranslate(CC()); for ( int i = 0, N = theLinks.size(); i < N; ++i ) { theLinks[i].first = trans.alwaysTranslate(theLinks[i].first); theLinks[i].second = trans.alwaysTranslate(theLinks[i].second); } } catch (IBPtr ip) { throw DecModRebind(name(), ip->name()); } catch (...) { throw DecModRebind(name(), ""); } } IVector DecayMode::getReferences() { IVector ret; ret.push_back(theParent); ret.insert(ret.end(), products().begin(), products().end()); ret.insert(ret.end(), cascadeProducts().begin(), cascadeProducts().end()); ret.insert(ret.end(), productMatchers().begin(), productMatchers().end()); if ( wildProductMatcher() ) ret.push_back(wildProductMatcher()); ret.insert(ret.end(), excluded().begin(), excluded().end()); if ( CC() ) ret.push_back(CC()); return ret; } bool DecayMode::addOverlap(tcDMPtr d) { bool inc = includes(*d); if ( !inc ) return false; if ( find(theOverlap.begin(), theOverlap.end(), d) != theOverlap.end() ) return true; theOverlap.push_back(d); return true; } void DecayMode::resetOverlap() { theOverlap.clear(); } bool DecayMode:: compareId(const ParticleMSet & s1, const ParticleMSet & si2) const { if ( generator() ) return s1 == si2; ParticleMSet s2 = si2; for ( ParticleMSet::const_iterator p1 = s1.begin(); p1 != s1.end(); ++p1 ) { ParticleMSet::const_iterator p2 = s2.begin(); while ( p2 != s2.end() && (**p2).id() != (**p1).id() ) ++p2; if ( p2 == s2.end() ) return false; s2.erase(p2); } return s2.empty(); } ParticleMSet::const_iterator DecayMode::findId(const ParticleMSet & s, const ParticleData & p) const { for ( ParticleMSet::const_iterator pit = s.begin(); pit != s.end(); ++pit ) if ( (**pit).id() == p.id() ) return pit; return s.end(); } struct IdCmp { bool operator()(tcPDPtr p1, tcPDPtr p2) { return p1->id() == p2->id(); } }; bool DecayMode::includes(const DecayMode & d) const { // Fast check for ordinary decay modes. if ( cascadeProducts().empty() && productMatchers().empty() && excluded().empty() && !wildProductMatcher() && d.cascadeProducts().empty() && d.productMatchers().empty() && d.excluded().empty() && !d.wildProductMatcher() ) { if ( links().size() != d.links().size() ) return false; if ( !compareId(products(), d.products()) ) return false; LinkVector dlinks = d.links(); for ( int i = 0, N = links().size(); i < N; ++i ) { for ( int j = 0, M = dlinks.size(); j < M; ++j ) { if ( ( links()[i].first->id() == dlinks[j].first->id() && links()[i].second->id() == dlinks[j].second->id() ) || ( links()[i].first->id() == dlinks[j].second->id() && links()[i].second->id() == dlinks[j].first->id() ) ) { dlinks.erase(dlinks.begin() + j); break; } } return false; } return dlinks.empty(); } // First check that none of the excluded products in this are // present in the other. ParticleMSet::const_iterator pit; for ( pit = excluded().begin(); pit != excluded().end(); ++pit ) { if ( findId(d.products(), **pit ) != d.products().end() ) return false; for ( ModeMSet::const_iterator mit = d.cascadeProducts().begin(); mit != d.cascadeProducts().end(); ++mit ) if ( (**pit).id() == (**mit).parent()->id() ) return false; } // Check that all cascade decays in this overlaps with one in the // other. Save the ones that are left ModeMSet cascleft = d.cascadeProducts(); for ( ModeMSet::iterator mit = cascadeProducts().begin(); mit != cascadeProducts().end(); ++mit ) { ModeMSet::iterator mit2 = cascleft.begin(); while ( mit2 != cascleft.end() && !(**mit).includes(**mit2) ) ++mit2; if ( mit2 == cascleft.end() ) return false; } // Check that all cascade product parents in the other matches // something in this. Otherwise expand the cascade product. ParticleMSet partleft = d.products(); MatcherMSet matchleft = d.productMatchers(); ParticleMSet excludeleft = d.excluded(); MatcherMSet wildleft; if ( d.wildProductMatcher() ) wildleft.insert(wildProductMatcher()); ParticleMSet part = products(); MatcherMSet match = productMatchers(); while ( cascleft.size() ) { ModeMSet::iterator cdmit = cascleft.begin(); cDMPtr cdm = *cdmit; ParticleMSet::iterator pit = findId(part, *(cdm->parent())); if ( pit != part.end() ) { cascleft.erase(cdmit); part.erase(pit); } else { MatcherMSet::iterator mit = match.begin(); while ( mit != match.end() && !(**mit).matches(*(cdm->parent())) ) ++mit; if ( mit != match.end() ) { cascleft.erase(cdmit); match.erase(mit); } else { if ( wildProductMatcher() && wildProductMatcher()->matches(*(cdm->parent())) ) { cascleft.erase(cdmit); } else { cascleft.erase(cdmit); partleft.insert(cdm->products().begin(), cdm->products().end()); matchleft.insert(cdm->productMatchers().begin(), cdm->productMatchers().end()); if ( cdm->wildProductMatcher() ) wildleft.insert(cdm->wildProductMatcher()); excludeleft.insert(cdm->excluded().begin(), cdm->excluded().end()); cascleft.insert(cdm->cascadeProducts().begin(), cdm->cascadeProducts().end()); } } } } // Check that all excluded left in the other are absent in this. if ( find_first_of(excludeleft.begin(), excludeleft.end(), part.begin(), part.end(), IdCmp()) != excludeleft.end() ) return false; // Now all particles and matches left in this must match something // in the other. pit = part.begin(); while ( pit != part.end() ) { ParticleMSet::iterator pit2 = findId(partleft, **pit++); if ( pit2 == partleft.end() ) return false; partleft.erase(pit2); } MatcherMSet::const_iterator pmit = match.begin(); while ( pmit != match.end() ) { ParticleMSet::iterator pit2 = partleft.begin(); while ( pit2 != partleft.end() && ! (**pmit).matches(**pit2) ) ++pit2; if ( pit2 != partleft.end() ) { partleft.erase(pit2); } else { MatcherMSet::iterator pmit2 = matchleft.begin(); while ( pmit2 != matchleft.end() && ! (**pmit).matches(**pmit2) ) ++pmit2; if ( pmit2 != matchleft.end() ) { matchleft.erase(pmit2); } else return false; } } // Now all particles and matchers left in the other must be matched // by the wild match in this. if ( wildProductMatcher() ) { pit = partleft.begin(); while ( pit != partleft.end() ) if ( !(wildProductMatcher()->matches(**pit++)) ) return false; pmit = matchleft.begin(); while (pmit != matchleft.end() ) if ( !(wildProductMatcher()->matches(**pmit++)) ) return false; pmit = wildleft.begin(); while (pmit != wildleft.end() ) if ( !(wildProductMatcher()->matches(**pmit++)) ) return false; } else return partleft.empty() && matchleft.empty() && wildleft.empty(); return true; } DMPtr DecayMode::clone(tPDPtr pd) const { DMPtr dm = dmclone(); dm->theParent = pd; Repository::Register(dm, pd->fullName() + "/" + dm->name()); if ( !theDecayer || !theDecayer->accept(*dm) ) dm->isOn = false; if ( pd->CC() ) { DMPtr adm = CC()? CC()->dmclone(): dmclone(); adm->theParent = pd->CC(); Repository::Register(adm, pd->CC()->fullName() + "/" + adm->name()); dm->theAntiPartner = adm; adm->theAntiPartner = dm; if ( !adm->theDecayer->accept(*adm) ) adm->isOn = false; } else dm->theAntiPartner = DMPtr(); return dm; } void DecayMode::synchronize() { if ( !CC() ) return; theBrat = CC()->theBrat; isOn = CC()->isOn; theDecayer = CC()->theDecayer; } struct ParticleOrdering { bool operator()(tcPDPtr p1, tcPDPtr p2) { return abs(p1->id()) > abs(p2->id()) || ( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) || ( p1->id() == p2->id() && p1->fullName() > p2->fullName() ); } }; struct ModeOrdering { bool operator()(tcDMPtr d1, tcDMPtr d2) { ParticleOrdering ord; return ord(d1->parent(), d2->parent()) || ( !ord(d2->parent(), d1->parent()) && ( d1->tag() < d2->tag() || ( d1->tag() == d2->tag() && d1->fullName() < d2->fullName() ) ) ); } }; struct MatcherOrdering { bool operator()(tcPMPtr m1, tcPMPtr m2) { return m1->name() < m2->name() || ( m1->name() == m2->name() && m1->fullName() < m2->fullName() ); } }; PVector DecayMode::produceProducts() const { PVector ret; for ( int i = 0, N = orderedProducts().size(); i < N; ++i ) ret.push_back(orderedProducts()[i]->produceParticle()); return ret; } string DecayMode::makeTag() const { string ret; typedef multiset OrderedParticles; typedef multiset OrderedMatchers; typedef multiset OrderedModes; LinkVector dlinks = links(); ret = theParent->PDGName() + "->"; OrderedParticles prod(products().begin(), products().end()); while ( !prod.empty() ) { OrderedParticles::iterator pit = prod.begin(); for ( int i = 0, N = dlinks.size(); i < N; ++i ) { if ( *pit == dlinks[i].second ) swap(dlinks[i].first, dlinks[i].second); if ( *pit == dlinks[i].first ) { ret += (**pit).PDGName() + "="; prod.erase(pit); pit = prod.end(); OrderedParticles::iterator pitl = prod.find(dlinks[i].second); ret += (**pitl).PDGName() + ","; prod.erase(pitl); dlinks.erase(dlinks.begin() + i); break; } } if ( pit != prod.end() ) { ret += (**pit).PDGName() + ","; prod.erase(pit); } } OrderedModes casc(cascadeProducts().begin(), cascadeProducts().end()); for ( OrderedModes::iterator dmit = casc.begin();dmit != casc.end(); ++dmit ) ret += "[" + (**dmit).tag() + "],"; OrderedMatchers match(productMatchers().begin(), productMatchers().end()); for ( OrderedMatchers::iterator mit = match.begin(); mit != match.end(); ++mit ) ret += "?" +(**mit).name() + ","; if ( theWildMatcher ) ret += "*" + theWildMatcher->name() + ","; OrderedParticles ex(excluded().begin(), excluded().end()); for ( OrderedParticles::iterator pit = ex.begin(); pit != ex.end(); ++pit ) ret += "!" + (**pit).PDGName() + ","; ret[ret.size()-1] = ';'; return ret; } void DecayMode::brat(double newBrat) { theBrat = newBrat; if ( theBrat <= 0.0 ) switchOff(); if ( CC() && parent()->synchronized() ) CC()->theBrat = newBrat; } double DecayMode::brat() const { return isOn? theDecayer->brat(*this, *theParent, theBrat): 0.0; } double DecayMode::brat(const Particle & p) const { return isOn && p.dataPtr() == parent()? theDecayer->brat(*this, p, theBrat): 0.0; } void DecayMode::switchOn() { isOn = true; if ( CC() && parent()->synchronized() ) CC()->isOn = true; } void DecayMode::switchOff() { isOn = false; if ( CC() && parent()->synchronized() ) CC()->isOn = false; } void DecayMode::addProduct(tPDPtr pd) { products().insert(pd); theOrderedProducts.push_back(pd); if ( CC() ) { CC()->products().insert(pd->CC()? pd->CC(): pd); CC()->theOrderedProducts.push_back(pd->CC()? pd->CC(): pd); } resetTag(); } void DecayMode::addLink(tPDPtr a, tPDPtr b) { theLinks.push_back(make_pair(a, b)); if ( CC() ) CC()->theLinks.push_back(make_pair(a->CC()? a->CC(): a, b->CC()? b->CC(): b)); resetTag(); } void DecayMode::addCascadeProduct(tDMPtr dm) { cascadeProducts().insert(dm); if ( CC() ) CC()->cascadeProducts().insert(dm->CC()? dm->CC(): dm); resetTag(); } void DecayMode::addProductMatcher( tPMPtr pm) { productMatchers().insert(pm); if ( CC() ) CC()->productMatchers().insert(pm->CC()? pm->CC(): pm); resetTag(); } void DecayMode::setWildMatcher(tPMPtr pm) { wildProductMatcher() = pm; if ( CC() ) CC()->wildProductMatcher() = pm->CC()? pm->CC(): pm; resetTag(); } void DecayMode::addExcluded(tPDPtr pd) { excluded().insert(pd); if ( CC() ) CC()->excluded().insert(pd->CC()? pd->CC(): pd); resetTag(); } void DecayMode::decayer(tDecayerPtr dec) { if ( !dec || !dec->accept(*this) ) throw DecModSetupNoAccept(tag(), dec->name()); if ( CC() && parent()->synchronized() ) { if ( !dec->accept(*CC()) ) throw DecModSetupNoAccept(CC()->tag(), dec->name()); CC()->theDecayer = dec; } theDecayer = dec; } DMPtr DecayMode::constructDecayMode(string & tag, vector * save) { DMPtr rdm; DMPtr adm; int level = 0; string::size_type end = 0; while ( end < tag.size() && ( tag[end] != ']' || level ) ) { switch ( tag[end++] ) { case '[': ++level; break; case ']': --level; break; } } string::size_type next = tag.find("->"); if ( next == string::npos ) return rdm; if ( tag.find(';') == string::npos ) return rdm; tPDPtr pd = Repository::findParticle(tag.substr(0,next)); if ( !pd ) return rdm; rdm = ptr_new(); rdm->parent(pd); if ( pd->CC() ) { adm = ptr_new(); adm->parent(pd->CC()); rdm->theAntiPartner = adm; adm->theAntiPartner = rdm; } bool error = false; tag = tag.substr(next+2); tPDPtr lastprod; bool dolink = false; do { switch ( tag[0] ) { case '[': { tag = tag.substr(1); DMPtr cdm = constructDecayMode(tag, save); if ( save ) save->push_back(cdm); if ( cdm ) rdm->addCascadeProduct(cdm); else error = true; } break; case '=': dolink = true; case ',': case ']': tag = tag.substr(1); break; case '?': { next = min(tag.find(','), tag.find(';')); tPMPtr pm = Repository::findMatcher(tag.substr(1,next-1)); if ( pm ) rdm->addProductMatcher(pm); else error = true; tag = tag.substr(next); } break; case '!': { next = min(tag.find(','), tag.find(';')); tPDPtr pd = Repository::findParticle(tag.substr(1,next-1)); if ( pd ) rdm->addExcluded(pd); else error = true; tag = tag.substr(next); } break; case '*': { next = min(tag.find(','), tag.find(';')); tPMPtr pm = Repository::findMatcher(tag.substr(1,next-1)); if ( pm ) rdm->setWildMatcher(pm); else error = true; tag = tag.substr(next); } break; default: { next = min(tag.find('='), min(tag.find(','), tag.find(';'))); tPDPtr pdp = Repository::findParticle(tag.substr(0,next)); if ( pdp ) rdm->addProduct(pdp); else error = true; tag = tag.substr(next); if ( dolink && lastprod ) { rdm->addLink(lastprod, pdp); dolink = false; } lastprod = pdp; } break; } } while ( tag[0] != ';' && tag.size() ); if ( tag[0] != ';' || error ) { return DMPtr(); } tag = tag.substr(1); for ( DecaySet::const_iterator dit = pd->decayModes().begin(); dit != pd->decayModes().end(); ++dit ) if ( (**dit).tag() == rdm->tag() ) return *dit; if ( save ) { save->push_back(rdm); save->push_back(adm); } else { pd->addDecayMode(rdm); Repository::Register(rdm, pd->fullName() + "/" + rdm->tag()); if ( adm ) Repository::Register(adm, pd->CC()->fullName() + "/" + adm->tag()); } return rdm; } void DecayMode::persistentOutput(PersistentOStream & os) const { multiset prod(products().begin(), products().end()); multiset casc(cascadeProducts().begin(), cascadeProducts().end()); multiset match(productMatchers().begin(), productMatchers().end()); multiset ex(excluded().begin(), excluded().end()); multiset ovlap(overlap().begin(), overlap().end()); os << theTag << theBrat << isOn << theParent << prod << theOrderedProducts << casc << match << theWildMatcher << ex << ovlap << theDecayer << theAntiPartner << theLinks; } void DecayMode::persistentInput(PersistentIStream & is, int) { is >> theTag >> theBrat >> isOn >> theParent >> theProducts >> theOrderedProducts >> theCascadeProducts >> theMatchers >> theWildMatcher >> theExcluded >> theOverlap >> theDecayer >> theAntiPartner >> theLinks; } ClassDescription DecayMode::initDecayMode; void DecayMode::setOn(long i) { isOn = i; } long DecayMode::getOn() const { return isOn; } void DecayMode::setDecayer(DecayerPtr dp) { decayer(dp); } void DecayMode::Init() { static ClassDocumentation documentation ("Represents a specific decay channel of a particle."); static Parameter interfaceBrat ("BranchingRatio", "The branching fraction for this decay mode. Note that if the sum of " "branching ratios for one particle is always renormalized to 1. Also, " "the decaying particle may change this branching ratio if it has a " "ThePEG::WidthGenerator object assigned to it. ", &DecayMode::theBrat, 0.0, 0.0, 1.0, false, false, true); interfaceBrat.setHasDefault(false); static Switch interfaceOn ("OnOff", "Indicates if the decay mode is switched on or off.", 0, 0, false, false, &DecayMode::setOn, &DecayMode::getOn); static SwitchOption interfaceOnYes (interfaceOn, "On", "The decay channel is switched on.", 1); static SwitchOption interfaceOnNo (interfaceOn, "Off", "The decay channel is switched off.", 0); interfaceOn.setHasDefault(false); static Reference interfaceDecayer ("Decayer", "The ThePEG::Decayer object responsible for performing this decay.", &DecayMode::theDecayer, false, false, true, false, &DecayMode::setDecayer); interfaceBrat.rank(10); interfaceDecayer.rank(9); interfaceOn.rank(8); } DecModNoAccept::DecModNoAccept(string tag, string dec) { theMessage << "The Decayer '" << dec << "' is not capable to " << "perform the decay in the DecayMode '" << tag << "'."; severity(warning); } DecModSetupNoAccept::DecModSetupNoAccept(string tag, string dec) { theMessage << "The Decayer '" << dec << "' is not capable to " << "perform the decay in the DecayMode '" << tag << "'."; severity(warning); } DecModRebind::DecModRebind(string tag, string obj) { theMessage << "'Rebind' of DecayMode '" << tag << "' failed because " << "the object '" << obj << "' refered to lacked a translation."; severity(abortnow); } ThePEG_IMPLEMENT_MULTISET(tPDPtr,ParticleMSet) ThePEG_IMPLEMENT_MULTISET(tPMPtr,MatcherMSet) ThePEG_IMPLEMENT_MULTISET(tDMPtr,ModeMSet) thepeg-1.8.0.orig/PDT/WidthGenerator.h0000644000175000017500000000620411747772425015677 0ustar sunsun// -*- C++ -*- // // WidthGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_WidthGenerator_H #define ThePEG_WidthGenerator_H // This is the declaration of the WidthGenerator class. #include "ThePEG/Config/ThePEG.h" #include "WidthGenerator.fh" #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Utilities/Selector.h" #include "ThePEG/PDT/DecayMode.fh" namespace ThePEG { /** * WidthGenerator is an abstract base class to be used to encapsulate * models for giving the partial decay width of a ParticleData given * the specified DecayModes. * * @see \ref WidthGeneratorInterfaces "The interfaces" * defined for WidthGenerator. * @see ParticleData * @see DecayMode */ class WidthGenerator: public Interfaced { public: /** A selector of DecayModess weighted by their * branching ratios. */ typedef Selector DecayMap; public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this object can be used for the given particle * type with the given decay map. */ virtual bool accept(const ParticleData &) const = 0; /** * Given a Particle, calculate a width. */ Energy width(const Particle &) const; /** * Given a particle type and a mass of an instance of that particle * type, calculate a width. */ virtual Energy width(const ParticleData &, Energy m) const = 0; /** * Given a particle type and a mass and a width of an instance of * that particle type, generate a life time. */ virtual Length lifeTime(const ParticleData &, Energy m, Energy w) const; /** * Return decay map for the given particle type. */ virtual DecayMap rate(const ParticleData &) const = 0; /** * Return a decay map for a given Particle instance. */ virtual DecayMap rate(const Particle &); //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initWidthGenerator; /** * Private and non-existent assignment operator. */ WidthGenerator & operator=(const WidthGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of WidthGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of WidthGenerator. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * WidthGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::WidthGenerator"; } }; /** @endcond */ } #endif /* ThePEG_WidthGenerator_H */ thepeg-1.8.0.orig/PDT/V2PPDecayer.h0000644000175000017500000001146111747772425014776 0ustar sunsun// -*- C++ -*- // // V2PPDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_V2PPDecayer_H #define THEPEG_V2PPDecayer_H // This is the declaration of the V2PPDecayer class. #include "ThePEG/PDT/FlatDecayer.h" namespace ThePEG { /** * The V2PPDecayer class performs the decay of a vector meson into two * pseudo-scalars according to a flat phase space. If, however the * decaying particle comes from a pseudo-scalar and has only one * sibling which is a pseudo-scalar (or a photon) the decay is * reweighted with \f$\cos^2\f$ (\f$\sin^2\f$ for photon) of the angle * between one of the decay products and its grand parent. * * @see \ref V2PPDecayerInterfaces "The interfaces" * defined for V2PPDecayer. * @see FlatDecayer * @see ParticleData */ class V2PPDecayer: public FlatDecayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~V2PPDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; /** * Give a weight to a phase space point. To be overridden by * subclasses. For a given decay mode, \a dm, decaying \a parent * particle and decayproducts, \a children, distributed according to * a flat distribution in phase space, return a weight (less or * equal to unity) modifying the flat distribution to the desired * one. Note that the chosen phase space point may be rejected, but * the chosen decay channel will not. This means that the weight * returned by this function does not influence the branching * ratios. */ virtual double reweight(const DecayMode & dm, const Particle & parent, const ParticleVector & children) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The grand parent in case reweighting should be done. */ mutable tPPtr grandParent; /** * The decaying particles sibling in case reweighting should be done. */ mutable tPPtr sibling; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initV2PPDecayer; /** * Private and non-existent assignment operator. */ V2PPDecayer & operator=(const V2PPDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of V2PPDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of . */ typedef FlatDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * V2PPDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::V2PPDecayer"; } /** Return the name of the shared library be loaded to get access to * the V2PPDecayer class and every other class it uses * (except the base class). */ static string library() { return "V2PPDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_V2PPDecayer_H */ thepeg-1.8.0.orig/PDT/Onium3GDecayer.h0000644000175000017500000001226211747772425015530 0ustar sunsun// -*- C++ -*- // // Onium3GDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_Onium3GDecayer_H #define THEPEG_Onium3GDecayer_H // This is the declaration of the Onium3GDecayer class. #include "ThePEG/PDT/FlatDecayer.h" namespace ThePEG { /** * The Onium3GDecayer class inherits from performs FlatDecayer and * will reweight the flat phase space suitable to describe the decay * of a spin-1 onium resonance into three gluons or two gluons and a * photon. After the decay the collision handler is instructed to * restart the generation from the hadronization (or optionally the * parton cascade) stage. * * @see \ref Onium3GDecayerInterfaces "The interfaces" * defined for Onium3GDecayer. * @see FlatDecayer * @see ParticleData */ class Onium3GDecayer: public FlatDecayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ Onium3GDecayer() : doShower(true), theMinGGMass(2.0*GeV) {} /** * Destructor. */ virtual ~Onium3GDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; /** * Give a weight to a phase space point. To be overridden by * subclasses. For a given decay mode, \a dm, decaying \a parent * particle and decayproducts, \a children, distributed according to * a flat distribution in phase space, return a weight (less or * equal to unity) modifying the flat distribution to the desired * one. Note that the chosen phase space point may be rejected, but * the chosen decay channel will not. This means that the weight * returned by this function does not influence the branching * ratios. */ virtual double reweight(const DecayMode & dm, const Particle & parent, const ParticleVector & children) const; //@} /** * Return true if the produced gluons should be showered. */ bool shower() const { return doShower; } /** * Return the minimum invariant mass between two gluons in gamma-g-g * decays. */ Energy minGGMass() const { return theMinGGMass; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * If true the produced gluons should be showered. */ bool doShower; /** * The minimum invariant mass between two gluons in gamma-g-g * decays. */ Energy theMinGGMass; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initOnium3GDecayer; /** * Private and non-existent assignment operator. */ Onium3GDecayer & operator=(const Onium3GDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of Onium3GDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Onium3GDecayer. */ typedef FlatDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * Onium3GDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Onium3GDecayer"; } /** Return the name of the shared library be loaded to get access to * the Onium3GDecayer class and every other class it uses * (except the base class). */ static string library() { return "Onium3GDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_Onium3GDecayer_H */ thepeg-1.8.0.orig/PDT/PDT.cc0000644000175000017500000000322211747772425013533 0ustar sunsun// -*- C++ -*- // // PDT.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the PDT class. // #include "PDT.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/EventRecord/Particle.h" using namespace ThePEG; vector PDT::flavourContent(long id) { vector ret; if ( id == ParticleID::K_L0 || id == ParticleID::K_S0 ) { ret.push_back(ParticleID::s); ret.push_back(ParticleID::d); } else if ( MesonMatcher::Check(id) ) { ret.push_back((id/100)%10); ret.push_back(-(id/10)%10); } else if ( BaryonMatcher::Check(id) ) { ret.push_back((id/1000)%10); long iqb = (id/100)%10; long iqc = (id/10)%10; if ( abs(iqb) < abs(iqc) ) { ret.push_back(iqc); ret.push_back(iqb); } else { ret.push_back(iqb); ret.push_back(iqc); } } else if ( DiquarkMatcher::Check(id) ) { ret.push_back((id/1000)%10); ret.push_back((id/100)%10); } else if ( abs(id) < 10 ) { ret.push_back(id); } return ret; } vector PDT::flavourContent(tcPDPtr p) { return flavourContent(p->id()); } vector PDT::flavourContent(tcPPtr p) { return flavourContent(p->id()); } vector PDT::flavourContent(const ParticleData & p) { return flavourContent(p.id()); } vector PDT::flavourContent(const Particle & p) { return flavourContent(p.id()); } thepeg-1.8.0.orig/PDT/OmegaPhi3PiDecayer.cc0000644000175000017500000000615011747772425016451 0ustar sunsun// -*- C++ -*- // // OmegaPhi3PiDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the OmegaPhi3PiDecayer class. // #include "OmegaPhi3PiDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr OmegaPhi3PiDecayer::clone() const { return new_ptr(*this); } IBPtr OmegaPhi3PiDecayer::fullclone() const { return new_ptr(*this); } bool OmegaPhi3PiDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() != 3 || !dm.cascadeProducts().empty() || !dm.productMatchers().empty() || dm.wildProductMatcher() ) return false; bool foundp = false, foundm = false, found0 = false; for ( ParticleMSet::const_iterator pit = dm.products().begin(); pit != dm.products().end(); ++pit ) { if ( (**pit).id() == ParticleID::piplus ) foundp = true; else if ( (**pit).id() == ParticleID::piminus ) foundm = true; else if ( (**pit).id() == ParticleID::pi0 ) found0 = true; } return foundp && foundm && found0; } double OmegaPhi3PiDecayer::reweight(const DecayMode &, const Particle & parent, const ParticleVector & children) const { Energy2 m2 = parent.momentum().mass2(); Lorentz5Momentum pp; Lorentz5Momentum pm; Lorentz5Momentum p0; for ( int i = 0, N = children.size(); i < N; ++i ) { if ( children[i]->id() == ParticleID::piplus ) pp = children[i]->momentum(); else if ( children[i]->id() == ParticleID::piminus ) pm = children[i]->momentum(); else if ( children[i]->id() == ParticleID::pi0 ) p0 = children[i]->momentum(); } return (pp.mass2()*pm.mass2()*p0.mass2() + 2.0*(pp*pm)*(pp*p0)*(pm*p0) - pp.mass2()*sqr(pm*p0) - pm.mass2()*sqr(pp*p0) - p0.mass2()*sqr(pp*pm))*margin/(m2*m2*m2); } void OmegaPhi3PiDecayer::persistentOutput(PersistentOStream & os) const { os << margin; } void OmegaPhi3PiDecayer::persistentInput(PersistentIStream & is, int) { is >> margin; } ClassDescription OmegaPhi3PiDecayer::initOmegaPhi3PiDecayer; // Definition of the static class description member. void OmegaPhi3PiDecayer::Init() { static ClassDocumentation documentation ("This class performs the decay of a phi or an omega into pi+ pi- " "p0. It will in fact decay anything into pi+ pi- p0 assuming the " "same matrix element."); static Parameter interfaceMargin ("Margin", "Used to multiply the bare weight to get something below unity. " "In the Fortran pythia version it was set to 150 for unknown reasons.", &OmegaPhi3PiDecayer::margin, 150.0, 0.0, 1000.0, true, false, true); } thepeg-1.8.0.orig/PDT/Matcher.tcc0000644000175000017500000000270711747772425014662 0ustar sunsun// -*- C++ -*- // // Matcher.tcc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined templated member // functions of the Matcher class. // namespace ThePEG { template Matcher::~Matcher() { if ( !initMatcher.check() ) throw int(); } template NoPIOClassDescription< Matcher > Matcher::initMatcher; template PMPtr Matcher::Create(const string & newName, string antiName) { typedef typename Ptr< Matcher >::pointer MatcherPtr; typedef typename Ptr< Matcher >::pointer AMatcherPtr; PMPtr pm = new_ptr(); registerRepository(pm, newName); if ( typeid(T) == typeid(typename T::CC) ) return pm; if ( antiName.empty() ) antiName = newName + "~"; PMPtr apm = new_ptr(); setCC(pm, apm); registerRepository(apm, antiName); return pm; } template PMPtr Matcher::pmclone() const { return new_ptr(*this); } template IBPtr Matcher::clone() const { return pmclone(); } template IBPtr Matcher::fullclone() const { PMPtr pm = pmclone(); registerRepository(pm); if ( !CC() ) return pm; PMPtr apm = CC()->pmclone(); setCC(pm, apm); registerRepository(apm); return pm; } } thepeg-1.8.0.orig/PDT/MassGenerator.cc0000644000175000017500000000141511747772425015660 0ustar sunsun// -*- C++ -*- // // MassGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MassGenerator class. // #include "MassGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; AbstractNoPIOClassDescription MassGenerator::initMassGenerator; void MassGenerator::Init() { static ClassDocumentation documentation ("This is the base class for models giving specific masses to particle " "instances."); } thepeg-1.8.0.orig/PDT/DecayMode.fh0000644000175000017500000000036611747772425014754 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_DecayMode_FH #define ThePEG_DecayMode_FH // // This is the forward declaration of the DecayMode class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class DecayMode; } #endif /* ThePEG_DecayMode_FH */ thepeg-1.8.0.orig/PDT/Tau2HadronsDecayer.cc0000644000175000017500000000454711747772425016546 0ustar sunsun// -*- C++ -*- // // Tau2HadronsDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Tau2HadronsDecayer class. // #include "Tau2HadronsDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; Tau2HadronsDecayer::~Tau2HadronsDecayer() {} IBPtr Tau2HadronsDecayer::clone() const { return new_ptr(*this); } IBPtr Tau2HadronsDecayer::fullclone() const { return new_ptr(*this); } bool Tau2HadronsDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() < 3 || !dm.cascadeProducts().empty() || !dm.productMatchers().empty() || dm.wildProductMatcher() ) return false; if ( abs(dm.parent()->id()) != ParticleID::tauminus ) return false; for ( ParticleMSet::const_iterator pit = dm.products().begin(); pit != dm.products().end(); ++pit ) if ( (**pit).id()*dm.parent()->id() == ParticleID::tauminus*ParticleID::nu_tau ) return true; return false; } double Tau2HadronsDecayer::reweight(const DecayMode &, const Particle & parent, const ParticleVector & children) const { tPPtr nu; for ( int i = 0, N = children.size(); i < N; ++i ) if ( parent.id()*children[i]->id() == ParticleID::tauminus*ParticleID::nu_tau ) { nu = children[i]; break; } double xnu = 2.0*nu->momentum().e()/parent.mass(); return 0.5*xnu*(3.0 - xnu); } void Tau2HadronsDecayer::persistentOutput(PersistentOStream &) const {} void Tau2HadronsDecayer::persistentInput(PersistentIStream &, int) {} ClassDescription Tau2HadronsDecayer::initTau2HadronsDecayer; // Definition of the static class description member. void Tau2HadronsDecayer::Init() { static ClassDocumentation documentation ("This class will perform the decays of tau to neutrimo + hadrons " "according to phase space, with an extra weight xnu(3-nxu)."); } thepeg-1.8.0.orig/PDT/BreitWignerMass.h0000644000175000017500000000375411747772425016025 0ustar sunsun// -*- C++ -*- // // BreitWignerMass.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_BreitWignerMass_H #define ThePEG_BreitWignerMass_H // This is the declaration of the BreitWignerMass class. #include "ThePEG/PDT/MassGenerator.h" namespace ThePEG { /** * BreitWignerMass is derived from MassGenerator and is able to * generate the mass for a particle given its nominal mass and its * with. * * * @see MassGenerator * @see ParticleData * */ class BreitWignerMass: public MassGenerator { public: /** @name Virtual methods required by the MassGenerator base class. */ //@{ /** * Return true if this mass generator can handle the given particle * type. */ virtual bool accept(const ParticleData &) const { return true; } /** * Generate a mass for an instance of a given particle type. */ virtual Energy mass(const ParticleData &) const; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe concrete class without persistent data. */ static NoPIOClassDescription initBreitWignerMass; /** * Private and non-existent assignment operator. */ BreitWignerMass & operator=(const BreitWignerMass &); }; /** @cond TRAITSPECIALIZATIONS */ ThePEG_DECLARE_DYNAMIC_CLASS_TRAITS(BreitWignerMass,MassGenerator,"BreitWignerMass.so"); /** @endcond */ } #endif /* ThePEG_BreitWignerMass_H */ thepeg-1.8.0.orig/PDT/MixedParticleData.h0000644000175000017500000001661311747772425016302 0ustar sunsun// -*- C++ -*- #ifndef THEPEG_MixedParticleData_H #define THEPEG_MixedParticleData_H // // This is the declaration of the MixedParticleData class. // #include "ParticleData.h" #include "MixedParticleData.fh" namespace ThePEG { /** * The MixedParticleData class is designed to store the * particle data for particles which undergo mixing with their * anti-particle, e.g. \f$B^0-\bar{B}^0\f$, \f$B_s^0-\bar{B}_s^0\f$, * \f$D^0-\bar{D}^0\f$. * * The key parameters are the mass difference between the heavier * and lighter states, \f$\Delta m = m_H-m_L\f$, the width difference * \f$\Delta\Gamma = \Gamma_H-\Gamma_L\f$. While the mass difference * is positive by definition the sign of the width difference must be * determined experimentally. It should be noted that because the width * difference is expected to be negative in the Standard Model many * experiment results use the convention * \f$\Delta\Gamma = \Gamma_L - \Gamma_H\f$ so care should be taken. * * In order to be as general as possible we have included the option * of CPT violation, in addition to the violation of CP, in the mixing * in this case the light and heavy eigenstates are given by * \f[|M_L\rangle \propto p \sqrt{1-z}| M^0 \rangle * + q \sqrt{1+z}|\bar{M}^0\rangle,\f] * \f[|M_H\rangle \propto p \sqrt{1+z}| M^0 \rangle * - q \sqrt{1-z}|\bar{M}^0\rangle,\f] * where \f$p\f$, \f$q\f$ and \f$z\f$ are complex parameters with \f$z=0\f$ if CPT * is conserved. * * This gives the time evolution of the states * \f[|M^0_{\rm phys}(t)\rangle = (g_+(t)+zg_-(t))|M^0\rangle * -sqrt{1-z^2}\frac{q}{p}g_-(t)|\bar{M}^0\rangle,\f] * \f[\bar{M}^-_{\rm phys}\rangle = (g_+(t)+zg_-(t))|\bar{M}^0\rangle * -sqrt{1-z^2}\frac{p}{q}g_-(t)|M^0\rangle,\f] * for particles initially in a pure particle or antiparticle state * where * \f[g_\pm(t)=\frac12\left(e^{-im_Ht-\frac12\Gamma_Ht} \pm * e^{-im_Lt-\frac12\Gamma_Lt}\right).\f] * @see \ref MixedParticleDataInterfaces "The interfaces" * defined for MixedParticleData. */ class MixedParticleData: public ParticleData { public: /** * The default constructor. */ MixedParticleData() : ParticleData(), _deltam(0.*GeV), _deltagamma(0.*GeV), _pqmag(1.), _pqphase(0.), _pq(1.,0.), _zmag(0.), _zphase(0.), _z(0.), _x(0.), _y(0.), _prob(make_pair(1.,0.)) {} /** @name The Create methods are special interfaces for ParticleData classes. */ //@{ /** * Create a Particle which is its own anti-particle. */ static PDPtr Create(long newId, string newPDGName); /** * Create a particle - anti particle pair. */ static PDPair Create(long newId, string newPDGName, string newAntiPDGName); //@} public: /** * Mixing parameters */ //@{ /** * The mass difference */ Energy deltaM() const {return _deltam;} /** * The width difference */ Energy deltaGamma() const {return _deltagamma;} /** * \f$p/q\f$ */ Complex pq() const {return _pq;} /** * \f$z\f$ */ Complex z() const {return _z;} /** * The \f$x\f$ mixing variable */ double x() const {return _x;} /** * the \f$y\f$ mixing variable */ double y() const {return _y;} /** * The time-integrated mixing probabilities */ pair prob() const {return _prob;} /** * For a given paricle decide is it undergoes mixing * and generate the lifetime */ pair generateLifeTime() const; /** * The amplitudes for the different states */ pair mixingAmplitudes(Length,bool) const; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** * Protected constructor only to be used by subclasses or by the * Create method. */ MixedParticleData(long newId, string newPDGName); /** * ParticleData clone method */ virtual PDPtr pdclone() const; protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit() throw(InitException); //@} private: /** * Function for the interface to set the mass difference */ void setDeltaM(Energy); /** * Function for the interface to set the width difference */ void setDeltaGamma(Energy); /** * Function for the interface to set the magnitude of p/q */ void setPQMagnitude(double); /** * Function for the interface to set the phase of p/q */ void setPQPhase(double); /** * Function for the interface to set the magnitude of z */ void setZMagnitude(double); /** * Function for the interface to set the phase of z */ void setZPhase(double); private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initMixedParticleData; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ MixedParticleData & operator=(const MixedParticleData &); private: /** * Mixing parameters */ //@{ /** * The mass difference */ Energy _deltam; /** * The width difference */ Energy _deltagamma; /** * The magnitude of \f$p/q\f$ */ double _pqmag; /** * The phase of \f$p/q\f$ */ double _pqphase; /** * \f$p/q\f$ */ Complex _pq; /** * The magnitude of \f$z\f$ */ double _zmag; /** * The phase of \f$z\f$ */ double _zphase; /** * The \f$z\f$ parameter */ Complex _z; /** * The \f$x\f$ mixing variable */ double _x; /** * the \f$y\f$ mixing variable */ double _y; /** * The time-integrated mixing probabilities */ pair _prob; //@} }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of MixedParticleData. */ template <> struct BaseClassTrait { /** Typedef of the first base class of MixedParticleData. */ typedef ParticleData NthBase; }; /** This template specialization informs ThePEG about the name of * the MixedParticleData class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MixedParticleData"; } }; /** @endcond */ } #endif /* THEPEG_MixedParticleData_H */ thepeg-1.8.0.orig/PDT/WeakToHadronsDecayer.h0000644000175000017500000001054511747772425016762 0ustar sunsun// -*- C++ -*- // // WeakToHadronsDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_WeakToHadronsDecayer_H #define THEPEG_WeakToHadronsDecayer_H // This is the declaration of the WeakToHadronsDecayer class. #include "ThePEG/PDT/QuarksToHadronsDecayer.h" namespace ThePEG { /** * The WeakToHadronsDecayer class inherits from QuarksToHadronsDecayer * and can performs weak decays of taus and charmed and bottom * hadrons. The intermediate W can either decay leptonically in which * case standard V-A matrix element is used, or it can decay into * quarks in which case the conversion into quarks is performed as for * the QuarkToHadronsDecayer base class. In both cases the W decay * products should be specified first. The spectator system can either * be specified in terms of hadrons or in terms of quarks which will * be collapsed into a single hadron. * * @see \ref WeakToHadronsDecayerInterfaces "The interfaces" * defined for WeakToHadronsDecayer. */ class WeakToHadronsDecayer: public QuarksToHadronsDecayer { public: /** @name Virtual functions required by the Decayer and QuarksToHadronsDecayer classes. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Called by QuarksToHadronsDecayer::distribute() to reweight the * default flat phase spece. Can be overridden by sub-classes and * should return a number between 0 and 1. This version returns 1. */ virtual double reweight(const Particle & parent, const PVector & children) const; /** * Produce \a Nh hadrons from the specified \a quarks. The last * quark is considered to be a spectator quark. */ virtual PVector getHadrons(int Nh, tcPDVector quarks) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class with persistent data. */ static ClassDescription initWeakToHadronsDecayer; /** * Private and non-existent assignment operator. */ WeakToHadronsDecayer & operator=(const WeakToHadronsDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of WeakToHadronsDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of WeakToHadronsDecayer. */ typedef QuarksToHadronsDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * WeakToHadronsDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::WeakToHadronsDecayer"; } /** Return the name of the shared library be loaded to get access to * the WeakToHadronsDecayer class and every other class it uses * (except the base class). */ static string library() { return "WeakToHadronsDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_WeakToHadronsDecayer_H */ thepeg-1.8.0.orig/PDT/RemnantData.cc0000644000175000017500000000634211747772425015310 0ustar sunsun// -*- C++ -*- // // RemnantData.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RemnantData class. // #include "RemnantData.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/RemnantDecayer.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; RemnantData:: RemnantData(tcPDPtr particle, RemDecPtr dec) // : ParticleData(particle->id(), "Rem:" + particle->PDGName()), : ParticleData(82, "Rem:" + particle->PDGName()), parentPD(particle), theDecayer(dec) { synchronized(false); width(ZERO); widthCut(ZERO); iCharge(particle->iCharge()); iSpin(particle->iSpin()); iColour(particle->iColour()); stable(true); fixColour(); } IBPtr RemnantData::clone() const { return new_ptr(*this); } IBPtr RemnantData::fullclone() const { return new_ptr(*this); } bool RemnantData::extract(tcPDPtr parton) { if ( !decayMode ) { stable(false); decayMode = new_ptr(DecayMode()); decayMode->parent(this); decayMode->brat(1.0); decayMode->decayer(theDecayer); decayMode->switchOn(); addDecayMode(decayMode); } if ( !parton ) return false; // if ( !extracted.empty() && !decayer->multiCapable() ) return false; if ( !theDecayer->canHandle(parentPD, parton) ) return false; extracted.insert(parton); iCharge(PDT::Charge(iCharge() - parton->iCharge())); return fixColour(); } bool RemnantData:: reextract(tcPDPtr oldp, tcPDPtr newp) { multiset::iterator it = extracted.find(oldp); if ( it == extracted.end() ) return false; if ( !theDecayer->canHandle(parentPD, newp) ) return false; extracted.erase(it); extracted.insert(newp); iCharge(PDT::Charge(iCharge() + oldp->iCharge() - newp->iCharge())); return fixColour(); } bool RemnantData:: remove(tcPDPtr oldp) { multiset::iterator it = extracted.find(oldp); if ( it == extracted.end() ) return false; extracted.erase(it); iCharge(PDT::Charge(iCharge() + oldp->iCharge())); return fixColour(); } bool RemnantData::fixColour() { bool col = parentPD->hasAntiColour(); bool acol = parentPD->hasColour(); for ( multiset::const_iterator it = extracted.begin(); it != extracted.end(); ++it ) { if ( (**it).hasColour() ) col = true; if ( (**it).hasAntiColour() ) acol = true; } if ( col ) iColour(acol? PDT::Colour8: PDT::Colour3bar); else iColour(acol? PDT::Colour3: PDT::Colour0); return true; } void RemnantData::persistentOutput(PersistentOStream & os) const { os << parentPD << theDecayer << decayMode << extracted; } void RemnantData::persistentInput(PersistentIStream & is, int) { is >> parentPD >> theDecayer >> decayMode >> extracted; } ClassDescription RemnantData::initRemnantData; // Definition of the static class description member. void RemnantData::Init() { static ClassDocumentation documentation ("There is no documentation for the RemnantData class"); } thepeg-1.8.0.orig/PDT/PID.h0000644000175000017500000000277711747772425013400 0ustar sunsun// -*- C++ -*- // // PID.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PID_H #define ThePEG_PID_H #include "EnumParticles.h" namespace ThePEG { /** * PID is a helper class implementing the type of PDG particle ids. At * the moment it just converts to a long, and other conversions are * intercepted. * * @see ParticleData */ class PID { public: /** * Generic construction is disallowed. */ template PID(T t) { t.ERROR_only_use_long_as_Particle_ID_type(); } /** * Casting to generic types is disallowed. */ template operator T() const { T t; t.ERROR_only_use_long_as_Particle_ID_type(); return t; } /** * The negation operator */ PID operator-() const; private: /** * The particle id. */ long id; }; /// Specialized constructor for 'long' template <> inline PID::PID(long t) : id(t) {} /// Specialized constructor for 'int' template <> inline PID::PID(int t) : id(t) {} /// Specialized constructor for Particle Code enum template <> inline PID::PID(ParticleID::ParticleCodes t) : id(t) {} /// Specialized cast for 'long' template <> inline PID::operator long() const { return id; } /** * The negation operator */ inline PID PID::operator-() const { return -id; } } #endif /* ThePEG_PID_H */ thepeg-1.8.0.orig/PDT/Decayer.cc0000644000175000017500000000762011747772425014466 0ustar sunsun// -*- C++ -*- // // Decayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Decayer class. // #include "Decayer.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Utilities/UtilityBase.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/EventRecord/Step.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/PDT/DecayMode.h" using namespace ThePEG; double Decayer::brat(const DecayMode &, const ParticleData &, double b) const { return b; } ParticleVector Decayer::getChildren(const DecayMode & dm, const Particle &) const { return dm.produceProducts(); } void Decayer::finalBoost(const Particle & parent, const ParticleVector & children) const { Utilities::setMomentum(children.begin(), children.end(), parent.momentum().vect(), 1.0e-12); } void Decayer::setScales(const Particle & parent, const ParticleVector & children) const { for ( ParticleVector::size_type i = 0; i < children.size(); ++i ) children[i]->scale(parent.momentum().mass2()); } double Decayer::brat(const DecayMode &, const Particle &, double b) const { return b; } bool Decayer::needsFullStep() const { return false; } ParticleVector Decayer:: decay(const DecayMode & dm, const Particle & p, Step &) const { return decay(dm, p); } AbstractNoPIOClassDescription Decayer::initDecayer; void Decayer::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::Decayer class"); static Reference interfaceAmplitude ("Amplitude", "The eventual amplitude associated to this decay matrix element.", &Decayer::theAmplitude, false, false, true, true); } void Decayer::persistentOutput(PersistentOStream & os) const { os << theAmplitude; } void Decayer::persistentInput(PersistentIStream & is, int) { is >> theAmplitude; } ParticleVector Decayer::DecayParticle(tPPtr parent, Step & s, long maxtry) { ParticleVector children; if ( !parent ) return children; parent = parent->final(); if ( parent->decayed() ) return children; long itry = 0; while ( true ) { if ( itry++ >= maxtry ) Throw() << "Could not decay particle " << parent->data().PDGName() << " after " << maxtry << " attempts. Giving up." << Exception::eventerror; tDMPtr dm = parent->data().selectMode(*parent); if ( !dm ) Throw() << "Could not decay particle " << parent->data().PDGName() << " since " << " no decay mode was found." << Exception::runerror; if ( !dm->decayer() ) Throw() << "Could not perform the decay " << dm->tag() << " since the decay mode was not associated with a decayer." << Exception::runerror; try { if ( dm->decayer()->needsFullStep() ) children = dm->decayer()->decay(*dm, *parent, s); else children = dm->decayer()->decay(*dm, *parent); if ( !children.empty() ) { parent->decayMode(dm); for ( int i = 0, N = children.size(); i < N; ++i ) if ( !s.addDecayProduct(parent, children[i]) )Throw() << "An error occurred when tryin to decay an unstable particle " << "of type " << parent->data().PDGName() << ". One of the " << "produced children (of type " << children[i]->data().PDGName() << ") could not be added to the current step." << Exception::abortnow; parent->scale(ZERO); return children; } } catch (DecayFailure & e) { throw e; } catch (Veto) {} } } thepeg-1.8.0.orig/PDT/DalitzDecayer.h0000644000175000017500000001124011747772425015471 0ustar sunsun// -*- C++ -*- // // DalitzDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_DalitzDecayer_H #define THEPEG_DalitzDecayer_H // This is the declaration of the DalitzDecayer class. #include "ThePEG/PDT/Decayer.h" // #include "DalitzDecayer.fh" // #include "DalitzDecayer.xh" namespace ThePEG { /** * The DalitzDecayer inherits from the Decayer class and performs * Dalitz decays into \f$\gamma e^+ e^-\f$. * * @see \ref DalitzDecayerInterfaces "The interfaces" * defined for DalitzDecayer. */ class DalitzDecayer: public Decayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~DalitzDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} private: /** * Quick access to the rho particle data. */ PDPtr rho; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initDalitzDecayer; /** * Private and non-existent assignment operator. */ DalitzDecayer & operator=(const DalitzDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of DalitzDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of DalitzDecayer. */ typedef Decayer NthBase; }; /** This template specialization informs ThePEG about the name of the * DalitzDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::DalitzDecayer"; } /** Return the name of the shared library be loaded to get access to * the DalitzDecayer class and every other class it uses * (except the base class). */ static string library() { return "DalitzDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_DalitzDecayer_H */ thepeg-1.8.0.orig/PDT/WidthGenerator.cc0000644000175000017500000000244411747772425016037 0ustar sunsun// -*- C++ -*- // // WidthGenerator.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the WidthGenerator class. // #include "WidthGenerator.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Repository/UseRandom.h" using namespace ThePEG; Length WidthGenerator::lifeTime(const ParticleData &, Energy, Energy w) const { return UseRandom::rndExp(hbarc/w); } WidthGenerator::DecayMap WidthGenerator::rate(const Particle & p) { DecayMap dm(p.data().decaySelector()); return dm; } Energy WidthGenerator::width(const Particle & p) const { return width(p.data(), p.mass()); } AbstractNoPIOClassDescription WidthGenerator::initWidthGenerator; void WidthGenerator::Init() { static ClassDocumentation documentation ("Abstract base class to be used to encapsulate models for giving the " "partial decay width of a ParticleData given the specified DecayModes."); } thepeg-1.8.0.orig/PDT/StandardMatchers.h0000644000175000017500000002722011747772425016201 0ustar sunsun// -*- C++ -*- // // StandardMatchers.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_StandardMatchers_H #define ThePEG_StandardMatchers_H // This is the declaration of the AnyMatcher, #include "Matcher.h" #include "ThePEG/PDT/EnumParticles.h" namespace ThePEG { /** \file StandardMatchers.h * * This file declare a set of standard matcher classes. The * ChargedMatcher, NegativeMatcher, PositiveMatcher, NeutralMatcher, * BaryonMatcher, MesonMatcher, DiquarkMatcher, LeptonMatcher, * LightAntiQuarkMatcher, LightQuarkMatcher and * StandardQCDPartonMatcher classes can be used by themselves (with * their static functions) or together with the Matcher class to * define Interfaced objects of the MatcherBase type to be used in the * Repository. Suitable typedefs are declared for the latter. * * @see Matcher * @see MatcherBase */ /** * A Matcher class which matches any particle. */ struct AnyMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef AnyMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return bool(pd.id()); } /** A simplified but unique class name. */ static string className() { return "Any"; } }; /** Gives a MatcherBase class based on AnyMatcher. */ typedef Matcher MatchAny; /** * A Matcher class which matches any charged particle. */ struct ChargedMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef ChargedMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return PDT::charged(pd.iCharge()); } /** A simplified but unique class name. */ static string className() { return "Charged"; } }; /** Gives a MatcherBase class based on ChargedMatcher. */ typedef Matcher MatchCharged; struct NegativeMatcher; /** * A Matcher class which matches any positively charged particle. */ struct PositiveMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef NegativeMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return PDT::positive(pd.iCharge()); } /** A simplified but unique class name. */ static string className() { return "Positive"; } }; /** Gives a MatcherBase class based on PositiveMatcher. */ typedef Matcher MatchPositive; /** * A Matcher class which matches any uncharged particle. */ struct NeutralMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef NeutralMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return pd.iCharge() == PDT::Charge0; } /** A simplified but unique class name. */ static string className() { return "Neutral"; } }; /** Gives a MatcherBase class based on NeutralMatcher. */ typedef Matcher MatchNeutral; /** * A Matcher class which matches any negatively charged particle. */ struct NegativeMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef PositiveMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return PDT::negative(pd.iCharge()); } /** A simplified but unique class name. */ static string className() { return "Negative"; } }; /** Gives a MatcherBase class based on NegativeMatcher. */ typedef Matcher MatchNegative; /** * A Matcher class which matches any baryon. */ struct BaryonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef BaryonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return (id/10)%10 && (id/100)%10 && (id/1000)%10; } /** A simplified but unique class name. */ static string className() { return "Baryon"; } }; /** Gives a MatcherBase class based on BaryonMatcher. */ typedef Matcher MatchBaryon; /** * A Matcher class which matches any meson. */ struct MesonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef MesonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return (id/10)%10 && (id/100)%10 && (id/1000)%10 == 0; } /** A simplified but unique class name. */ static string className() { return "Meson"; } }; /** Gives a MatcherBase class based on MesonMatcher. */ typedef Matcher MatchMeson; /** * A Matcher class which matches any (anti-)diquark. */ struct DiquarkMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef DiquarkMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return id/10 && (id/10)%10 == 0 && (id/100)%10 && (id/1000)%10; } /** A simplified but unique class name. */ static string className() { return "Diquark"; } }; /** Gives a MatcherBase class based on DiquarkMatcher. */ typedef Matcher MatchDiquark; /** * A Matcher class which matches any (anti-)quark. */ struct QuarkMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef QuarkMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return id && abs(id) < 10; } /** A simplified but unique class name. */ static string className() { return "Quark"; } }; /** Gives a MatcherBase class based on QuarkMatcher. */ typedef Matcher MatchQuark; /** * A Matcher class which matches any lepton. */ struct LeptonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef LeptonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return abs(id) > 10 && abs(id) <= 20; } /** A simplified but unique class name. */ static string className() { return "Lepton"; } }; /** Gives a MatcherBase class based on LeptonMatcher. */ typedef Matcher MatchLepton; struct LightAntiQuarkMatcher; /** * A Matcher class which matches any light quark (d,u or s). */ struct LightQuarkMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef LightAntiQuarkMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return id > 0 && id < 4 ; } /** A simplified but unique class name. */ static string className() { return "LightQuark"; } }; /** Gives a MatcherBase class based on LightQuarkMatcher. */ typedef Matcher MatchLightQuark; /** * A Matcher class which matches any light anti-quark * (\f$\bar{\mbox{d}}\f$,\f$\bar{\mbox{u}}\f$ or * \f$\bar{\mbox{s}}\f$). */ struct LightAntiQuarkMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef LightQuarkMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return id < 0 && id > -4 ; } /** A simplified but unique class name. */ static string className() { return "LightAntiQuark"; } }; /** Gives a MatcherBase class based on LightAntiQuarkMatcher. */ typedef Matcher MatchLightAntiQuark; /** * A Matcher class which matches any standard QCD parton, ie. gluons * and quarks up to bottom. */ struct StandardQCDPartonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef StandardQCDPartonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return id && ( abs(id) <= 5 || id == ParticleID::g ); } /** A simplified but unique class name. */ static string className() { return "StandardQCDParton"; } }; /** Gives a MatcherBase class based on StandardQCDPartonMatcher. */ typedef Matcher MatchStandardQCDParton; /** * A Matcher class which matches any pseudo scalar meson. */ struct PseudoScalarMesonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef PseudoScalarMesonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return ( (abs(id)/1000)%1 == 0 && abs(id) > 100 && abs(id)%10 == 1 ) || ( id == ParticleID::K_L0 || id == ParticleID::K_S0 ); } /** A simplified but unique class name. */ static string className() { return "PseudoScalarMeson"; } }; /** Gives a MatcherBase class based on PseudoScalarMesonMatcher. */ typedef Matcher MatchPseudoScalarMeson; /** * A Matcher class which matches any vector meson. */ struct VectorMesonMatcher: public MatcherType { /** Typedef the class matching the complex conjugate particles. */ typedef VectorMesonMatcher CC; /** The main static function to check if a given particle type \a pd matches. */ static bool Check(const ParticleData & pd) { return Check(pd.id()); } /** The main static function to check if a given particle with type \a id matches. */ static bool Check(long id) { return (abs(id)/1000)%1 == 0 && abs(id) > 100 && abs(id)%10 == 3; } /** A simplified but unique class name. */ static string className() { return "VectorMeson"; } }; /** Gives a MatcherBase class based on VectorMesonMatcher. */ typedef Matcher MatchVectorMeson; } #endif /* ThePEG_StandardMatchers_H */ thepeg-1.8.0.orig/PDT/DecayMode.xh0000644000175000017500000000230511747772425014771 0ustar sunsun// -*- C++ -*- // // DecayMode.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DecayMode_XH #define ThePEG_DecayMode_XH // // This is the declarations of the exception classes used by the // DecayMode class. // #include "ThePEG/Interface/InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used if a DecayMode is found to be inconsistent during the setup phase. */ class DecModNoAccept: public UpdateException { public: /** Standard constructor. */ DecModNoAccept(string, string); }; /** Exception class used if a DecayMode is found to be inconsistent during the setup phase. */ class DecModSetupNoAccept: public SetupException { public: /** Standard constructor. */ DecModSetupNoAccept(string, string); }; /** Exception class used by DecayMode if rebinding fails. */ class DecModRebind: public RebindException { public: /** Standard constructor. */ DecModRebind(string, string); }; /** @endcond */ } #endif /* ThePEG_DecayMode_XH */ thepeg-1.8.0.orig/PDT/FlatDecayer.cc0000644000175000017500000000431411747772425015272 0ustar sunsun// -*- C++ -*- // // FlatDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the FlatDecayer class. // #include "FlatDecayer.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Vectors/LorentzRotation.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr FlatDecayer::clone() const { return new_ptr(*this); } IBPtr FlatDecayer::fullclone() const { return new_ptr(*this); } bool FlatDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() == 1 && ( dm.parent()->massMax() > (**(dm.products().begin())).massMax() || dm.parent()->massMin() < (**(dm.products().begin())).massMin() ) ) return false; return dm.products().size() > 0 && dm.cascadeProducts().empty() && dm.productMatchers().empty() && !dm.wildProductMatcher(); } ParticleVector FlatDecayer::decay(const DecayMode & dm, const Particle & parent) const { ParticleVector children = getChildren(dm, parent); try { do { if ( children.size() == 1 ) { children[0]->setMomentum(parent.momentum()); children[0]->scale(parent.momentum().mass2()); return children; } else { SimplePhaseSpace::CMSn(children, parent.mass()); } } while ( reweight(dm, parent, children) < UseRandom::rnd() ); } catch ( ImpossibleKinematics & ) { children.clear(); return children; } finalBoost(parent, children); setScales(parent, children); return children; } NoPIOClassDescription FlatDecayer::initFlatDecayer; // Definition of the static class description member. void FlatDecayer::Init() { static ClassDocumentation documentation ("The ThePEG::FlatDecayer class describes the decay of a " "ThePEG::Particle into a set of specified children according " "to a flat distribution in phase space."); } thepeg-1.8.0.orig/PDT/V2PPDecayer.cc0000644000175000017500000000701111747772425015130 0ustar sunsun// -*- C++ -*- // // V2PPDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the V2PPDecayer class. // #include "V2PPDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; V2PPDecayer::~V2PPDecayer() {} IBPtr V2PPDecayer::clone() const { return new_ptr(*this); } IBPtr V2PPDecayer::fullclone() const { return new_ptr(*this); } bool V2PPDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() != 2 || !dm.cascadeProducts().empty() || !dm.productMatchers().empty() || dm.wildProductMatcher() ) return false; for ( ParticleMSet::const_iterator it = dm.products().begin(); it != dm.products().end(); ++it ) if ( !PseudoScalarMesonMatcher::Check(**it) ) return false; return ( VectorMesonMatcher::Check(*dm.parent()) ); } ParticleVector V2PPDecayer::decay(const DecayMode & dm, const Particle & parent) const { grandParent = tPPtr(); sibling = tPPtr(); if ( parent.parents().size() == 1 && PseudoScalarMesonMatcher::Check(parent.parents()[0]->data()) ) grandParent = parent.parents()[0]; if ( grandParent && grandParent->children().size() == 2 ) { tParticleSet siblings = parent.siblings(); if ( siblings.size() == 1 && (PseudoScalarMesonMatcher::Check((**siblings.begin()).data()) || (**siblings.begin()).id() == ParticleID::gamma ) ) sibling = *siblings.begin(); } return FlatDecayer::decay(dm, parent); } double V2PPDecayer::reweight(const DecayMode &, const Particle & parent, const ParticleVector & children) const { if ( !sibling || !grandParent ) return 1.0; LorentzMomentum gp = grandParent->momentum(); gp.boost(-parent.momentum().boostVector()); LorentzMomentum pp(ZERO, ZERO, ZERO, parent.mass()); Energy2 p10 = pp*gp; Energy2 p12 = pp*children[0]->momentum(); Energy2 p02 = gp*children[0]->momentum(); Energy2 m02 = gp.m2(); Energy2 m12 = pp.m2(); Energy2 m22 = children[0]->momentum().mass2(); if ( grandParent->id() == ParticleID::gamma ) return m12*(2.0*p10*p12*p02 - m12*sqr(p02) - m02*sqr(p12) - m22*sqr(p10) + m12*m02*m22)/((sqr(p10) - m12*m02)*(sqr(p12) - m12*m22)); else return sqr(p10*p12 - m12*p02)/((sqr(p10) - m12*m02)*(sqr(p12) - m12*m22)); } void V2PPDecayer::persistentOutput(PersistentOStream & os) const { os << grandParent << sibling; } void V2PPDecayer::persistentInput(PersistentIStream & is, int) { is >> grandParent >> sibling; } ClassDescription V2PPDecayer::initV2PPDecayer; // Definition of the static class description member. void V2PPDecayer::Init() { static ClassDocumentation documentation ("This class performs the decay of a vector meson into two " "pseudo-scalars according to a flat phase space. If, however the " "decaying particle comes from a pseudo-scalar and has only one " "sibling which is a pseudo-scalar (or a photon) the decay is " "reweighted with cos^2 (sin^2 for photon) of the angle between one " "of the decay products and its grand parent. "); } thepeg-1.8.0.orig/PDT/MixedParticleData.cc0000644000175000017500000001630011747772425016431 0ustar sunsun// -*- C++ -*- // // This is the implementation of the non-inlined, non-templated member // functions of the MixedParticleData class. // #include "MixedParticleData.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Utilities/Debug.h" using namespace ThePEG; void MixedParticleData::persistentOutput(PersistentOStream & os) const { os << ounit(_deltam,GeV) << ounit(_deltagamma,GeV) << _pqmag << _pqphase << _pq << _zmag << _zphase << _z << _x << _y << _prob; } void MixedParticleData::persistentInput(PersistentIStream & is, int) { is >> iunit(_deltam,GeV) >> iunit(_deltagamma,GeV) >> _pqmag >> _pqphase >> _pq >> _zmag >> _zphase >> _z >> _x >> _y >> _prob; } ClassDescription MixedParticleData::initMixedParticleData; // Definition of the static class description member. void MixedParticleData::Init() { static ClassDocumentation documentation ("The MixedParticleData class provides storage of the particle data" " for particles which undergo mixing."); static Parameter interfaceDeltaM ("DeltaM", "The mass difference", &MixedParticleData::_deltam, GeV, 0.0*GeV, 0.0*GeV, 1.*GeV, false, false, Interface::limited, &MixedParticleData::setDeltaM, 0, 0, 0, 0); static Parameter interfaceDeltaGamma ("DeltaGamma", "The width difference", &MixedParticleData::_deltagamma, GeV, 0.0*GeV, 0.0*GeV, 1.0*GeV, false, false, Interface::limited, &MixedParticleData::setDeltaGamma, 0, 0, 0, 0); static Parameter interfacePQMagnitude ("PQMagnitude", "The value of |p/q|", &MixedParticleData::_pqmag, 1.0, 0.0, 10.0, false, false, Interface::limited, &MixedParticleData::setPQMagnitude, 0, 0, 0, 0); static Parameter interfacePQPhase ("PQPhase", "The phase of p/q", &MixedParticleData::_pqmag, 0.0, 0.0, 2.*Constants::pi, false, false, Interface::limited, &MixedParticleData::setPQPhase, 0, 0, 0, 0); static Parameter interfaceZMagnitude ("ZMagnitude", "The value of |z|", &MixedParticleData::_zmag, 0.0, 0.0, 1.0, false, false, Interface::limited, &MixedParticleData::setZMagnitude, 0, 0, 0, 0); static Parameter interfaceZPhase ("ZPhase", "The phase of z", &MixedParticleData::_zmag, 0.0, 0.0, 2.*Constants::pi, false, false, Interface::limited, &MixedParticleData::setZPhase, 0, 0, 0, 0); } MixedParticleData::MixedParticleData(long newId, string newPDGName) : ParticleData(newId, newPDGName), _deltam(0.*GeV), _deltagamma(0.*GeV), _pqmag(1.), _pqphase(0.), _pq(1.,0.), _zmag(0.), _zphase(0.), _z(0.), _x(0.), _y(0.), _prob(make_pair(1.,0.)) {} PDPtr MixedParticleData:: Create(long newId, string newPDGName) { return new_ptr(MixedParticleData(newId, newPDGName)); } PDPair MixedParticleData:: Create(long newId, string newPDGName, string newAntiPDGName) { PDPair pap; pap.first = new_ptr(MixedParticleData(newId, newPDGName)); pap.second = new_ptr(MixedParticleData(-newId, newAntiPDGName)); antiSetup(pap); return pap; } PDPtr MixedParticleData::pdclone() const { return new_ptr(*this); } void MixedParticleData::setDeltaM(Energy m) { _deltam = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_deltam = m; } void MixedParticleData::setDeltaGamma(Energy m) { _deltagamma = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_deltagamma = m; } void MixedParticleData::setPQMagnitude(double m) { _pqmag = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_pqmag = m; } void MixedParticleData::setPQPhase(double m) { _pqphase = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_pqphase = m; } void MixedParticleData::setZMagnitude(double m) { _zmag = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_zmag = m; } void MixedParticleData::setZPhase(double m) { _zphase = m; MixedParticleData * apd = dynamic_cast(CC().operator->()); if ( synchronized() && apd ) apd->_zphase = m; } void MixedParticleData::doinit() throw(InitException) { ParticleData::doinit(); // calculate the complex parameters from the magnitudes and phases // and x and y from massive parameters // p/q _pq = _pqmag*Complex(cos(_pqphase),sin(_pqphase)); // z _z = _zmag *Complex(cos(_zphase ),sin(_zphase )); // x _x = _deltam /width(); // y _y = 0.5*_deltagamma/width(); // probabilities double zr = _z.real(), zi = _z.imag(); double root = sqrt( (1 - 2 * zr * zr + 2 * zi * zi + pow( zr, 4) + 2 * zr * zr * zi * zi + pow( zi, 4))); double x2=sqr(_x),y2=sqr(_y),modqp=1./sqr(abs(_pq)),z2(sqr(zr)+sqr(zi)); double mixprob = id()>0 ? -modqp*root*(x2+y2)/(2*zr*_y*(1+x2) - modqp*root*(x2+y2) - (1.+z2)*x2 - 2*zi*_x*(1-y2) + y2*(1-z2) - 2) : root*(x2+y2)/(2*modqp*zr*(1+x2)*_y+root*(x2+y2)+modqp*(1.+z2)*x2 - 2*modqp*zi*_x*(1-y2)-modqp*y2*(1-z2)+2*modqp); _prob= make_pair(1.-mixprob,mixprob); if( Debug::level ) { generator()->log() << "Parameters for the mixing of " << PDGName() << " and " << CC()->PDGName() << "\n"; generator()->log() << "x = " << _x << "\t y = " << _y << "\n"; generator()->log() << "Integrated mixing probability = " << mixprob << "\n"; } } pair MixedParticleData::generateLifeTime() const { // first decide if mixes bool mix = UseRandom::rndbool(_prob.second); double wgt; Length ct; double zi(_z.imag()),zr(_z.real()),zabs(sqr(zi)+sqr(zr)), root(1.-zabs); Length ctau = hbarc/(width()-0.5*abs(_deltagamma)); do { ct = UseRandom::rndExp(ctau); double gt = ct/cTau(); wgt=1.; if(id()>0) { if(!mix) { wgt = 0.5*(1.+zabs)*cosh(_y*gt)+0.5*(1.-zabs)*cos(_x*gt) -zr*sinh(_y*gt)+zi*sin(_x*gt); } else { wgt = 0.5*root/sqr(abs(_pq))*(cosh(_y*gt)-cos(_x*gt)); } } else { if(!mix) { wgt = 0.5*(1.+zabs)*cosh(_y*gt)+0.5*(1.-zabs)*cos(_x*gt) +zr*sinh(_y*gt)-zi*sin(_x*gt); } else { wgt = 0.5*root*sqr(abs(_pq))*(cosh(_y*gt)-cos(_x*gt)); } } wgt *= exp(-gt+ct/ctau); } while(UseRandom::rnd()>wgt); return make_pair(mix,ct); } pair MixedParticleData::mixingAmplitudes(Length ct,bool part) const { double gt = ct/cTau(); Complex ep = exp(Complex(-0.5*_y,-0.5*_x)*gt); Complex gp = 0.5*(ep+1./ep), gm = 0.5*(ep-1./ep); pair output; if(part) { output.first = gp + _z*gm; output.second = -sqrt(1.-sqr(_z))/_pq*gm; } else { output.first = gp - _z*gm; output.second = -sqrt(1.-sqr(_z))*_pq*gm; } return output; } thepeg-1.8.0.orig/PDT/DummyDecayer.h0000644000175000017500000000630311747772425015341 0ustar sunsun// -*- C++ -*- // // DummyDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_DummyDecayer_H #define THEPEG_DummyDecayer_H // This is the declaration of the DummyDecayer class. #include "ThePEG/PDT/Decayer.h" namespace ThePEG { /** * DummyDecayer inherits from Decayer and is a dummy decayer class to * be used for symbolic decay channels. If it for some reason is * called to perform a decay, it will throw a std::logic_error. * * @see \ref DummyDecayerInterfaces "The interfaces" * defined for DummyDecayer. */ class DummyDecayer: public Decayer { public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true always. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle * instance. Will throw std::logic_error if called. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; /** * Will always return zero, since no decay can ever be performed * with this decayer. */ virtual double brat(const DecayMode &, const ParticleData &, double) const; /** * Will always return zero, since no decay can ever be performed * with this decayer. */ virtual double brat(const DecayMode &, const Particle &, double) const; //@} public: /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class without persistent data. */ static NoPIOClassDescription initDummyDecayer; /** * Private and non-existent assignment operator. */ DummyDecayer & operator=(const DummyDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of DummyDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of DummyDecayer. */ typedef Decayer NthBase; }; /** This template specialization informs ThePEG about the name of the * DummyDecayer class. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::DummyDecayer"; } }; /** @endcond */ } #endif /* THEPEG_DummyDecayer_H */ thepeg-1.8.0.orig/PDT/Matcher.cc0000644000175000017500000000334111747772425014471 0ustar sunsun// -*- C++ -*- // // Matcher.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the Matcher class. // #include "Matcher.h" #include "StandardMatchers.h" #ifdef ThePEG_TEMPLATES_IN_CC_FILE #include "Matcher.tcc" #endif #define THEPEG_MATCH_DESC(T) \ /** \ * This template specialization registers the Matcher \ */ \ template <> \ NoPIOClassDescription T::initMatcher \ = NoPIOClassDescription(); \ namespace ThePEG { THEPEG_MATCH_DESC(MatchAny) THEPEG_MATCH_DESC(MatchStandardQCDParton) THEPEG_MATCH_DESC(MatchLightAntiQuark) THEPEG_MATCH_DESC(MatchLightQuark) THEPEG_MATCH_DESC(MatchLepton) THEPEG_MATCH_DESC(MatchDiquark) THEPEG_MATCH_DESC(MatchMeson) THEPEG_MATCH_DESC(MatchBaryon) THEPEG_MATCH_DESC(MatchNegative) THEPEG_MATCH_DESC(MatchNeutral) THEPEG_MATCH_DESC(MatchPositive) THEPEG_MATCH_DESC(MatchCharged) } using namespace ThePEG; namespace { void dummy() { static MatchAny m00; static MatchStandardQCDParton m01; static MatchLightAntiQuark m02; static MatchLightQuark m03; static MatchLepton m04; static MatchDiquark m05; static MatchMeson m06; static MatchBaryon m07; static MatchNegative m08; static MatchNeutral m09; static MatchPositive m11; static MatchCharged m12; } } thepeg-1.8.0.orig/PDT/BreitWignerMass.cc0000644000175000017500000000240411747772425016152 0ustar sunsun// -*- C++ -*- // // BreitWignerMass.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the BreitWignerMass class. // #include "BreitWignerMass.h" #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Repository/UseRandom.h" using namespace ThePEG; IBPtr BreitWignerMass::clone() const { return new_ptr(*this); } IBPtr BreitWignerMass::fullclone() const { return new_ptr(*this); } Energy BreitWignerMass::mass(const ParticleData & pd) const { Energy ret = ZERO; do { ret = UseRandom::rndRelBW(pd.mass(), pd.width(), pd.widthCut()); } while ( ret > pd.massMax() || ret < pd.massMin() ); return ret; } NoPIOClassDescription BreitWignerMass::initBreitWignerMass; void BreitWignerMass::Init() { static ClassDocumentation documentation ("Generates masses of particle instances according to a Breit-Wigner " "distribution."); } thepeg-1.8.0.orig/PDT/Matcher.h0000644000175000017500000000653411747772425014342 0ustar sunsun// -*- C++ -*- // // Matcher.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Matcher_H #define ThePEG_Matcher_H // This is the declaration of the Matcher class. #include "MatcherBase.h" namespace ThePEG { /** * Matcher is a templated class inheriting from MatcherBase. It is * used to conveniently create interfaced classes inheriting from * MatcherBase giving a class with a static T::Check() method as * template argument. * * @see MatcherBase * */ template class Matcher: public MatcherBase { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~Matcher(); //@} /** @name Special clone and create functions used by the Repository. */ //@{ /** * Create and clone Matcher objects. */ static PMPtr Create(const string & newName, string antiName); /** * Create and clone Matcher objects. */ virtual PMPtr pmclone() const; //@} protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** @name Virtual and static versions of the check functions. */ //@{ /** * Virtual function overriding the one in MatcherBase. Simply calls * Check(). */ virtual bool check(const ParticleData & pd) const { return T::Check(pd); } /** * Static check function. Return true if a given particle type, \a * pd, is matched by this Matcher, ie. if the T::Check() function of * the template argument returns true. */ static bool Check(const ParticleData & pd) { return T::Check(pd); } //@} protected: /** * Set antipartner. */ static void setCC(tPMPtr pm, tPMPtr apm) { MatcherBase::setCC(pm,apm); } private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class without persistent data. */ static NoPIOClassDescription< Matcher > initMatcher; }; /** * MatcherType is an empty non-polymorphic base class for all matcher * classes to be used as template argument to Matcher. */ struct MatcherType {}; /** @cond TRAITSPECIALIZATIONS */ /** This partial template specialization informs ThePEG about the base * classes of Matcher. */ template struct BaseClassTrait,1>: public ClassTraitsType { /** Typedef of the first base class of Matcher. */ typedef MatcherBase NthBase; }; /** This partial template specialization informs ThePEG about the name * of the Matcher class. Note that the template argument class is * assumed to have a specialization of ClassTraits of its own.*/ template struct ClassTraits< Matcher >: public ClassTraitsBase< Matcher > { /** Return a platform-independent class name */ static string className() { return "ThePEG::Matcher<" + T::className() + ">"; } }; /** @endcond */ } #ifndef ThePEG_TEMPLATES_IN_CC_FILE #include "Matcher.tcc" #endif #endif /* ThePEG_Matcher_H */ thepeg-1.8.0.orig/PDT/OmegaPhi3PiDecayer.h0000644000175000017500000001103511747772425016311 0ustar sunsun// -*- C++ -*- // // OmegaPhi3PiDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_OmegaPhi3PiDecayer_H #define THEPEG_OmegaPhi3PiDecayer_H // This is the declaration of the OmegaPhi3PiDecayer class. #include "ThePEG/PDT/FlatDecayer.h" namespace ThePEG { /** * The OmegaPhi3PiDecayer class inherits from performs FlatDecayer and * will reweight the flat phase space suitable to describe the decay * of a \f$\phi\f$ or an \f$\omega\f$ into \f$\pi^+\pi^-\pi^0\f$. It * will in fact decay anything into \f$\pi^+\pi^-\pi^0\f$ assuming the * same matrix element. * * @see \ref OmegaPhi3PiDecayerInterfaces "The interfaces" * defined for OmegaPhi3PiDecayer. * @see FlatDecayer * @see ParticleData */ class OmegaPhi3PiDecayer: public FlatDecayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ OmegaPhi3PiDecayer() : margin(150.0) {} //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Give a weight to a phase space point. To be overridden by * subclasses. For a given decay mode, \a dm, decaying \a parent * particle and decayproducts, \a children, distributed according to * a flat distribution in phase space, return a weight (less or * equal to unity) modifying the flat distribution to the desired * one. Note that the chosen phase space point may be rejected, but * the chosen decay channel will not. This means that the weight * returned by this function does not influence the branching * ratios. */ virtual double reweight(const DecayMode & dm, const Particle & parent, const ParticleVector & children) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Used to multiply the bare weight to get something below unity. In * the Fortran pythia version it was set to 150 for unknown reasons. */ double margin; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initOmegaPhi3PiDecayer; /** * Private and non-existent assignment operator. */ OmegaPhi3PiDecayer & operator=(const OmegaPhi3PiDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of OmegaPhi3PiDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of OmegaPhi3PiDecayer. */ typedef FlatDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * OmegaPhi3PiDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::OmegaPhi3PiDecayer"; } /** Return the name of the shared library be loaded to get access to * the OmegaPhi3PiDecayer class and every other class it uses * (except the base class). */ static string library() { return "OmegaPhi3PiDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_OmegaPhi3PiDecayer_H */ thepeg-1.8.0.orig/PDT/RemnantData.fh0000644000175000017500000000046511747772425015320 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RemnantData class. // #ifndef THEPEG_RemnantData_FH #define THEPEG_RemnantData_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class RemnantData; } namespace ThePEG { ThePEG_DECLARE_POINTERS(ThePEG::RemnantData,RemPDPtr); } #endif thepeg-1.8.0.orig/PDT/ColourPairDecayer.cc0000644000175000017500000000664211747772425016471 0ustar sunsun// -*- C++ -*- // // ColourPairDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ColourPairDecayer class. // #include "ColourPairDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Handlers/HandlerGroup.h" #include "ThePEG/Handlers/Hint.h" #include "ThePEG/Handlers/EventHandler.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr ColourPairDecayer::clone() const { return new_ptr(*this); } IBPtr ColourPairDecayer::fullclone() const { return new_ptr(*this); } bool ColourPairDecayer::accept(const DecayMode & dm) const { if ( !FlatDecayer::accept(dm) ) return false; for ( int i = 0, N = dm.orderedProducts().size(); i < N; ++i ) { if ( !dm.orderedProducts()[i]->coloured() ) continue; if ( i == N - 1 ) return false; if ( dm.orderedProducts()[i]->hasColour() && !dm.orderedProducts()[i + 1]->hasAntiColour() ) return false; if ( dm.orderedProducts()[i]->hasAntiColour() && !dm.orderedProducts()[i + 1]->hasColour() ) return false; ++i; } return true; } ParticleVector ColourPairDecayer::getChildren(const DecayMode & dm, const Particle & parent) const { ParticleVector children = dm.produceProducts(); for ( int i = 0, N = children.size(); i < N; ++i ) { children[i]->scale(sqr(parent.mass())); if ( !children[i]->coloured() ) continue; if ( children[i]->hasColour() ) children[i]->antiColourNeighbour(children[i + 1]); if ( children[i]->hasAntiColour() ) children[i]->colourNeighbour(children[i + 1]); ++i; } HintPtr h = ptr_new(); h->tag(children.begin(), children.end()); using namespace Group; generator()->currentEventHandler()-> addStep(main, shower()? cascade: hadron, tStepHdlPtr(), h); return children; } void ColourPairDecayer::persistentOutput(PersistentOStream & os) const { os << doShower; } void ColourPairDecayer::persistentInput(PersistentIStream & is, int) { is >> doShower; } ClassDescription ColourPairDecayer::initColourPairDecayer; // Definition of the static class description member. void ColourPairDecayer::Init() { static ClassDocumentation documentation ("This class performs decays according to phase space into two or " "more particles, some of which may be coloured. The coloured " "particles must come in pairs and will be colour connected " "pair-wise."); static Switch interfaceShower ("Shower", "Should the produced partons be showered or only hadronized?", &ColourPairDecayer::doShower, true, true, false); static SwitchOption interfaceShowerYes (interfaceShower, "Yes", "The produced partons should be showered before hadronization.", true); static SwitchOption interfaceShowerNo (interfaceShower, "No", "The produced partons should be hadronized whithout preceeding shower.", false); interfaceShower.rank(10); } thepeg-1.8.0.orig/PDT/RemnantData.h0000644000175000017500000001363711747772425015157 0ustar sunsun// -*- C++ -*- // // RemnantData.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_RemnantData_H #define THEPEG_RemnantData_H // // This is the declaration of the RemnantData class. // #include "ThePEG/PDT/ParticleData.h" #include "ThePEG/PDT/RemnantData.fh" #include "ThePEG/PDT/RemnantDecayer.fh" #include "ThePEG/PDT/DecayMode.h" namespace ThePEG { /** * The RemnantData class is not a normal ParticleData class. It should * never be handled directly by the interface but is automatically * created and assigned to an object of the SoftRemnant sub-class of * Particle. The SoftRemnant in turn is not a proper Particle, but * rather a place holder for what is left of a colliding particle * after one or several partons has been extracted. To be able to * retrieve properties of the SoftRemnant through its ParticleData the * RemnantData is used to dynamically keep track of this. * * The RemnantData is initialized by the ParticleData corresponding to * the colliding particle. For each particle which is extracted the * charge charge is changed accordingly. Also the colour charge is * changed, but only such that the coloured(), hasColour() and * hasAntiColour() returns relevant information. The actual colour can * only be singlet, (anti-)triplet or octet. * * When created the RemnantData object must be given a RemnantDecayer * object and a single DecayMode object will be created with this * Decayer. * * @see \ref RemnantDataInterfaces "The interfaces" * defined for RemnantData. */ class RemnantData: public ParticleData { public: /** @name Standard constructors and destructors. */ //@{ /** * The standard constructor takes as argument the \a particle type * for which this is the remnant and a \a decayer capable of * performing the decay. */ RemnantData(tcPDPtr particle, RemDecPtr decayer); //@} public: /** * The Decayer responsible for for the decay of this remnant. */ const RemnantDecayer & decayer() const { return *theDecayer; }; /** * Modify the properties to reflect that the given \a parton was * extracted. */ bool extract(tcPDPtr parton); /** * Modify the properties to reflect that the given \a parton which was * previously extracted is removed. */ bool remove(tcPDPtr parton); /** * Modify the properties to reflect that the previously extracted * parton, \a oldp, was evolved backwards to the the parton \a newp. */ bool reextract(tcPDPtr oldp, tcPDPtr newp); protected: /** * Modify the colour to reflect that the given \a parton was * extracted. */ bool fixColour(); public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} // If needed, insert declarations of virtual function defined in the // InterfacedBase class here (using ThePEG-interfaced-decl in Emacs). private: /** * The particle type of the parent. */ tcPDPtr parentPD; /** * The Decayer responsible for for the decay of this remnant. */ RemDecPtr theDecayer; /** * The only DecayMode available for this remnant. */ DMPtr decayMode; /** * The set of extracted particle types. */ multiset extracted; protected: /** * The default constructor is protected and must only be used by the * PersistentIStream class via the ClassTraits class. */ RemnantData() {} /** * The ClassTraits class must be a friend to be able to * use the private default constructor. */ friend struct ClassTraits; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initRemnantData; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ RemnantData & operator=(const RemnantData &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of RemnantData. */ template <> struct BaseClassTrait { /** Typedef of the first base class of RemnantData. */ typedef ParticleData NthBase; }; /** This template specialization informs ThePEG about the name of * the RemnantData class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RemnantData"; } /** Create a Particle object. */ static TPtr create() { return TPtr::Create(RemnantData()); } }; /** @endcond */ } #endif /* THEPEG_RemnantData_H */ thepeg-1.8.0.orig/PDT/MixedParticleData.fh0000644000175000017500000000053711747772425016446 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the MixedParticleData class. // #ifndef THEPEG_MixedParticleData_FH #define THEPEG_MixedParticleData_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class MixedParticleData; } namespace ThePEG { ThePEG_DECLARE_POINTERS(ThePEG::MixedParticleData,MixedParticleDataPtr); } #endif thepeg-1.8.0.orig/PDT/RemnantDecayer.h0000644000175000017500000002275511747772425015663 0ustar sunsun// -*- C++ -*- // // RemnantDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_RemnantDecayer_H #define THEPEG_RemnantDecayer_H // // This is the declaration of the RemnantDecayer class. // #include "ThePEG/PDT/Decayer.h" #include "RemnantDecayer.fh" #include "ThePEG/PDT/RemnantData.h" #include "ThePEG/EventRecord/RemnantParticle.h" #include "ThePEG/Handlers/PtGenerator.h" namespace ThePEG { /** * The RemnantDecayer class is the base class to be used for all * decayers capable of decaying a RemnantParticle object produced by a * SoftRemnantHandler object. A derived class must implement the * decay(const DecayMode &, const Particle &, Step &) function, while * the decay(const DecayMode &, const Particle &) function should * never be called. * * @see \ref RemnantDecayerInterfaces "The interfaces" * defined for RemnantDecayer. */ class RemnantDecayer: public Decayer { public: /** A pointer to a PtGenerator object. */ typedef Ptr::pointer PtGPtr; public: /** * Enumerate the options for how to distribute recoils in the hard * subsystem when taking energy to produce remnants. */ enum RecoilOption { boostAll, /**< Boost all particles in the hard subsystem. */ boostFinal, /**< Boost only final state particles in hard subsystem. */ copyFinal /**< Boost copies of final state particles in hard subsystem. */ }; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ RemnantDecayer() : respectDIS(2), theRecoilOption(copyFinal) {} /** * The destructor. */ virtual ~RemnantDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Return true if this Decayer need to access the full current step * when a particle is decayed. If true is returned the standard * Decay Handler will call the decay(const DecayMode&,const * Particle&,Step&) function rather than the decay(const * DecayMode&,const Particle&) function. */ virtual bool needsFullStep() const; /** * Perform a decay for a given DecayMode and a given Particle * instance. This version allows the decaying particle to borrow * energy/momentum from its sublings in the current step. This will * be called by the standard DecayHandler if the needsFullStep() * function returns true. * * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @param step the current step in which to find possible siblings to * shuffle energy with. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p, Step & step) const = 0; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; //@} /** * Return true if this decayer can handle the extraction of the \a * extracted parton from the given \a particle. */ virtual bool canHandle(tcPDPtr parent, tcPDPtr extracted) const; /** * Return true if this decayer can handle the extraction of the \a * extracted parton instance from the given \a particle instance. \a * pnew is the momentum of the resulting remnant. The default * version simply checks if the energy is positive. */ virtual bool checkExtract(tcPPtr parent, tcPPtr extracted, const LorentzMomentum & pnew) const; /** * Return true if this decayed can extract more than one parton from * a particle. */ virtual bool multiCapable() const; /** * The option for how to distribute recoils in the hard subsystem * when taking energy to produce remnants. */ RecoilOption recoilOption() const { return theRecoilOption; } /** * If true, do not boost a scattered lepton (and possible radiated * photons) in a DIS event, to ensure that \f$x\f$ and \f$Q^2\f$ is * unmodified. */ int respectDISKinematics() const { return respectDIS; } /** * An object capable of generating an intrinsic transverse momentum * of the created remnants. */ PtGPtr pTGenerator() const { return thePTGenerator; } /** * Static function to decay al remnants among the given \a * particles. The decay products are inserted in the \a step * provided. * @return a vector of the non-remnant particles together with the * remnant decay products. */ static tPVector decayRemnants(const tPVector & particles, Step & step); protected: /** * Access the RemnantData object of a \a remnant. */ tRemPDPtr data(tcRemPPtr remnant) const { return remnant->remData; } /** * Access the parent of a \a remnant. */ tcPPtr parent(tcRemPPtr remnant) const { return remnant->parent; } /** * Access the vector of extracted particles of a \a remnant. */ const PVector & extracted(tcRemPPtr remnant) const { return remnant->extracted(); } /** * Recursively find all particles produced from an extracted parton. */ virtual void fillSubSystem(tPPtr p, set & sub) const; /** * Return the system of particles from the hard subsystem which may * be used to shuffle momenta to get the remnants on-shell. In this * version the particles are ordered in rapidity with the ones * closest to the remnant direction comes first. Other orderings can * be enforced by sub-classes. */ virtual tPVector getSubSystem(tcPPtr parent, tPPtr parton) const; /** * Return a small boost along the z-axis. To cure rounding errors * when making large boosts it is sometimes necessary to correct the * plus (or minus) lightcone component with a small boost along the * z-axis. The resulting boost is constructed so that the momentum * \a p0 would be transformed to have the sam z-value as the * momentum \a p. */ static LorentzRotation getZBoost(const LorentzMomentum & p0, const LorentzMomentum & p); public: /** * Exception used if getSubSystem fails. */ struct SubSystemFail: public Exception {}; protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Return true if this object needs to be initialized before all * other objects because it needs to extract cuts from the event file. */ virtual bool preInitialize() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); protected: /** * If true, do not boost a scattered lepton (and possible radiated * photons) in a DIS event, to ensure that \f$x\f$ and \f$Q^2\f$ is * unmodified. */ mutable int respectDIS; private: /** * The option for how to distribute recoils in the hard subsystem * when taking energy to produce remnants. */ RecoilOption theRecoilOption; /** * An object capable of generating an intrinsic transverse momentum * of the created remnants. */ PtGPtr thePTGenerator; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static AbstractClassDescription initRemnantDecayer; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ RemnantDecayer & operator=(const RemnantDecayer &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of RemnantDecayer. */ template <> struct BaseClassTrait { /** Typedef of the first base class of RemnantDecayer. */ typedef Decayer NthBase; }; /** This template specialization informs ThePEG about the name of * the RemnantDecayer class and the shared object where it is defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::RemnantDecayer"; } }; /** @endcond */ } #endif /* THEPEG_RemnantDecayer_H */ thepeg-1.8.0.orig/PDT/SimpleBaryonRemnantDecayer.h0000644000175000017500000002116711747772425020204 0ustar sunsun// -*- C++ -*- // // SimpleBaryonRemnantDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_SimpleBaryonRemnantDecayer_H #define THEPEG_SimpleBaryonRemnantDecayer_H // // This is the declaration of the SimpleBaryonRemnantDecayer class. // #include "ThePEG/PDT/RemnantDecayer.h" #include "ThePEG/Handlers/ZGenerator.h" #include "ThePEG/Handlers/FlavourGenerator.h" #include "ThePEG/Utilities/VSelector.h" namespace ThePEG { /** * The SimpleBaryonRemnantDecayer class inherits from the * RemnantDecayer class and is able to decay RemnantParticles produced * by the SoftRemnantHandler class for the cases when a single parton * has been extracted from a baryon. * * @see \ref SimpleBaryonRemnantDecayerInterfaces "The interfaces" * defined for SimpleBaryonRemnantDecayer. */ class SimpleBaryonRemnantDecayer: public RemnantDecayer { public: /** A pointer to a ZGenerator object. */ typedef Ptr::pointer ZGPtr; /** A pointer to a FlavourGenerator object. */ typedef Ptr::pointer FlGPtr; public: /** @name Standard constructors and destructors. */ //@{ /** * The default constructor. */ SimpleBaryonRemnantDecayer() : theMargin(1.0*GeV), useSpecialValence(false) {} /** * The copy constructor. */ SimpleBaryonRemnantDecayer(const SimpleBaryonRemnantDecayer & x) : RemnantDecayer(x), theZGenerator(x.theZGenerator), theFlavourGenerator(x.theFlavourGenerator), theMargin(x.theMargin), useSpecialValence(x.useSpecialValence) {} /** * The destructor. */ virtual ~SimpleBaryonRemnantDecayer(); //@} public: /** @name Virtual functions required by the RemnantDecayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle * instance. This version allows the decaying particle to borrow * energy/momentum from its sublings in the current step. This will * be called by the standard DecayHandler if the needsFullStep() * function returns true. * * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @param step the current step in which to find possible siblings to * shuffle energy with. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p, Step & step) const; /** * Return true if this decayer can handle the extraction of the \a * extracted parton from the given \a particle. */ virtual bool canHandle(tcPDPtr parent, tcPDPtr extracted) const; /** * Return true if this decayer can handle the extraction of the \a * extracted parton instance from the given \a particle instance. \a * pnew is the momentum of the resulting remnant. The default * version simply checks if the energy is positive. */ virtual bool checkExtract(tcPPtr parent, tcPPtr extracted, const LorentzMomentum & pnew) const; //@} protected: /** @name Standard Interfaced functions. */ //@{ /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Return true if this object needs to be initialized before all * other objects because it needs to extract cuts from the event file. */ virtual bool preInitialize() const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * The standard Init function used to initialize the interfaces. * Called exactly once for each class by the class description system * before the main function starts or * when this class is dynamically loaded. */ static void Init(); public: /** * Warning Exception used when DIS kinematics was not respected. */ struct NoDISRespect: public Exception {}; /** * Exception thrown if the decay of a remnant was impossible. */ struct DecayFailed: public Exception {}; protected: /** * Return a reference to the object responsible for generating * momentum fractions in case of more than one remnant. */ ZGenerator & zGenerator() const { return *theZGenerator; } /** * Return a reference to the object responsible for handling the * flavour contents of a baryon. */ FlavourGenerator & flavourGenerator() const { return *theFlavourGenerator; } /** * Return the energy margin to be added to the sum of the parent and * parton masses to determine if it is possible to construct the * remnants with the given (upper limit of the) virtuality of the * extracted parton. */ Energy margin() const { return theMargin; } /** * If true an extracted valens quark will always give a di-quark remnant. */ bool specialValence() const { return useSpecialValence; } protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} protected: /** * Simple struct to store info about baryon quark and di-quark * constituents. */ struct BaryonContent { /** The valence flavours of the corresponding baryon. */ vector flav; /** Different divisions into quark-diquark weighted by their respective probabilities. */ VSelector< pair > flavsel; /** -1 if the particle is an anti-particle. +1 otherwise. */ int sign; }; /** * Return info about baryon quark and di-quark constituents. */ const BaryonContent & getBaryonInfo(tcPDPtr baryon) const; private: /** * The object responsible for generating momentum fractions in case * of more than one remnant. */ ZGPtr theZGenerator; /** * The object responsible for handling the flavour contents of a * baryon. */ FlGPtr theFlavourGenerator; /** * The energy margin to be added to the sum of the parent and parton * masses to determine if it is possible to construct the remnants * with the given (upper limit of the) virtuality of the extracted * parton. */ Energy theMargin; /** * If true an extracted valens quark will always give a di-quark remnant. */ bool useSpecialValence; /** * A map of info about baryon quark and di-quark constituents. */ mutable map baryonmap; private: /** * The static object used to initialize the description of this class. * Indicates that this is a concrete class with persistent data. */ static ClassDescription initSimpleBaryonRemnantDecayer; /** * The assignment operator is private and must never be called. * In fact, it should not even be implemented. */ SimpleBaryonRemnantDecayer & operator=(const SimpleBaryonRemnantDecayer &); }; } #include "ThePEG/Utilities/ClassTraits.h" namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of SimpleBaryonRemnantDecayer. */ template <> struct BaseClassTrait { /** Typedef of the first base class of SimpleBaryonRemnantDecayer. */ typedef RemnantDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * SimpleBaryonRemnantDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::SimpleBaryonRemnantDecayer"; } }; /** @endcond */ } #endif /* THEPEG_SimpleBaryonRemnantDecayer_H */ thepeg-1.8.0.orig/PDT/PDT.h0000644000175000017500000001413411747772425013401 0ustar sunsun// -*- C++ -*- // // PDT.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_PDT_H #define ThePEG_PDT_H // This is the declaration of the PDT class. #include "ThePEG/Config/ThePEG.h" namespace ThePEG { /** * PDT is a helper class implementing enumerations for charge, colour * and spin to be used by the ParticleData class. In addition, some * static utility functions are provided. * * @see ParticleData */ class PDT { public: /** * Definition of enumerated values used for spin information. THe * integer values are given according to 2s+1. */ enum Spin { SpinNA = -1, /**< Spin is not applicable. */ SpinUnknown = 0, /**< Unknown spin */ SpinUndefined = 0, /**< Undefined spin */ Spin0 = 1, /**< Spin zero. */ Spin1Half = 2, /**< Spin 1/2. */ Spin1 = 3, /**< Spin 1. */ Spin3Half = 4, /**< Spin 3/2. */ Spin2 = 5, /**< Spin 2. */ Spin5Half = 6, /**< Spin 5/2. */ Spin3 = 7, /**< Spin 4. */ Spin7Half = 8, /**< Spin 7/2. */ Spin4 = 9 /**< Spin 5. */ }; /** * Definition of enumerated values used for charge information. The * integer values are given in units of e/3. */ enum Charge { ChargeUnknown = -999999, /**< Unknown charge. */ ChargeUndefined = -999999, /**< Undefined charge. */ Charged = 999990, /**< Is charged. */ Positive = 900000, /**< Is positively charged. */ Negative = -900000, /**< Is negatively charged. */ ChargeNeutral = 0, /**< Uncharged. */ Charge0 = 0, /**< Uncharged. */ Plus1Third = 1, /**< e/3. */ Plus2Third = 2, /**< 2e/3. */ Plus1 = 3, /**< e. */ Minus1Third = -1, /**< -e/3. */ Minus2Third = -2, /**< -2e/3. */ Minus1 = -3, /**< -e. */ Plus4Third = 4, /**< 4e/3. */ Plus5Third = 5, /**< 5e/3. */ Plus2 = 6, /**< 2e. */ Minus4Third = -4, /**< -4e/3. */ Minus5Third = -5, /**< -5e/3. */ Minus2 = -6, /**< -3e. */ Plus7Third = 7, /**< 7e/3. */ Plus8Third = 8, /**< 8e/3. */ Plus3 = 9, /**< 3e. */ Minus7Third = -7, /**< -7e/3. */ Minus8Third = -8, /**< -8e/3. */ Minus3 = -9, /**< -3e. */ Plus4 = 12, /**< 4e. */ Plus5 = 15, /**< 5e. */ Plus6 = 18, /**< 6e. */ Plus7 = 21, /**< 7e. */ Plus8 = 24, /**< 8e. */ Minus4 = -12, /**< -4e. */ Minus5 = -15, /**< -5e. */ Minus6 = -18, /**< -6e. */ Minus7 = -21, /**< -7e. */ Minus8 = -24 /**< -8e. */ }; /** *Definition of enumerated values used for colour information. */ enum Colour { ColourUnknown = -1, /**< Unknown colour */ ColourUndefined = -1, /**< Undefined colour */ ColourNeutral = 0, /**< Colour-singlet */ Colour0 = 0, /**< Colour-singlet */ Coloured = 1, /**< Coloured */ Colour3 = 3, /**< Colour-triplet */ Colour3bar = -3, /**< Colour-anti-triplet */ Colour6 = 6, /**< Colour-sextet */ Colour6bar = -6, /**< Colour-anti-sextet */ Colour8 = 8 /**< Colour-octet */ }; /** * True if the argument corresponds to a non-zero charge. */ static bool charged(Charge c) { return c != ChargeNeutral && c != ChargeUndefined; } /** * True if the argument corresponds to a positive charge. */ static bool positive(Charge c) { return c > ChargeNeutral && c != Charged; } /** * True if the argument corresponds to a negative charge. */ static bool negative(Charge c) { return c < ChargeNeutral && c != ChargeUndefined; } /** * True if the argument corresponds to a non-zero colour charge. */ static bool coloured(Colour c) { return c != ColourNeutral && c != ColourUnknown; } /** * Return the anti-colour of the specified colour. */ static Colour antiColour(Colour c) { if ( c == Colour3 || c == Colour3bar ) return Colour(-c); if ( c == Colour6 || c == Colour6bar ) return Colour(-c); return c; } /** * Return the flavour content of the given particle. The flavours * will be given in decreasing mass with flavour before * anti-flavour. */ static vector flavourContent(long id); /** * Return the flavour content of the given particle. The flavours * will be given in decreasing mass with flavour before * anti-flavour. */ static vector flavourContent(tcPDPtr); /** * Return the flavour content of the given particle. The flavours * will be given in decreasing mass with flavour before * anti-flavour. */ static vector flavourContent(tcPPtr); /** * Return the flavour content of the given particle. The flavours * will be given in decreasing mass with flavour before * anti-flavour. */ static vector flavourContent(const ParticleData &); /** * Return the flavour content of the given particle. The flavours * will be given in decreasing mass with flavour before * anti-flavour. */ static vector flavourContent(const Particle &); }; /** Input a colour from a stream. */ template IStream & operator>>(IStream & is, PDT::Colour & c) { int ci; is >> ci; c = PDT::Colour(ci); return is; } /** Input a charge from a stream. */ template IStream & operator>>(IStream & is, PDT::Charge & c) { int ci; is >> ci; c = PDT::Charge(ci); return is; } /** Input a spin from a stream. */ template IStream & operator>>(IStream & is, PDT::Spin & s) { int si; is >> si; s = PDT::Spin(si); return is; } } #endif /* ThePEG_PDT_H */ thepeg-1.8.0.orig/PDT/ParticleData.cc0000644000175000017500000007415711747772425015460 0ustar sunsun// -*- C++ -*- // // ParticleData.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the ParticleData class. // #include "ParticleData.h" #include "ParticleData.xh" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Utilities/HoldFlag.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Utilities/StringUtils.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/Interface/RefVector.h" #include "ThePEG/Interface/Command.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Config/algorithm.h" #include "ThePEG/Utilities/Exception.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Repository/UseRandom.h" namespace ThePEG { ParticleData::ParticleData() : theId(0), thePDGName(""), theMass(-1.0*GeV), theWidth(-1.0*GeV), theWidthUpCut(-1.0*GeV), theWidthLoCut(-1.0*GeV), theCTau(-1.0*mm), theCharge(PDT::ChargeUnknown), theSpin(PDT::SpinUnknown), theColour(PDT::ColourUnknown), isStable(true), theVariableRatio(false), syncAnti(false), theDefMass(-1.0*GeV), theDefWidth(-1.0*GeV), theDefCut(-1.0*GeV), theDefCTau(-1.0*mm), theDefCharge(PDT::ChargeUnknown), theDefSpin(PDT::SpinUnknown), theDefColour(PDT::ColourUnknown) {} ParticleData:: ParticleData(PID newId, const string & newPDGName) : theId(newId), thePDGName(newPDGName), theMass(-1.0*GeV), theWidth(-1.0*GeV), theWidthUpCut(-1.0*GeV), theWidthLoCut(-1.0*GeV), theCTau(-1.0*mm), theCharge(PDT::ChargeUnknown), theSpin(PDT::SpinUnknown), theColour(PDT::ColourUnknown), isStable(true), theVariableRatio(false), syncAnti(false), theDefMass(-1.0*GeV), theDefWidth(-1.0*GeV), theDefCut(-1.0*GeV), theDefCTau(-1.0*mm), theDefCharge(PDT::ChargeUnknown), theDefSpin(PDT::SpinUnknown), theDefColour(PDT::ColourUnknown) {} ParticleData::~ParticleData() {} PDPtr ParticleData::Create(PID newId, const string & newPDGName) { return new_ptr(ParticleData(newId, newPDGName)); } PDPair ParticleData:: Create(PID newId, const string & newPDGName, const string & newAntiPDGName) { PDPair pap; pap.first = new_ptr(ParticleData(newId, newPDGName)); pap.second = new_ptr(ParticleData(-newId, newAntiPDGName)); antiSetup(pap); return pap; } void ParticleData::readSetup(istream & is) { long id; is >> id >> thePDGName >> iunit(theDefMass, GeV) >> iunit(theDefWidth, GeV) >> iunit(theDefCut, GeV) >> iunit(theDefCTau, mm) >> ienum(theDefCharge) >> ienum(theDefColour) >> ienum(theDefSpin) >> ienum(isStable); theId = id; theMass = theDefMass; theWidth = theDefWidth; theWidthUpCut = theDefCut; theWidthLoCut = theDefCut; theCTau = theDefCTau; theCharge = theDefCharge; theColour = theDefColour; theSpin = theDefSpin; if ( PDGName() == "-" ) thePDGName = name(); return; } void ParticleData::antiSetup(const PDPair & pap) { pap.first->theAntiPartner = pap.second; pap.second->theAntiPartner = pap.first; pap.first->syncAnti = pap.second->syncAnti = true; } PDPtr ParticleData::pdclone() const { return new_ptr(*this); } IBPtr ParticleData::clone() const { return pdclone(); } IBPtr ParticleData::fullclone() const { PDPtr pd = pdclone(); Repository::Register(pd); pd->theDecaySelector.clear(); pd->theDecayModes.clear(); PDPtr apd; if ( CC() ) { apd = CC()->pdclone(); Repository::Register(apd); apd->theDecaySelector.clear(); apd->theDecayModes.clear(); pd->theAntiPartner = apd; apd->theAntiPartner = pd; pd->syncAnti = syncAnti; apd->syncAnti = CC()->syncAnti; } HoldFlag<> dosync(pd->syncAnti, true); for ( DecaySet::const_iterator it = theDecayModes.begin(); it != theDecayModes.end(); ++it ) pd->addDecayMode(*it); return pd; } Energy ParticleData::width(Energy wi) { theWidth = wi; if ( synchronized() && CC() ) CC()->theWidth = theWidth; return theWidth; } Energy ParticleData::widthUpCut(Energy wci) { theWidthUpCut = wci; if ( synchronized() && CC() ) CC()->theWidthUpCut = theWidthUpCut; return theWidthUpCut; } Energy ParticleData::widthLoCut(Energy wci) { theWidthLoCut = wci; if ( synchronized() && CC() ) CC()->theWidthLoCut = theWidthLoCut; return theWidthLoCut; } Length ParticleData::cTau(Length ti) { theCTau = ti; if ( synchronized() && CC() ) CC()->theCTau = theCTau; return theCTau; } PDT::Charge ParticleData::iCharge(PDT::Charge ci) { theCharge = ci; if ( synchronized() && CC() ) CC()->theCharge = PDT::Charge(-ci); return theCharge; } PDT::Spin ParticleData::iSpin(PDT::Spin si) { theSpin = si; if ( synchronized() && CC() ) CC()->theSpin = si; return si; } PDT::Colour ParticleData::iColour(PDT::Colour ci) { theColour = ci; if ( synchronized() && CC() ) CC()->theColour = PDT::Colour(-ci); return theColour; } void ParticleData::stable(bool s) { isStable = s; if ( synchronized() && CC() ) CC()->isStable = s; } void ParticleData::synchronized(bool h) { syncAnti = h; if ( CC() ) CC()->syncAnti = h; } void ParticleData::variableRatio(bool varRatio) { theVariableRatio=varRatio; } void ParticleData::addDecayMode(tDMPtr dm) { if ( member(theDecayModes, dm) ) return; cPDPtr parent = dm->parent(); if ( !parent ) parent = this; if ( parent != this ) { dm = dm->clone(this); } theDecayModes.insert(dm); theDecaySelector.insert(dm->brat(), dm); if ( CC() ) { if ( !synchronized() ) dm->CC()->switchOff(); CC()->theDecayModes.insert(dm->CC()); CC()->theDecaySelector.insert(dm->CC()->brat(), dm->CC()); } } void ParticleData::removeDecayMode(tDMPtr dm) { theDecayModes.erase(theDecayModes.find(dm)); theDecaySelector.erase(dm); if ( !CC() ) return; CC()->theDecayModes.erase(dm->CC()); CC()->theDecaySelector.erase(dm->CC()); } void ParticleData::synchronize() { if ( !CC() ) return; isStable = CC()->isStable; theMass = CC()->theMass; theWidth = CC()->theWidth; theWidthUpCut = CC()->theWidthUpCut; theWidthLoCut = CC()->theWidthLoCut; theCTau = CC()->theCTau; theCharge = PDT::Charge(-CC()->theCharge); theSpin = CC()->theSpin; theColour = PDT::antiColour(CC()->theColour); theMassGenerator = CC()->theMassGenerator; theWidthGenerator = CC()->theWidthGenerator; syncAnti = CC()->syncAnti; theDecaySelector.clear(); for ( DecaySet::iterator it = theDecayModes.begin(); it != theDecayModes.end(); ++it ) { (*it)->synchronize(); theDecaySelector.insert((*it)->brat(), *it); } } void ParticleData::doupdate() { Interfaced::doupdate(); bool redo = touched(); for_each(theDecayModes, UpdateChecker(redo)); UpdateChecker::check(theMassGenerator, redo); UpdateChecker::check(theWidthGenerator, redo); if ( !redo ) return; theDecaySelector.clear(); for ( DecaySet::const_iterator dit = theDecayModes.begin(); dit != theDecayModes.end(); ++dit ) { tDMPtr dm = *dit; dm->resetOverlap(); for ( DecaySet::const_iterator dit2 = theDecayModes.begin(); dit2 != theDecayModes.end(); ++dit2 ) if ( dit2 != dit ) dm->addOverlap(dm); if ( dm->brat() > 0.0 ) theDecaySelector.insert(dm->brat(), dm); } if ( theMassGenerator && !theMassGenerator->accept(*this) ) throw UpdateException(); if ( theWidthGenerator && !theWidthGenerator->accept(*this) ) throw UpdateException(); if ( theWidthGenerator ) theDecaySelector = theWidthGenerator->rate(*this); touch(); } tDMPtr ParticleData::selectMode(Particle & p) const { if ( &(p.data()) != this ) return tDMPtr(); try { if ( !theWidthGenerator || !theVariableRatio ) return theDecaySelector.select(UseRandom::current()); DecaySelector local; if ( theWidthGenerator ) local = theWidthGenerator->rate(p); else for ( DecaySet::const_iterator mit = theDecayModes.begin(); mit != theDecayModes.end(); ++mit ) local.insert((*mit)->brat(p), *mit); return local.select(UseRandom::current()); } catch (range_error) { return tDMPtr(); } } void ParticleData::rebind(const TranslationMap & trans) { if ( CC() ) theAntiPartner = trans.translate(theAntiPartner); DecaySet newModes; DecaySelector newSelector; for ( DecaySet::iterator it = theDecayModes.begin(); it != theDecayModes.end(); ++it ) { DMPtr dm; dm = trans.translate(*it); if ( !dm ) throw RebindException(); newModes.insert(dm); newSelector.insert(dm->brat(), dm); } theDecayModes.swap(newModes); theDecaySelector.swap(newSelector); } IVector ParticleData::getReferences() { IVector refs = Interfaced::getReferences(); if ( CC() ) refs.push_back(CC()); refs.insert(refs.end(), theDecayModes.begin(), theDecayModes.end()); return refs; } void ParticleData::massGenerator(tMassGenPtr mg) { if ( mg && !mg->accept(*this) ) return; if ( mg && synchronized() && CC() && !mg->accept(*CC()) ) return; theMassGenerator = mg; if ( synchronized() && CC() ) CC()->theMassGenerator = mg; } void ParticleData::widthGenerator(tWidthGeneratorPtr newGen) { if ( newGen && !newGen->accept(*this) ) return; if ( newGen && synchronized() && CC() && !newGen->accept(*CC()) ) return; theWidthGenerator = newGen; if ( synchronized() && CC() ) CC()->theWidthGenerator = newGen; } Energy ParticleData::generateMass() const { return massGenerator()? massGenerator()->mass(*this): mass(); } Energy ParticleData::generateWidth(Energy m) const { return widthGenerator()? widthGenerator()->width(*this, m): width(); } Length ParticleData::generateLifeTime(Energy m, Energy w) const { return widthGenerator() ? widthGenerator()->lifeTime(*this, m, w) : UseRandom::rndExp(cTau()); } PPtr ParticleData::produceParticle(const Lorentz5Momentum & pp) const { PPtr p = new_ptr(Particle(this)); p->set5Momentum(pp); return p; } PPtr ParticleData::produceParticle(const LorentzMomentum & pp) const { PPtr p(produceParticle(Lorentz5Momentum(pp))); return p; } PPtr ParticleData::produceParticle(const LorentzMomentum & pp, Energy m) const { PPtr p(produceParticle(Lorentz5Momentum(pp, m))); return p; } PPtr ParticleData::produceParticle(Energy m, const Momentum3 & pp) const { PPtr p(produceParticle(Lorentz5Momentum(m, pp))); return p; } PPtr ParticleData::produceParticle(const Momentum3 & pp) const { PPtr p(produceParticle(Lorentz5Momentum(generateMass(), pp))); return p; } PPtr ParticleData:: produceParticle(Energy plus, Energy minus, Energy px, Energy py) const { PPtr p(produceParticle(LorentzMomentum(px, py, 0.5*(plus-minus), 0.5*(plus+minus)))); return p; } void ParticleData::setMass(Energy mi) { theMass = mi; ParticleData * apd = CC().operator->(); if ( synchronized() && apd ) apd->theMass = theMass; } Energy ParticleData::defMass() const { return theDefMass; } void ParticleData::setWidth(Energy wi) { width(wi); } Energy ParticleData::getWidth() const { return width(); } Energy ParticleData::defWidth() const { return theDefWidth; } void ParticleData::setCut(Energy ci) { widthCut(ci); } Energy ParticleData::getCut() const { return (theWidthUpCut >= ZERO && theWidthLoCut >= ZERO)? max(theWidthUpCut, theWidthLoCut): min(theWidthUpCut, theWidthLoCut); } Energy ParticleData::defCut() const { return theDefCut; } void ParticleData::setUpCut(Energy ci) { widthUpCut(ci); } Energy ParticleData::getUpCut() const { return theWidthUpCut; } void ParticleData::setLoCut(Energy ci) { widthLoCut(ci); } Energy ParticleData::getLoCut() const { return theWidthLoCut; } void ParticleData::setCTau(Length ti) { cTau(ti); } Length ParticleData::getCTau() const { return cTau(); } Length ParticleData::defCTau() const { return theDefCTau; } void ParticleData::setStable(long is) { stable(is); } long ParticleData::getStable() const { return stable(); } void ParticleData::setSync(long is) { synchronized(is); } long ParticleData::getSync() const { return synchronized(); } void ParticleData::setVariableRatio(long is) { variableRatio(is); } long ParticleData::getVariableRatio() const { return variableRatio(); } string ParticleData::doSync(string) { synchronize(); return ""; } void ParticleData::setMassGenerator(MassGenPtr gi) { massGenerator(gi); } void ParticleData::setWidthGenerator(WidthGeneratorPtr wg) { widthGenerator(wg); } void ParticleData::setColour(long c) { theColour = PDT::Colour(c); } long ParticleData::getColour() const { return theColour; } long ParticleData::defColour() const { return theDefColour; } void ParticleData::setCharge(int c) { theCharge = PDT::Charge(c); } string ParticleData::ssetCharge(string arg) { istringstream is(arg); long i; if ( is >> i ) { theCharge = PDT::Charge(i); return "New charge is " + arg; } if ( arg == "unknown" ) theCharge = PDT::ChargeUnknown; else if ( arg == "charged" ) theCharge = PDT::Charged; else if ( arg == "positive" ) theCharge = PDT::Positive; else if ( arg == "negative" ) theCharge = PDT::Negative; else throw ParticleChargeCommand(*this, arg); return "New charge is " + arg; } int ParticleData::getCharge() const { return theCharge; } int ParticleData::defCharge() const { return theDefCharge; } void ParticleData::setSpin(int s) { theSpin = PDT::Spin(s); } int ParticleData::getSpin() const { return theSpin; } int ParticleData::defSpin() const { return theDefSpin; } ClassDescription ParticleData::initParticleData; struct ParticleOrdering { bool operator()(tcPDPtr p1, tcPDPtr p2) { return abs(p1->id()) > abs(p2->id()) || ( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) || ( p1->id() == p2->id() && p1->fullName() > p2->fullName() ); } }; struct ModeOrdering { bool operator()(const tcDMPtr & d1, const tcDMPtr & d2) { ParticleOrdering ord; return ord(d1->parent(), d2->parent()) || ( !ord(d2->parent(), d1->parent()) && ( d1->tag() < d2->tag() || ( d1->tag() == d2->tag() && d1->fullName() < d2->fullName() ) ) ); } }; void ParticleData::persistentOutput(PersistentOStream & os) const { multiset modes(theDecayModes.begin(), theDecayModes.end()); os << long(theId) << thePDGName << ounit(theMass, GeV) << ounit(theWidth, GeV) << ounit(theWidthUpCut, GeV) << ounit(theWidthLoCut, GeV) << ounit(theCTau, mm) << oenum(theCharge) << oenum(theSpin) << oenum(theColour); os << theMassGenerator << isStable << modes << theDecaySelector << theWidthGenerator << theVariableRatio << theAntiPartner << syncAnti << ounit(theDefMass, GeV) << ounit(theDefWidth, GeV) << ounit(theDefCut, GeV) << ounit(theDefCTau, mm) << oenum(theDefColour) << oenum(theDefCharge) << oenum(theDefSpin); } void ParticleData::persistentInput(PersistentIStream & is, int) { long id; is >> id >> thePDGName >> iunit(theMass, GeV) >> iunit(theWidth, GeV) >> iunit(theWidthUpCut, GeV) >> iunit(theWidthLoCut, GeV) >> iunit(theCTau, mm) >> ienum(theCharge) >> ienum(theSpin) >> ienum(theColour) >> theMassGenerator >> isStable >> theDecayModes >> theDecaySelector >> theWidthGenerator >> theVariableRatio >> theAntiPartner >> syncAnti >> iunit(theDefMass, GeV) >> iunit(theDefWidth, GeV) >> iunit(theDefCut, GeV) >> iunit(theDefCTau, mm) >> ienum(theDefColour) >> ienum(theDefCharge) >> ienum(theDefSpin); theId = id; } void ParticleData::Init() { static ClassDocumentation documentation ("There is no documentation for the ThePEG::ParticleData class"); static Parameter interfaceMass ("NominalMass", "The nominal mass in GeV of the particle. The actual mass " "of a particle instance is generated depending on the " "nominal mass and the width and is generated by the " "Mass_generator object associated with the " "particle.", &ParticleData::theMass, GeV, ZERO, ZERO, Constants::MaxEnergy, false, false, Interface::lowerlim, &ParticleData::setMass, 0, 0, 0, &ParticleData::defMass); static Parameter interfaceDefMass ("DefaultMass", "The default nominal mass in GeV of the particle. The actual mass " "of a particle instance is generated depending on the " "nominal mass and the width and is generated by the " "Mass_generator object associated with the " "particle.", &ParticleData::theDefMass, GeV, ZERO, ZERO, Constants::MaxEnergy, false, true, Interface::lowerlim); interfaceDefMass.setHasDefault(false); static Parameter interfaceWidth ("Width", "The width of the particle in GeV.", 0, GeV, ZERO, ZERO, Constants::MaxEnergy, false, false, Interface::lowerlim, &ParticleData::setWidth, &ParticleData::getWidth, 0, 0, &ParticleData::defWidth); static Parameter interfaceDefWidth ("DefaultWidth", "The default width of the particle in GeV.", &ParticleData::theDefWidth, GeV, ZERO, ZERO, Constants::MaxEnergy, false, true, Interface::lowerlim); interfaceDefWidth.setHasDefault(false); static Parameter interfaceWidthUpCut ("WidthUpCut", "The upper hard cutoff in GeV in generated mass, which is the maximum " "allowed upwards deviation from the nominal mass. A negative value " "corresponds to no limit.", 0, GeV, ZERO, -1.0*GeV, Constants::MaxEnergy, false, false, Interface::lowerlim, &ParticleData::setUpCut, &ParticleData::getUpCut, 0, 0, &ParticleData::defCut); static Parameter interfaceWidthLoCut ("WidthLoCut", "The lower hard cutoff in GeV in generated mass, which is the maximum " "allowed downwards deviation from the nominal mass. A negative value " "corresponds to no limit.", 0, GeV, ZERO, -1.0*GeV, Constants::MaxEnergy, false, false, Interface::lowerlim, &ParticleData::setLoCut, &ParticleData::getLoCut, 0, 0, &ParticleData::defCut); static Parameter interfaceWidthCut ("WidthCut", "The hard cutoff in GeV in generated mass, which is the maximum " "allowed deviation from the nominal mass. Sets both the upper and lower " "cut. (The displayed value is the maximium of the upper and lower cut.) " "A negative value corresponds to no limit.", 0, GeV, ZERO, -1.0*GeV, Constants::MaxEnergy, false, false, Interface::lowerlim, &ParticleData::setCut, &ParticleData::getCut, 0, 0, &ParticleData::defCut); interfaceWidthCut.setHasDefault(false); static Parameter interfaceDefWidthCut ("DefaultWidthCut", "The default hard cutoff in GeV in generated mass, which is the maximum " "allowed deviation from the nominal mass. For the actual cutoff, the " "upper and lower cut can be set separately.", &ParticleData::theDefCut, GeV, ZERO, ZERO, Constants::MaxEnergy, false, true, Interface::lowerlim); interfaceDefWidthCut.setHasDefault(false); static Parameter interfaceCTau ("LifeTime", "c times the average lifetime of the particle measuerd in mm." "The actual lifetime of a particle instance is generated " "from this number by the Mass_generator " "object associated with the particle.", 0, mm, ZERO, ZERO, Constants::MaxLength, false, false, Interface::lowerlim, &ParticleData::setCTau, &ParticleData::getCTau, 0, 0, &ParticleData::defCTau); interfaceCTau.setHasDefault(false); static Parameter interfaceDefCTau ("DefaultLifeTime", "c times the default average lifetime of the particle measuerd in mm." "The actual lifetime of a particle instance is generated " "from this number by the Mass_generator " "object associated with the particle.", &ParticleData::theDefCTau, mm, ZERO, ZERO, Constants::MaxLength, false, true, Interface::lowerlim); interfaceDefCTau.setHasDefault(false); static Switch interfaceColour ("Colour", "The colour quantum number of this particle type.", 0, -1, false, false, &ParticleData::setColour, &ParticleData::getColour, &ParticleData::defColour); static SwitchOption interfaceColourUndefined (interfaceColour, "Undefined", "The coulur is undefined.", -1); static SwitchOption interfaceColourNeutral (interfaceColour, "Neutral", "This particle is colour neutral.", 0); static SwitchOption interfaceColour3 (interfaceColour, "Triplet", "This particle is a colour triplet.", 3); static SwitchOption interfaceColour3bar (interfaceColour, "AntiTriplet", "This particle is a colour anti-triplet.", -3); static SwitchOption interfaceColour6 (interfaceColour, "Sextet", "This particle is a colour sextet.", 6); static SwitchOption interfaceColour6bar (interfaceColour, "AntiSextet", "This particle is a colour anti-sextet.", -6); static SwitchOption interfaceColour8 (interfaceColour, "Octet", "This particle is a colour octet.", 8); static Switch interfaceDefColour ("DefaultColour", "The default colour quantum number of this particle type.", &ParticleData::theDefColour, PDT::Colour(-1), false, true); static SwitchOption interfaceDefColourUndefined (interfaceDefColour, "Undefined", "The coulur is undefined.", -1); static SwitchOption interfaceDefColourNeutral (interfaceDefColour, "Neutral", "This particle is colour neutral.", 0); static SwitchOption interfaceDefColour3 (interfaceDefColour, "Triplet", "This particle is a colour triplet.", 3); static SwitchOption interfaceDefColour3bar (interfaceDefColour, "AntiTriplet", "This particle is a colour anti-triplet.", -3); static SwitchOption interfaceDefColour6 (interfaceDefColour, "Sextet", "This particle is a colour sextet.", 6); static SwitchOption interfaceDefColour6bar (interfaceDefColour, "AntiSextet", "This particle is a colour anti-sextet.", -6); static SwitchOption interfaceDefColour8 (interfaceDefColour, "Octet", "This particle is a colour octet.", 8); interfaceDefColour.setHasDefault(false); static Parameter interfaceCharge ("Charge", "The charge of this particle in units of e/3. " "See also the command interface SetCharge.", 0, 0, -24, 24, false, false, true, &ParticleData::setCharge, &ParticleData::getCharge, 0, 0, &ParticleData::defCharge); static Parameter interfaceDefCharge ("DefaultCharge", "The default charge of this particle in units of e/3. " "See also the command interface SetCharge.", &ParticleData::theDefCharge, PDT::Charge(0), PDT::Charge(-24), PDT::Charge(24), false, true, true); interfaceDefCharge.setHasDefault(false); static Command interfaceSetCharge ("SetCharge", "Set the charge of this particle. The argument should be given as an " "interger giving three times the unit charge, or 'unknown', " "'charged', 'positive' or 'negative'", &ParticleData::ssetCharge); static Parameter interfaceSpin ("Spin", "The spin quantim number of this particle on the form 2j+1.", 0, 0, 0, 9, false, false, true, &ParticleData::setSpin, &ParticleData::getSpin, 0, 0, &ParticleData::defSpin); static Parameter interfaceDefSpin ("DefaultSpin", "The default spin quantim number of this particle on the form 2j+1.", &ParticleData::theDefSpin, PDT::Spin(0), PDT::Spin(0), PDT::Spin(9), false, true, true); interfaceDefSpin.setHasDefault(false); static Switch interfaceStable ("Stable", "Indicates if the particle is stable or not.", 0, 0, false, false, &ParticleData::setStable, &ParticleData::getStable, 0); static SwitchOption interfaceStableYes (interfaceStable, "Stable", "This particle is stable", 1); static SwitchOption interfaceStableNo (interfaceStable, "Unstable", "This particle is not stable", 0); interfaceStable.setHasDefault(false); static Switch interfaceVariableRatio ("VariableRatio", "Indicates if the branching ratios of the particle are allowed" " to vary for given Particle instances depending on the mass of the instance.", 0, 0, false, false, &ParticleData::setVariableRatio, &ParticleData::getVariableRatio, 0); static SwitchOption interfaceVariableRatioYes (interfaceVariableRatio, "Yes", "The branching ratio varies.", 1); static SwitchOption interfaceVariableRatioNo (interfaceVariableRatio, "No", "The branching ratio does not vary.", 0); static Switch interfaceSync ("Synchronized", "Indicates if the changes to this particle is propagated to " "its anti-partner or not. Note that setting this switch does not " "actually synchronize the properties with the anti-partner, " "it only assures that following changes are propagated. " "To sync the particle with its anti-particle, use the " "Synchronize command.", 0, 1, false, false, &ParticleData::setSync, &ParticleData::getSync, 0); static SwitchOption interfaceSyncYes (interfaceSync, "Synchronized", "Changes to this particle will propagate to its " "anti-partner", 1); static SwitchOption interfaceSyncNo (interfaceSync, "Not_synchronized", "Changes to this particle will propagate to its " "anti-partner", 0); interfaceSync.setHasDefault(false); static Command interfaceSynchronize ("Synchronize", "Synchronizes this particle so that all its properties " "correspond to those of its anti-partner", &ParticleData::doSync, false); static Reference interfaceMassGenerator ("Mass_generator", "An object derived from the ThePEG::MassGenerator" "class, which is able to generate a mass for a given " "particle instance", &ParticleData::theMassGenerator, false, false, true, true, &ParticleData::setMassGenerator, 0, 0); static Reference interfaceWidthGenerator ("Width_generator", "An object derived from the ThePEG::WidthGenerator class, " "which is able to calculate the full and partial widths for" "this particle type and for a given instance of this " "particle type.", &ParticleData::theWidthGenerator, false, false, true, true, &ParticleData::setWidthGenerator, 0, 0); static RefVector interfaceDecayModes ("DecayModes", "The list of decay modes defined for this particle type.", 0, -1, false, false, false, false, 0, &ParticleData::insDecayModes, &ParticleData::delDecayModes, &ParticleData::getDecayModes); static Command interfaceSelectDecayModes ("SelectDecayModes", "Only the decay modes which are given as (white-space separated) " "decay tags will be switched on, all others will be switched off. " "If no argument or 'none' is given, all decay modes are switched off. " "If the argument is 'all', all decay modes are switched on.", &ParticleData::doSelectDecayModes, false); static Command interfacePrintDecayModes ("PrintDecayModes", "Print all decay modes of this particle.", &ParticleData::doPrintDecayModes, true); interfaceStable.rank(14); interfaceDecayModes.rank(13); interfaceMass.rank(12); interfaceWidth.rank(11); interfaceWidthCut.rank(10); interfaceCTau.rank(9); interfaceMassGenerator.rank(8); interfaceWidthGenerator.rank(7); interfaceWidthUpCut.rank(-0.1); interfaceWidthLoCut.rank(-0.1); } string ParticleData::doPrintDecayModes(string) { multimap > sorted; for ( DecaySet::iterator it = decayModes().begin(); it != decayModes().end(); ++it ) sorted.insert(make_pair((**it).brat(), *it)); ostringstream os; for ( multimap >::iterator it = sorted.begin(); it != sorted.end(); ++it ) os << it->second->tag() << (it->second->on()? " ": " (off) ") << it->first << endl; return os.str(); } string ParticleData::doSelectDecayModes(string args) { DecaySet on; while ( !args.empty() ) { string arg = StringUtils::car(args); if ( arg == "all" ) { on = decayModes(); break; } if ( arg == "none" ) { on.clear(); break; } string name = arg; args = StringUtils::cdr(args); if ( arg.empty() ) continue; if ( arg[0] != '/' ) arg = fullName() + "/" + arg; DMPtr dm = Repository::GetPtr(arg); if ( !dm ) return "Error: No decay mode with tag '" + name + "' exists."; on.insert(dm); } for ( DecaySet::iterator it = decayModes().begin(); it != decayModes().end(); ++it ) { if ( on.find(*it) != on.end() ) { (**it).switchOn(); on.erase(*it); } else { (**it).switchOff(); } } if ( !on.empty() ) return "Error: decay mode '" + (**on.begin()).tag() + "'was not available."; return ""; } void ParticleData::insDecayModes(DMPtr dm, int) { addDecayMode(dm); } void ParticleData::delDecayModes(int i) { vector mv = getDecayModes(); if ( i >= 0 && static_cast(i) < mv.size() ) removeDecayMode(mv[i]); } vector ParticleData::getDecayModes() const { return vector(theDecayModes.begin(), theDecayModes.end()); } ParticleChargeCommand:: ParticleChargeCommand(const ParticleData & pd, string arg) { theMessage << "Cannot set the charge of particle '" << pd.name() << "' to '" << arg << "'."; severity(warning); } void ParticleData::doinit() { Interfaced::doinit(); if( theMassGenerator ) theMassGenerator->init(); if( theWidthGenerator ) theWidthGenerator->init(); } void ParticleData::doinitrun() { Interfaced::doinitrun(); if( theMassGenerator ) theMassGenerator->initrun(); if( theWidthGenerator ) theWidthGenerator->initrun(); } } thepeg-1.8.0.orig/PDT/Makefile.in0000644000175000017500000007763211756366734014664 0ustar sunsun# Makefile.in generated by automake 1.12 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software # Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__make_dryrun = \ { \ am__dry=no; \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ *) \ for am__flg in $$MAKEFLAGS; do \ case $$am__flg in \ *=*|--*) ;; \ *n*) am__dry=yes; break;; \ esac; \ done;; \ esac; \ test $$am__dry = yes; \ } pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(top_srcdir)/Config/Makefile.aminclude \ $(top_srcdir)/Config/depcomp subdir = PDT ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compiler_vendor.m4 \ $(top_srcdir)/m4/hepmc.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/rivet.m4 $(top_srcdir)/m4/thepeg.m4 \ $(top_srcdir)/m4/vl_readline.m4 $(top_srcdir)/m4/zlib.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/Config/config.h \ $(top_builddir)/Config/LWH.h \ $(top_builddir)/Config/ThePEG_Qty.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkglibdir)" LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkglib_LTLIBRARIES) BreitWignerMass_la_LIBADD = am_BreitWignerMass_la_OBJECTS = BreitWignerMass.lo BreitWignerMass_la_OBJECTS = $(am_BreitWignerMass_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent BreitWignerMass_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(BreitWignerMass_la_LDFLAGS) \ $(LDFLAGS) -o $@ ColourPairDecayer_la_LIBADD = am_ColourPairDecayer_la_OBJECTS = ColourPairDecayer.lo ColourPairDecayer_la_OBJECTS = $(am_ColourPairDecayer_la_OBJECTS) ColourPairDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(ColourPairDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ DalitzDecayer_la_LIBADD = am_DalitzDecayer_la_OBJECTS = DalitzDecayer.lo DalitzDecayer_la_OBJECTS = $(am_DalitzDecayer_la_OBJECTS) DalitzDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(DalitzDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ OmegaPhi3PiDecayer_la_LIBADD = am_OmegaPhi3PiDecayer_la_OBJECTS = OmegaPhi3PiDecayer.lo OmegaPhi3PiDecayer_la_OBJECTS = $(am_OmegaPhi3PiDecayer_la_OBJECTS) OmegaPhi3PiDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(OmegaPhi3PiDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ Onium3GDecayer_la_LIBADD = am_Onium3GDecayer_la_OBJECTS = Onium3GDecayer.lo Onium3GDecayer_la_OBJECTS = $(am_Onium3GDecayer_la_OBJECTS) Onium3GDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(Onium3GDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ QuarksToHadronsDecayer_la_LIBADD = am_QuarksToHadronsDecayer_la_OBJECTS = QuarksToHadronsDecayer.lo QuarksToHadronsDecayer_la_OBJECTS = \ $(am_QuarksToHadronsDecayer_la_OBJECTS) QuarksToHadronsDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) \ $(QuarksToHadronsDecayer_la_LDFLAGS) $(LDFLAGS) -o $@ Tau2HadronsDecayer_la_LIBADD = am_Tau2HadronsDecayer_la_OBJECTS = Tau2HadronsDecayer.lo Tau2HadronsDecayer_la_OBJECTS = $(am_Tau2HadronsDecayer_la_OBJECTS) Tau2HadronsDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(Tau2HadronsDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ V2PPDecayer_la_LIBADD = am_V2PPDecayer_la_OBJECTS = V2PPDecayer.lo V2PPDecayer_la_OBJECTS = $(am_V2PPDecayer_la_OBJECTS) V2PPDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(V2PPDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ WeakToHadronsDecayer_la_LIBADD = am_WeakToHadronsDecayer_la_OBJECTS = WeakToHadronsDecayer.lo WeakToHadronsDecayer_la_OBJECTS = \ $(am_WeakToHadronsDecayer_la_OBJECTS) WeakToHadronsDecayer_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(AM_CXXFLAGS) $(CXXFLAGS) $(WeakToHadronsDecayer_la_LDFLAGS) \ $(LDFLAGS) -o $@ libThePEGPDT_la_LIBADD = am__objects_1 = ParticleData.lo DecayMode.lo MatcherBase.lo Matcher.lo \ Decayer.lo MassGenerator.lo WidthGenerator.lo DummyDecayer.lo \ ConstituentParticleData.lo FlatDecayer.lo PDT.lo \ RemnantData.lo RemnantDecayer.lo SimpleBaryonRemnantDecayer.lo \ MixedParticleData.lo am__objects_2 = am__objects_3 = $(am__objects_2) am_libThePEGPDT_la_OBJECTS = $(am__objects_1) $(am__objects_3) libThePEGPDT_la_OBJECTS = $(am_libThePEGPDT_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/Config depcomp = $(SHELL) $(top_srcdir)/Config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CXXFLAGS) $(CXXFLAGS) AM_V_CXX = $(am__v_CXX_@AM_V@) am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@) am__v_CXX_0 = @echo " CXX " $@; AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ CXXLD = $(CXX) CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \ $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CXXLD = $(am__v_CXXLD_@AM_V@) am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@) am__v_CXXLD_0 = @echo " CXXLD " $@; COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(BreitWignerMass_la_SOURCES) \ $(ColourPairDecayer_la_SOURCES) $(DalitzDecayer_la_SOURCES) \ $(OmegaPhi3PiDecayer_la_SOURCES) $(Onium3GDecayer_la_SOURCES) \ $(QuarksToHadronsDecayer_la_SOURCES) \ $(Tau2HadronsDecayer_la_SOURCES) $(V2PPDecayer_la_SOURCES) \ $(WeakToHadronsDecayer_la_SOURCES) $(libThePEGPDT_la_SOURCES) DIST_SOURCES = $(BreitWignerMass_la_SOURCES) \ $(ColourPairDecayer_la_SOURCES) $(DalitzDecayer_la_SOURCES) \ $(OmegaPhi3PiDecayer_la_SOURCES) $(Onium3GDecayer_la_SOURCES) \ $(QuarksToHadronsDecayer_la_SOURCES) \ $(Tau2HadronsDecayer_la_SOURCES) $(V2PPDecayer_la_SOURCES) \ $(WeakToHadronsDecayer_la_SOURCES) $(libThePEGPDT_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_CPPFLAGS = @AM_CPPFLAGS@ AM_CXXFLAGS = @AM_CXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_LDFLAGS = @AM_LDFLAGS@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BZ2READ_FILE = @BZ2READ_FILE@ BZ2WRITE_FILE = @BZ2WRITE_FILE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CREATE_HEPMC = @CREATE_HEPMC@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMPTY = @EMPTY@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GSLINCLUDE = @GSLINCLUDE@ GSLLIBS = @GSLLIBS@ GZREAD_FILE = @GZREAD_FILE@ GZWRITE_FILE = @GZWRITE_FILE@ HEPMCINCLUDE = @HEPMCINCLUDE@ HEPMCLIBS = @HEPMCLIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JAR = @JAR@ JAVA = @JAVA@ JAVAC = @JAVAC@ LD = @LD@ LDFLAGS = @LDFLAGS@ LHAPDF_LDFLAGS = @LHAPDF_LDFLAGS@ LHAPDF_LIBS = @LHAPDF_LIBS@ LHAPDF_PKGDATADIR = @LHAPDF_PKGDATADIR@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIBTOOLVERSIONINFO = @LIBTOOLVERSIONINFO@ LIPO = @LIPO@ LN_S = @LN_S@ LOAD_HEPMC = @LOAD_HEPMC@ LOAD_LHAPDF = @LOAD_LHAPDF@ LOAD_RIVET = @LOAD_RIVET@ LTLIBOBJS = @LTLIBOBJS@ LWHINCLUDE = @LWHINCLUDE@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ RANLIB = @RANLIB@ RIVETINCLUDE = @RIVETINCLUDE@ RIVETLIBS = @RIVETLIBS@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ mySOURCES = ParticleData.cc DecayMode.cc MatcherBase.cc Matcher.cc Decayer.cc \ MassGenerator.cc WidthGenerator.cc DummyDecayer.cc \ ConstituentParticleData.cc FlatDecayer.cc PDT.cc RemnantData.cc \ RemnantDecayer.cc SimpleBaryonRemnantDecayer.cc MixedParticleData.cc DOCFILES = CombinedMatcher.h DecayMode.h WidthGenerator.h Decayer.h \ EnumParticles.h MassGenerator.h Matcher.h MatcherBase.h PDT.h \ PID.h ParticleData.h StandardMatchers.h DummyDecayer.h \ ConstituentParticleData.h FlatDecayer.h RemnantData.h \ RemnantDecayer.h SimpleBaryonRemnantDecayer.h MixedParticleData.h INCLUDEFILES = $(DOCFILES) DecayMode.fh \ DecayMode.xh WidthGenerator.fh Decayer.fh \ MassGenerator.fh \ Matcher.tcc ParticleData.xh \ RemnantData.fh RemnantDecayer.fh MixedParticleData.fh noinst_LTLIBRARIES = libThePEGPDT.la pkglib_LTLIBRARIES = BreitWignerMass.la OmegaPhi3PiDecayer.la \ V2PPDecayer.la DalitzDecayer.la Tau2HadronsDecayer.la \ Onium3GDecayer.la QuarksToHadronsDecayer.la ColourPairDecayer.la \ WeakToHadronsDecayer.la libThePEGPDT_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed BreitWignerMass_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) BreitWignerMass_la_SOURCES = BreitWignerMass.cc BreitWignerMass.h # Version info should be updated if any interface or persistent I/O # function is changed OmegaPhi3PiDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) OmegaPhi3PiDecayer_la_SOURCES = OmegaPhi3PiDecayer.cc OmegaPhi3PiDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed V2PPDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) V2PPDecayer_la_SOURCES = V2PPDecayer.cc V2PPDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed DalitzDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) DalitzDecayer_la_SOURCES = DalitzDecayer.cc DalitzDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed Tau2HadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) Tau2HadronsDecayer_la_SOURCES = Tau2HadronsDecayer.cc Tau2HadronsDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed Onium3GDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) Onium3GDecayer_la_SOURCES = Onium3GDecayer.cc Onium3GDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed QuarksToHadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) QuarksToHadronsDecayer_la_SOURCES = QuarksToHadronsDecayer.cc QuarksToHadronsDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed ColourPairDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ColourPairDecayer_la_SOURCES = ColourPairDecayer.cc ColourPairDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed WeakToHadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) WeakToHadronsDecayer_la_SOURCES = WeakToHadronsDecayer.cc WeakToHadronsDecayer.h all: all-am .SUFFIXES: .SUFFIXES: .cc .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/Config/Makefile.aminclude $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu PDT/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu PDT/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_srcdir)/Config/Makefile.aminclude: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } install-pkglibLTLIBRARIES: $(pkglib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkglibdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkglibdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkglibdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkglibdir)"; \ } uninstall-pkglibLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkglib_LTLIBRARIES)'; test -n "$(pkglibdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ done clean-pkglibLTLIBRARIES: -test -z "$(pkglib_LTLIBRARIES)" || rm -f $(pkglib_LTLIBRARIES) @list='$(pkglib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } BreitWignerMass.la: $(BreitWignerMass_la_OBJECTS) $(BreitWignerMass_la_DEPENDENCIES) $(EXTRA_BreitWignerMass_la_DEPENDENCIES) $(AM_V_CXXLD)$(BreitWignerMass_la_LINK) -rpath $(pkglibdir) $(BreitWignerMass_la_OBJECTS) $(BreitWignerMass_la_LIBADD) $(LIBS) ColourPairDecayer.la: $(ColourPairDecayer_la_OBJECTS) $(ColourPairDecayer_la_DEPENDENCIES) $(EXTRA_ColourPairDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(ColourPairDecayer_la_LINK) -rpath $(pkglibdir) $(ColourPairDecayer_la_OBJECTS) $(ColourPairDecayer_la_LIBADD) $(LIBS) DalitzDecayer.la: $(DalitzDecayer_la_OBJECTS) $(DalitzDecayer_la_DEPENDENCIES) $(EXTRA_DalitzDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(DalitzDecayer_la_LINK) -rpath $(pkglibdir) $(DalitzDecayer_la_OBJECTS) $(DalitzDecayer_la_LIBADD) $(LIBS) OmegaPhi3PiDecayer.la: $(OmegaPhi3PiDecayer_la_OBJECTS) $(OmegaPhi3PiDecayer_la_DEPENDENCIES) $(EXTRA_OmegaPhi3PiDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(OmegaPhi3PiDecayer_la_LINK) -rpath $(pkglibdir) $(OmegaPhi3PiDecayer_la_OBJECTS) $(OmegaPhi3PiDecayer_la_LIBADD) $(LIBS) Onium3GDecayer.la: $(Onium3GDecayer_la_OBJECTS) $(Onium3GDecayer_la_DEPENDENCIES) $(EXTRA_Onium3GDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(Onium3GDecayer_la_LINK) -rpath $(pkglibdir) $(Onium3GDecayer_la_OBJECTS) $(Onium3GDecayer_la_LIBADD) $(LIBS) QuarksToHadronsDecayer.la: $(QuarksToHadronsDecayer_la_OBJECTS) $(QuarksToHadronsDecayer_la_DEPENDENCIES) $(EXTRA_QuarksToHadronsDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(QuarksToHadronsDecayer_la_LINK) -rpath $(pkglibdir) $(QuarksToHadronsDecayer_la_OBJECTS) $(QuarksToHadronsDecayer_la_LIBADD) $(LIBS) Tau2HadronsDecayer.la: $(Tau2HadronsDecayer_la_OBJECTS) $(Tau2HadronsDecayer_la_DEPENDENCIES) $(EXTRA_Tau2HadronsDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(Tau2HadronsDecayer_la_LINK) -rpath $(pkglibdir) $(Tau2HadronsDecayer_la_OBJECTS) $(Tau2HadronsDecayer_la_LIBADD) $(LIBS) V2PPDecayer.la: $(V2PPDecayer_la_OBJECTS) $(V2PPDecayer_la_DEPENDENCIES) $(EXTRA_V2PPDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(V2PPDecayer_la_LINK) -rpath $(pkglibdir) $(V2PPDecayer_la_OBJECTS) $(V2PPDecayer_la_LIBADD) $(LIBS) WeakToHadronsDecayer.la: $(WeakToHadronsDecayer_la_OBJECTS) $(WeakToHadronsDecayer_la_DEPENDENCIES) $(EXTRA_WeakToHadronsDecayer_la_DEPENDENCIES) $(AM_V_CXXLD)$(WeakToHadronsDecayer_la_LINK) -rpath $(pkglibdir) $(WeakToHadronsDecayer_la_OBJECTS) $(WeakToHadronsDecayer_la_LIBADD) $(LIBS) libThePEGPDT.la: $(libThePEGPDT_la_OBJECTS) $(libThePEGPDT_la_DEPENDENCIES) $(EXTRA_libThePEGPDT_la_DEPENDENCIES) $(AM_V_CXXLD)$(CXXLINK) $(libThePEGPDT_la_OBJECTS) $(libThePEGPDT_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BreitWignerMass.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ColourPairDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConstituentParticleData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DalitzDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DecayMode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Decayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DummyDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FlatDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MassGenerator.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Matcher.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MatcherBase.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/MixedParticleData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OmegaPhi3PiDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Onium3GDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PDT.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParticleData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/QuarksToHadronsDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RemnantData.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/RemnantDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/SimpleBaryonRemnantDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Tau2HadronsDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/V2PPDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WeakToHadronsDecayer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/WidthGenerator.Plo@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .cc.lo: @am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: $(HEADERS) $(SOURCES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(pkglibdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ clean-pkglibLTLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-pkglibLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkglibLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES clean-pkglibLTLIBRARIES \ cscopelist ctags distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-pkglibLTLIBRARIES install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \ pdf pdf-am ps ps-am tags uninstall uninstall-am \ uninstall-pkglibLTLIBRARIES debug: $(MAKE) CXXFLAGS=-g SHOWCOMMAND=1 libdebug: debug cd ../lib; $(MAKE) liblib: all cd ../lib; $(MAKE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: thepeg-1.8.0.orig/PDT/ConstituentParticleData.h0000644000175000017500000000777611747772425017565 0ustar sunsun// -*- C++ -*- // // ConstituentParticleData.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ConstituentParticleData_H #define ThePEG_ConstituentParticleData_H // This is the declaration of the ConstituentParticleData class. #include "ThePEG/PDT/ParticleData.h" namespace ThePEG { /** * ConstituentParticleData inherits from the ParticleData class and is * used for quarks, diquarks and gluons to store information about * their constituent mass. * * @see \ref ConstituentParticleDataInterfaces "The interfaces" * defined for ConstituentParticleData. */ class ConstituentParticleData: public virtual ParticleData { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ConstituentParticleData() : theConstituentMass(ZERO), theDefaultConstituentMass(ZERO) {} //@} /** @name The Create methods are special interfaces for ParticleData classes. */ //@{ /** * Create a Particle which is its own anti-particle. */ static PDPtr Create(long newId, string newPDGName); /** * Create a particle - anti particle pair. */ static PDPair Create(long newId, string newPDGName, string newAntiPDGName); //@} public: /** * Return the constituent mass of this parton. */ virtual Energy constituentMass() const { return theConstituentMass; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** * Protected constructor only to be used by subclasses or by the * Create method. */ ConstituentParticleData(long newId, string newPDGName); /** * Read setup info from a standard stream. The information that must * be supplied is the same as for ParticleData::readSetup with an * additional constituent mass (in GeV) added in the end. */ virtual void readSetup(istream & is); /** * ParticleData clone method */ virtual PDPtr pdclone() const; private: /** * Utility function for the interface. */ void setConstituentMass(Energy m); /** * Utility function for the interface. */ Energy defConstituentMass() const; private: /** * The constituent mass of this parton. */ Energy theConstituentMass; /** * The default constituent mass of this parton. */ Energy theDefaultConstituentMass; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initConstituentParticleData; /** * Private and non-existent assignment operator. */ ConstituentParticleData & operator=(const ConstituentParticleData &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of ConstituentParticleData. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ConstituentParticleData. */ typedef ParticleData NthBase; }; /** This template specialization informs ThePEG about the name of the * ConstituentParticleData class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ConstituentParticleData"; } }; /** @endcond */ } #endif /* ThePEG_ConstituentParticleData_H */ thepeg-1.8.0.orig/PDT/QuarksToHadronsDecayer.h0000644000175000017500000001572311747772425017344 0ustar sunsun// -*- C++ -*- // // QuarksToHadronsDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_QuarksToHadronsDecayer_H #define THEPEG_QuarksToHadronsDecayer_H // This is the declaration of the QuarksToHadronsDecayer class. #include "ThePEG/PDT/Decayer.h" #include "ThePEG/Handlers/FlavourGenerator.h" namespace ThePEG { ThePEG_DECLARE_CLASS_POINTERS(FlavourGenerator, FlavGenPtr); /** * The QuarksToHadronsDecayer class inherits from Decayer and is able * to decay particles to \f$n_q\f$ (2 or 4) quarks which then are * decayed to hadrons according to phase space. The number of final * hadrons can either be given by a fixed number or as a Gaussian * multiplicity distribution centered around \f$c+n_q/4+c_3\f$ and a * width \f$\sqrt{c}\f$, where \f$c = c_1 \log((m - \sum m)/c_2)\f$, * \f$m\f$ is the mass of the decaying particle, \f$\sum m\f$ the sum * of the quark masses and \f$c_i\f$ real parameters. * * @see \ref QuarksToHadronsDecayerInterfaces "The interfaces" * defined for QuarksToHadronsDecayer. * @see ParticleData * */ class QuarksToHadronsDecayer: public Decayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ QuarksToHadronsDecayer() : theFixedN(0), theMinN(2), theC1(4.5), theC2(0.7*GeV), theC3(0.0) {} /** * Destructor. */ virtual ~QuarksToHadronsDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const; //@} /** * Get the number of hadrons to be produced, given the mass of the * decaying particle, \a m0, and the number, \a Nq and summed masses * of the quarks, \a summq. */ virtual int getN(Energy m0, Energy summq, int Nq) const; /** * Produce \a Nh hadrons from the specified \a quarks. The last * quark is considered to be a spectator quark. */ virtual PVector getHadrons(int Nh, tcPDVector quarks) const; /** * Distribute the produced children in phase space. This default * version uses a flat phase space which can be reweighted by * overriding the reweight() function. */ virtual void distribute(const Particle & parent, PVector & children) const; /** * Called by distribute() to reweight the default flat phase * spece. Can be overridden by sub-classes and should return a * number between 0 and 1. This version returns 1. */ virtual double reweight(const Particle & parent, const PVector & children) const; public: /** * Return the fixed number of hadrons to be produced. If less than * 2, the number is instead given by a gaussian multiplicity * distribution. */ int fixedN() const { return theFixedN; } /** * Return the minimum number of hadrons to be produced. */ int minN() const { return theMinN; } /** * Return the parameter \f$c_1\f$ used for the multiplicity * distriution. */ double c1() const { return theC1; } /** * Return the parameter \f$c_2\f$ used for the multiplicity * distriution. */ Energy c2() const { return theC2; } /** * Return the parameter \f$c_3\f$ used for the multiplicity * distriution. */ double c3() const { return theC3; } /** * Return a pointer to the flavour generator to be used. */ tcFlavGenPtr flavourGenerator() const { return theFlavourGenerator; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * The fixed number of hadrons to be produced. If less than 2, the * number is instead given by a gaussian multiplicity distribution. */ int theFixedN; /** * The minimum hadrons to be produced. */ int theMinN; /** * The parameter \f$c_1\f$ of the multiplicity distribution. */ double theC1; /** * The parameter \f$c_2\f$ of the multiplicity distribution. */ Energy theC2; /** * The parameter \f$c_3\f$ of the multiplicity distribution. */ double theC3; /** * The object in charge of generating hadrons spieces from given * quark flavours. */ FlavGenPtr theFlavourGenerator; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initQuarksToHadronsDecayer; /** * Private and non-existent assignment operator. */ QuarksToHadronsDecayer & operator=(const QuarksToHadronsDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of QuarksToHadronsDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of QuarksToHadronsDecayer. */ typedef Decayer NthBase; }; /** This template specialization informs ThePEG about the name of the * QuarksToHadronsDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::QuarksToHadronsDecayer"; } /** Return the name of the shared library be loaded to get access to * the QuarksToHadronsDecayer class and every other class it uses * (except the base class). */ static string library() { return "QuarksToHadronsDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_QuarksToHadronsDecayer_H */ thepeg-1.8.0.orig/PDT/ParticleData.h0000644000175000017500000004741211747772425015314 0ustar sunsun// -*- C++ -*- // // ParticleData.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ParticleData_H #define ThePEG_ParticleData_H // This is the declaration of the ParticleData class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/PDT/PDT.h" #include "ThePEG/PDT/PID.h" #include "ThePEG/Vectors/LorentzVector.h" #include "ThePEG/Vectors/ThreeVector.h" #include "ThePEG/Interface/Interfaced.h" #include "ThePEG/Utilities/Selector.h" #include "ThePEG/PDT/WidthGenerator.h" #include "ThePEG/PDT/MassGenerator.h" #include "ThePEG/PDT/DecayMode.fh" #include "ThePEG/Utilities/ClassTraits.h" #include "ThePEG/Utilities/ClassDescription.h" namespace ThePEG { /** * ParticleData inherits from InterfacedBase and represents the * properties of a particle type. It is also able to produce instances * of this Particle type and, among other things, to decay them. * * @see \ref ParticleDataInterfaces "The interfaces" * defined for ParticleData. */ class ParticleData: public Interfaced { public: /** The Repository is a friend. */ friend class Repository; /** The EventGenerator is a friend. */ friend class EventGenerator; /** DecayMode is a friend. */ friend class DecayMode; /** A selector of DecayMode objects. */ typedef Selector DecaySelector; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ParticleData(); /** * Destructor. */ virtual ~ParticleData(); //@} /** @name The Create methods are special interfaces for ParticleData classes. */ //@{ /** * Create a Particle which is its own anti-particle. */ static PDPtr Create(PID newId, const string & newPDGName); /** * Create a particle - anti particle pair. */ static PDPair Create(PID newId, const string & newPDGName, const string & newAntiPDGName); //@} public: /** @name Acces to number and name. */ //@{ /** * Return the PDG id number. */ long id() const { return theId; } /** * Return the generic PDG name. Note that this is not really * standardised. */ const string & PDGName() const { return thePDGName; } /** * Return the generic PDG name. Note that this is not really * standardised. */ const string & genericName() const { return thePDGName; } //@} /** @name Functions used for producing Particle instances. */ //@{ /** * Produce a particle specifying momentum. */ PPtr produceParticle(const Lorentz5Momentum &) const; /** * Produce a particle specifying momentum. */ PPtr produceParticle(const LorentzMomentum &) const; /** * Produce a particle specifying 4-momentum and a mass. */ PPtr produceParticle(const LorentzMomentum &, Energy m) const; /** * Produce a particle specifying 3-momentum. */ PPtr produceParticle(const Momentum3 & pp = Momentum3()) const; /** * Produce a particle specifying mass and 3-momentum. */ PPtr produceParticle(Energy m, const Momentum3 & pp = Momentum3()) const; /** * Produce a particle specifying light-cone momentum components and * transverse momentum components. */ PPtr produceParticle(Energy plus, Energy minus, Energy px, Energy py) const; /** * Generate a mass for an instance of this particle type. */ Energy generateMass() const; /** * Generate a width for an instance of this particle type. Given a * \a mass of an instance of this particle type, calculate its width. */ Energy generateWidth(Energy mass) const; /** * Generate a mass for an instance of this particle type. Given a \a * mass and a \a width of an instance of this particle type, * generate a life time. */ Length generateLifeTime(Energy mass, Energy width) const; // Given a mass and a width of an instance of this particle type, // generate a life time. //@} /** @name Access the decay modes. */ //@{ /** * Return the nominal decay selector for this particle. Ie. the * decay modes weighted by their nominal branching ratios. */ const DecaySelector & decaySelector() const { return theDecaySelector; } /** * Selects a decay mode randomly according to the branching * ratios. The nominal branching ratios may be changed for the * particular Particle instance \a p, iether by an assigned * WidthGenerator or the respective Decayers. */ tDMPtr selectMode(Particle & p) const; /** * Access all the decay modes, including those which are * switched off, or have zero branching ratio */ const DecaySet & decayModes() const { return theDecayModes; } //@} /** * Return the nominal mass. */ Energy mass() const { return theMass; } /** * Return the maximum possible mass of this particle type. */ Energy massMax() const { return mass() + widthUpCut(); } /** * Return the minimum possible mass of this particle type. */ Energy massMin() const { return max(mass() - widthLoCut(), ZERO); } /** * Return the constituent mass of this particle if relevant. This * version simply returns the nominal mass. */ virtual Energy constituentMass() const { return mass(); } /** * Set the width. */ Energy width(Energy); /** * Get the width. If no width is specified, it is calculated from * the lifetime. */ Energy width() const { return theWidth >= ZERO ? theWidth : ( theCTau > Length() ? hbarc/theCTau : ( theCTau == Length() ? Constants::MaxEnergy : ZERO ) ); } /** * Set the width cut. Both upper and lower cut is set. */ Energy widthCut(Energy wci) { widthUpCut(wci); return widthLoCut(wci); } /** * Get the width cut. */ Energy widthCut() const { return max(widthUpCut(), widthLoCut()); } /** * Set the upper width cut. */ Energy widthUpCut(Energy); /** * Get the upper width cut. */ Energy widthUpCut() const { return theWidthUpCut >= ZERO? theWidthUpCut: Constants::MaxEnergy; } /** * Set the lower width cut. */ Energy widthLoCut(Energy); /** * Get the lower width cut. */ Energy widthLoCut() const { return theWidthLoCut >= ZERO? theWidthLoCut: Constants::MaxEnergy; } /** * Set the life time cTau. */ Length cTau(Length); /** * Get the life time cTau cTau. If no life time is specified, it is * calculated from the width. If the width is also not specified, * the lifetime is assumed to be zero for ustable particles and * infinite for stable ones. */ Length cTau() const { return theCTau > Length() ? theCTau : ( theWidth > ZERO ? hbarc/theWidth : ( stable() ? Constants::MaxLength : Length() ) ); } /** * Set the charge. The charge should be given * in units of e/3 using the PDT::Charge enum. */ PDT::Charge iCharge(PDT::Charge); /** * Get the charge. The charge is returned in standard units and in * iCharge the charge is returned in units of e/3. */ Charge charge() const { return eplus*double(theCharge)/3.0; } /** * Get the charge. The charge is returned in units of e/3. */ PDT::Charge iCharge() const { return theCharge; } /** * Return true if charged. */ bool charged() const { return PDT::charged(theCharge); } /** * Return true if positively charged. */ bool positive() const { return PDT::positive(theCharge); } /** * Return true if negatively charged. */ bool negative() const { return PDT::negative(theCharge); } /** * Set the spin. The spin should be given as 2J+1 (in units of * hbar/2) using the PDT::Spin enum. */ PDT::Spin iSpin(PDT::Spin); /** * Get the spin.The spin is returned in standard units. */ AngularMomentum spin() const { return hbar_Planck*double(theSpin-1)*0.5; } /** * Get the spin. The spin is returned as 2J+1 in units of hbar/2. */ PDT::Spin iSpin() const { return theSpin; } /** * Set the colour of the particle in units of PDT::Colour. */ PDT::Colour iColour(PDT::Colour); /** * Get the colour of the particle in units of PDT::Colour. */ PDT::Colour iColour() const { return theColour; } /** * Return true if coloured. */ bool coloured() const { return PDT::coloured(iColour()); } /** * Return true if (\a anti) coloured or colour-octet. */ bool hasColour(bool anti = false) const { return anti? hasAntiColour(): ( iColour() == PDT::Colour3 || iColour() == PDT::Colour6 || iColour() == PDT::Colour8 ); } /** * Return true if anti coloured or colour-octet. */ bool hasAntiColour() const { return iColour() == PDT::Colour3bar || iColour() == PDT::Colour6bar || iColour() == PDT::Colour8; } /** * Specify if particle is to be considered stable according to \a * stab. */ void stable(bool stab); /** * Return true if particle is to be considered stable. If the decay * table is empty the function always returns true, even if the * member variable is false. */ bool stable() const { return isStable || theDecayModes.empty(); } /** * Get the pointer to the corresponding anti partner. */ tPDPtr CC() const { return theAntiPartner; } /** * Specify if the anti partner chould be changed automatically when * this object is changed according to \a sync. */ void synchronized(bool sync); /** * Return true if the anti partner chould be changed automatically * when this object is changed. */ bool synchronized() const { return syncAnti; } /** * If there is an anti-partner, update this object to have correct * anti-properties. */ void synchronize(); /** * Set the mass generator object. */ void massGenerator(tMassGenPtr); /** * Get the mass generator object. */ tMassGenPtr massGenerator() const { return theMassGenerator; } /** * Set the width generator object. */ void widthGenerator(tWidthGeneratorPtr); /** * Get the width generator object. */ tWidthGeneratorPtr widthGenerator() const { return theWidthGenerator; } /** * Specify if the branching ratio of the Particle instances should vary with their * masses. */ void variableRatio(bool varRatio); /** * Return true if the branching ratio should vary with the mass of the Particle * instance. */ bool variableRatio() const { return theVariableRatio; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** * Special clone function used by the Repository. Also makes copies * the decay modes and the anti-partner if it exists and if * synchronized() is true. */ virtual PDPtr pdclone() const; /** * Protected constructor only to be used by subclasses or by the * Create method. */ ParticleData(PID newId, const string & newPDGName); /** * Read setup info from a standard stream. The following information * must be supplied in a white-space separated list: PDG number, * generic name, default mass (GeV), default width (GeV), width cut * (GeV), the lifetime ctau (mm), the charge, the colour, the spin, * stable (true) or not (false). Note that if a minus sign is given * instead of a generic name, the name of the object will be used * instead. */ virtual void readSetup(istream & is); /** * Used by subclasses or by the Create method to setup * anti-relationship. */ static void antiSetup(const PDPair & pap); protected: /** @name Standard Interfaced functions. */ //@{ /** * Check sanity of the object during the setup phase. */ virtual void doupdate(); /** * Initialize this object after the setup phase before saving an * EventGenerator to disk. * @throws InitException if object could not be initialized properly. */ virtual void doinit(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); /** * Initialize this object. Called in the run phase just before * a run begins. */ virtual void doinitrun(); //@} protected: /** * Add a decay mode for this particle. */ void addDecayMode(tDMPtr); /** * Remove a decay mode for this particle. */ void removeDecayMode(tDMPtr); private: /** * Id number according to the STDHEP/PDG standard. */ PID theId; /** * Name and Id number according to the STDHEP/PDG standard. */ string thePDGName; /** * Nominal mass. */ Energy theMass; /** * Width. */ Energy theWidth; /** * Upper width cut. */ Energy theWidthUpCut; /** * Lower width cut. */ Energy theWidthLoCut; /** * Lifetime. */ Length theCTau; /** * Three times the charge. */ PDT::Charge theCharge; /** * 2 times the spin plus one. */ PDT::Spin theSpin; /** * The colour for this particle. */ PDT::Colour theColour; /** * A pointer to an object capable to generate a mass for a particle * of this type. */ MassGenPtr theMassGenerator; /** * True if the particle is considered stable. */ bool isStable; /** * A selector of decay modes weighted by the nominal branching * ratios. */ DecaySelector theDecaySelector; /** * The set of all decay modes. */ DecaySet theDecayModes; /** * A pointer to an object capable to generate the branching * fractions for different decay modes for this particle type. The * object will be asked to generate branching fractions every time * the ParticleData object it updated and will modify the branching * fractions for every particle instance if variableRatio is true. */ WidthGeneratorPtr theWidthGenerator; /** * Determine whether the branching fractions are allowed to change * on a particle-by-particle basis. */ bool theVariableRatio; /** * Pointer to the object corresponding to the antiparticle. Set to * null if it is its own antiparticle. */ tPDPtr theAntiPartner; /** * If syncAnti is true all changes to this object will be transfered * to the antiParticle. */ bool syncAnti; /** * Helper variable to keep track of the default mass. */ Energy theDefMass; /** * Helper variable to keep track of the default width. */ Energy theDefWidth; /** * Helper variable to keep track of the default width cut. */ Energy theDefCut; /** * Helper variable to keep track of the default lifetime. */ Length theDefCTau; /** * Helper variable to keep track of the default charge. */ PDT::Charge theDefCharge; /** * Helper variable to keep track of the default spin. */ PDT::Spin theDefSpin; /** * Helper variable to keep track of the default colour. */ PDT::Colour theDefColour; /** * Utility function for the interface. */ void setMass(Energy); /** * Utility function for the interface. */ Energy defMass() const; /** * Utility function for the interface. */ void setWidth(Energy); /** * Utility function for the interface. */ Energy getWidth() const; /** * Utility function for the interface. */ Energy defWidth() const; /** * Utility function for the interface. */ void setCut(Energy); /** * Utility function for the interface. */ Energy getCut() const; /** * Utility function for the interface. */ Energy defCut() const; /** * Utility function for the interface. */ void setUpCut(Energy); /** * Utility function for the interface. */ Energy getUpCut() const; /** * Utility function for the interface. */ void setLoCut(Energy); /** * Utility function for the interface. */ Energy getLoCut() const; /** * Utility function for the interface. */ void setCTau(Length); /** * Utility function for the interface. */ Length getCTau() const; /** * Utility function for the interface. */ Length defCTau() const; /** * Utility function for the interface. */ void setStable(long); /** * Utility function for the interface. */ long getStable() const; /** * Utility function for the interface. */ void setSync(long); /** * Utility function for the interface. */ long getSync() const; /** * Utility function for the interface. */ void setVariableRatio(long); /** * Utility function for the interface. */ long getVariableRatio() const; /** * Utility function for the interface. */ string doSync(string); /** * Utility function for the interface. */ void setMassGenerator(MassGenPtr); /** * Utility function for the interface. */ void setWidthGenerator(WidthGeneratorPtr); /** * Utility function for the interface. */ void setCharge(int); /** * Utility function for the interface. */ string ssetCharge(string); /** * Utility function for the interface. */ int getCharge() const; /** * Utility function for the interface. */ int defCharge() const; /** * Utility function for the interface. */ void setSpin(int); /** * Utility function for the interface. */ int getSpin() const; /** * Utility function for the interface. */ int defSpin() const; /** * Utility function for the interface. */ void setColour(long); /** * Utility function for the interface. */ long getColour() const; /** * Utility function for the interface. */ long defColour() const; /** * Utility function for the interface. */ void insDecayModes(DMPtr dm, int); /** * Utility function for the interface. */ void delDecayModes(int i); /** * Utility function for the interface. */ vector getDecayModes() const; /** * Utility function for the interface. */ string doSelectDecayModes(string); /** * Utility function for the interface. */ string doPrintDecayModes(string); /** * Describe a concrete class with persistent data. */ static ClassDescription initParticleData; }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of ParticleData. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ParticleData. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * ParticleData class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ParticleData"; } }; /** @endcond */ } #endif /* ThePEG_ParticleData_H */ thepeg-1.8.0.orig/PDT/WeakToHadronsDecayer.cc0000644000175000017500000001010711747772425017112 0ustar sunsun// -*- C++ -*- // // WeakToHadronsDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the WeakToHadronsDecayer class. // #include "WeakToHadronsDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; IBPtr WeakToHadronsDecayer::clone() const { return new_ptr(*this); } IBPtr WeakToHadronsDecayer::fullclone() const { return new_ptr(*this); } bool WeakToHadronsDecayer::accept(const DecayMode & dm) const { if ( dm.orderedProducts().size() < 3 || !dm.productMatchers().empty() || !dm.cascadeProducts().empty() || dm.wildProductMatcher() ) return false; int Nqq = 0; if ( LeptonMatcher::Check(*dm.orderedProducts()[0]) ) { if ( !LeptonMatcher::Check(*dm.orderedProducts()[1]) ) return false; if ( dm.orderedProducts()[0]->iCharge() && dm.orderedProducts()[1]->iCharge() ) return false; if ( !dm.orderedProducts()[0]->iCharge() && !dm.orderedProducts()[1]->iCharge() ) return false; } for ( int i = 0, N = dm.orderedProducts().size(); i < N; ++i ) { if ( !dm.orderedProducts()[i]->coloured() ) continue; ++Nqq; if ( i == N - 1 ) return false; if ( dm.orderedProducts()[i]->iColour() + dm.orderedProducts()[i + 1]->iColour() ) return false; if ( i == N - 2 && DiquarkMatcher::Check(*dm.orderedProducts()[i]) && DiquarkMatcher::Check(*dm.orderedProducts()[i + 1]) ) return false; ++i; } if ( Nqq > 2 ) return false; return true; } PVector WeakToHadronsDecayer:: getHadrons(int Nh, tcPDVector quarks) const { PVector hadrons; int Nq = quarks.size(); tcPDPtr h = flavourGenerator()-> alwaysGetHadron(quarks[Nq - 2], quarks[Nq - 1]); hadrons.push_back(h->produceParticle()); if ( Nq == 2 ) return hadrons; while ( Nh-- > 0 ) { int i = irnd(Nq - 2); tcPDPair hq = flavourGenerator()->alwaysGenerateHadron(quarks[i]); hadrons.push_back(hq.first->produceParticle()); quarks[i] = hq.second; } if ( DiquarkMatcher::Check(*quarks[0]) && DiquarkMatcher::Check(*quarks[1]) ) return PVector(); h = flavourGenerator()->alwaysGetHadron(quarks[0], quarks[1]); hadrons.push_back(h->produceParticle()); return hadrons; } double WeakToHadronsDecayer:: reweight(const Particle & parent, const PVector & children) const { if ( LeptonMatcher::Check(children[0]->data()) ) { LorentzMomentum ph; int il = 1; int in = 0; if ( children[0]->data().iCharge() ) { il = 0; in = 1; } for ( int i = 2, N = children.size(); i < N; ++i ) ph += children[i]->momentum(); double w = (parent.mass()*children[il]->momentum().e())* (children[in]->momentum()*ph)*16.0/sqr(sqr(parent.mass())); return w; } return 1.0; } void WeakToHadronsDecayer::persistentOutput(PersistentOStream &) const {} void WeakToHadronsDecayer::persistentInput(PersistentIStream &, int) {} ClassDescription WeakToHadronsDecayer::initWeakToHadronsDecayer; // Definition of the static class description member. void WeakToHadronsDecayer::Init() { static ClassDocumentation documentation ("This class performs weak decays of taus and charmed and bottom " "hadrons. The intermediate W can either decay leptonically in which " "case standard V-A matrix element is used, or it can decay into " "quarks in which case the conversion into quarks is performed as for " "the QuarkToHadronsDecayer base class. In both cases the W decay " "products should be specified first. The spectator system can either " "be specified in terms of hadrons or in terms of quarks which will " "be collapsed into a single hadron."); } thepeg-1.8.0.orig/PDT/QuarksToHadronsDecayer.cc0000644000175000017500000001723011747772425017475 0ustar sunsun// -*- C++ -*- // // QuarksToHadronsDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the QuarksToHadronsDecayer class. // #include "QuarksToHadronsDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Parameter.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; QuarksToHadronsDecayer::~QuarksToHadronsDecayer() {} IBPtr QuarksToHadronsDecayer::clone() const { return new_ptr(*this); } IBPtr QuarksToHadronsDecayer::fullclone() const { return new_ptr(*this); } bool QuarksToHadronsDecayer::accept(const DecayMode & dm) const { int col = 0; int acol = 0; if ( !dm.productMatchers().empty() ) { for ( MatcherMSet::const_iterator it = dm.productMatchers().begin(); it != dm.productMatchers().end(); ++it ) { if ( typeid(**it) == typeid(MatchLightQuark) ) ++col; else if ( typeid(**it) == typeid(MatchLightAntiQuark) ) ++acol; else return false; } if ( col != 1 || col != acol ) return false; } if ( dm.orderedProducts().size() + col + acol < 2 || !dm.cascadeProducts().empty() || dm.wildProductMatcher() ) return false; for ( int i = 0, N = dm.orderedProducts().size(); i < N; ++i ) { if ( DiquarkMatcher::Check(*dm.orderedProducts()[i]) ) { if ( i + 1 != N ) return false; if ( dm.orderedProducts()[i]->id() < 0 ) ++col; else ++acol; } if ( QuarkMatcher::Check(*dm.orderedProducts()[i]) ) { if ( dm.orderedProducts()[i]->id() > 0 ) ++col; else ++acol; } } if ( acol != col || col < 1 || col > 2 ) return false; return true; } PVector QuarksToHadronsDecayer::decay(const DecayMode & dm, const Particle & parent) const { PVector children; tcPDVector quarks; if ( !dm.productMatchers().empty() ) { tcPDPtr pd = getParticleData(flavourGenerator()->selectQuark()); quarks.push_back(pd); quarks.push_back(pd->CC()); } Energy summq = ZERO; Energy summp = ZERO; tPDVector prods = dm.orderedProducts(); for ( int i = 0, N = prods.size(); i < N; ++i ) if ( QuarkMatcher::Check(*prods[i]) || DiquarkMatcher::Check(*prods[i])) { quarks.push_back(prods[i]); summq += quarks.back()->mass(); } else { children.push_back(prods[i]->produceParticle()); summp += children.back()->mass(); } Energy summh = ZERO; PVector hadrons; if ( !quarks.empty() ) do { hadrons = getHadrons(getN(parent.mass(), summq, quarks.size()), quarks); summh = ZERO; for ( int i = 0, N = hadrons.size(); i < N; ++i ) summh += hadrons[i]->mass(); } while ( hadrons.empty() || summp + summh >= parent.mass() ); children.insert(children.end(), hadrons.begin(), hadrons.end()); distribute(parent, children); finalBoost(parent, children); setScales(parent, children); return children; } int QuarksToHadronsDecayer::getN(Energy m0, Energy summq, int Nq) const { int Nh = fixedN(); if ( Nh >= 2 ) return Nh; double c = c1()*log((m0 - summq)/c2()) + c3(); if ( c < 0.0 ) return minN(); while ( true ) { using namespace Constants; Nh = int(0.5 + double(Nq)/4.0 + c + sqrt(-2.0*c*log(max(1.0e-10, rnd())))*sin(2.0*pi*rnd())); if ( Nh >= minN() ) return Nh; } } PVector QuarksToHadronsDecayer:: getHadrons(int Nh, tcPDVector quarks) const { PVector hadrons; Nh -= quarks.size()/2; while ( Nh-- > 0 ) { int i = irnd(quarks.size() - 1); tcPDPair hq = flavourGenerator()->alwaysGenerateHadron(quarks[i]); hadrons.push_back(hq.first->produceParticle()); quarks[i] = hq.second; } if ( DiquarkMatcher::Check(*quarks[0]) && DiquarkMatcher::Check(*quarks[1]) ) return PVector(); tcPDPtr h = flavourGenerator()->alwaysGetHadron(quarks[0], quarks[1]); hadrons.push_back(h->produceParticle()); if ( quarks.size() <= 2 ) return hadrons; if ( DiquarkMatcher::Check(*quarks[2]) && DiquarkMatcher::Check(*quarks[3]) ) return PVector(); h = flavourGenerator()->alwaysGetHadron(quarks[2], quarks[3]); hadrons.push_back(h->produceParticle()); return hadrons; } void QuarksToHadronsDecayer:: distribute(const Particle & parent, PVector & children) const { do { try { SimplePhaseSpace::CMSn(children, parent.mass()); } catch ( ImpossibleKinematics ) { children.clear(); return; } } while ( reweight(parent, children) < rnd() ); } double QuarksToHadronsDecayer:: reweight(const Particle &, const PVector &) const { return 1.0; } void QuarksToHadronsDecayer::persistentOutput(PersistentOStream & os) const { os << theFixedN << theMinN << theC1 << ounit(theC2,GeV) << theC3 << theFlavourGenerator; } void QuarksToHadronsDecayer::persistentInput(PersistentIStream & is, int) { is >> theFixedN >> theMinN >> theC1 >> iunit(theC2,GeV) >> theC3 >> theFlavourGenerator; } ClassDescription QuarksToHadronsDecayer::initQuarksToHadronsDecayer; // Definition of the static class description member. void QuarksToHadronsDecayer::Init() { static ClassDocumentation documentation ("This class decays particles to nq (2 or 4) quarks which then are " "decayes to hadrons according to phase space. The number of final " "hadrons can either be given by a fixed number or as a Gaussian " "multiplicity distribution centered around c+nq/4+c3 and a width " "sqrt(c), where c = c1 log((m - summ)/c2), m is the mass of the " "decaying particle, summ the sum of the quark masses and ci real " "parameters."); static Parameter interfaceFixedN ("FixedN", "The fixed number of hadrons to be produced. If less than 2, the " "number is instead given by a gaussian multiplicity distribution.", &QuarksToHadronsDecayer::theFixedN, 0, 0, 10, true, false, true); static Parameter interfaceMinN ("MinN", "The minimum hadrons to be produced.", &QuarksToHadronsDecayer::theMinN, 2, 2, 10, true, false, true); static Parameter interfaceC1 ("C1", "The c1 parameter of the gaussian multiplicity distribution centered " "around c1 log((m - summ)/c2) +c3.", &QuarksToHadronsDecayer::theC1, 4.5, 0.0, 10.0, true, false, true); static Parameter interfaceC2 ("C2", "The c2 parameter of the gaussian multiplicity distribution centered " "around c1 log((m - summ)/c2) +c3.", &QuarksToHadronsDecayer::theC2, GeV, 0.7*GeV, ZERO, 10.0*GeV, true, false, true); static Parameter interfaceC3 ("C3", "The c3 parameter of the gaussian multiplicity distribution centered " "around c1 log((m - summ)/c2) +c3.", &QuarksToHadronsDecayer::theC3, 0.0, 0.0, 10.0, true, false, true); static Reference interfaceFlavourGenerator ("FlavourGenerator", "The object in charge of generating hadrons spieces from given quark " "flavours.", &QuarksToHadronsDecayer::theFlavourGenerator, true, false, true, false, true); interfaceFixedN.rank(10); interfaceMinN.rank(9); interfaceFlavourGenerator.rank(8); interfaceMinN.setHasDefault(false);; } thepeg-1.8.0.orig/PDT/RemnantDecayer.cc0000644000175000017500000002232611747772425016013 0ustar sunsun// -*- C++ -*- // // RemnantDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the RemnantDecayer class. // #include "RemnantDecayer.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/Interface/Switch.h" #include "ThePEG/Interface/Reference.h" #include "ThePEG/PDT/RemnantData.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Repository/UseRandom.h" #include "ThePEG/Utilities/Throw.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; RemnantDecayer::~RemnantDecayer() {} bool RemnantDecayer::accept(const DecayMode &) const { return false; } bool RemnantDecayer::needsFullStep() const { return true; } bool RemnantDecayer:: canHandle(tcPDPtr, tcPDPtr) const { return false; } bool RemnantDecayer:: checkExtract(tcPPtr, tcPPtr, const LorentzMomentum & pnew) const { return pnew.e() > ZERO; } bool RemnantDecayer::multiCapable() const { return false; } ParticleVector RemnantDecayer:: decay(const DecayMode &, const Particle &) const { return ParticleVector(); } ParticleVector RemnantDecayer:: decay(const DecayMode & dm, const Particle & p, Step &) const { ParticleVector children; tcRemPPtr remnant = dynamic_ptr_cast(&p); if ( !remnant ) return children; tRemPDPtr rpd = data(remnant); PVector ex = extracted(remnant); tcPPtr par = parent(remnant); if ( !par || ex.empty() || !rpd ) return children; children= dm.produceProducts(); return children; } void RemnantDecayer:: fillSubSystem(tPPtr p, set & sub) const { // If this particle has already been added we're done. if ( member(sub, p) ) return; if ( respectDISKinematics() && !LeptonMatcher::Check(p->data()) && p->momentum().m2() < ZERO ) { // If this particle belongs to an electro-weak scattering vertex // it should be excluded. (more specifically part of a vertex // where the other particles are incoming and outgoing leptons // while this is not a lepton and is space-like) if ( p->children().size() == 1 && p->children()[0]->parents().size() == 2 && LeptonMatcher::Check(p->children()[0]->data()) && ( p->children()[0]->momentum().m2() >= ZERO || p->children()[0]->children().empty() ) && ( LeptonMatcher::Check(p->children()[0]->parents()[0]->data()) || LeptonMatcher::Check(p->children()[0]->parents()[1]->data()) ) ) return; if ( p->parents().size() == 1 && p->parents()[0]->children().size() == 2 && LeptonMatcher::Check(p->parents()[0]->data()) && ( ( LeptonMatcher::Check(p->parents()[0]->children()[0]->data()) && ( p->parents()[0]->children()[0]->momentum().m2() >= ZERO || p->parents()[0]->children()[0]->children().empty() ) ) || ( LeptonMatcher::Check(p->parents()[0]->children()[1]->data()) && ( p->parents()[0]->children()[1]->momentum().m2() >= ZERO || p->parents()[0]->children()[1]->children().empty() ) ) ) ) return; } sub.insert(p); // Fill in children. if ( p->next() ) fillSubSystem(p->next(), sub); for ( int i = 0, N = p->children().size(); i < N; ++i ) fillSubSystem(p->children()[i], sub); // Fill also parents, but only if this is not an incoming parton // coming from a particle with a soft remnant. Also if this is an // incoming particle (with no parents) is is ignored. if ( p->previous() ) fillSubSystem(p->previous(), sub); for ( int i = 0, N = p->parents().size(); i < N; ++i ) { tPPtr parent = p->parents()[i]; if ( member(sub, parent) ) continue; if ( parent->parents().empty() ) continue; for ( int j = 0, M = parent->children().size(); j < M; ++j ) if ( dynamic_ptr_cast(parent->children()[j]) ) { parent = tPPtr(); break; } if ( parent ) fillSubSystem(parent, sub); } } tPVector RemnantDecayer::getSubSystem(tcPPtr parent, tPPtr parton) const { tPVector ret; Axis dir = parent->momentum()/GeV; set sub; fillSubSystem(parton, sub); multimap ordsub; for ( set::iterator it = sub.begin(); it != sub.end(); ++it ) { if ( (**it).children().size() || (**it).next() ) continue; try { ordsub.insert(make_pair(-(**it).momentum().rapidity(dir), *it)); } catch ( ... ) { Throw() << "Could not find subsystem for shuffling momenta in RemnantDecayer." << Exception::eventerror; } } ret.reserve(ordsub.size()); for ( multimap::iterator it = ordsub.begin(); it != ordsub.end(); ++it ) ret.push_back(it->second); return ret; } LorentzRotation RemnantDecayer:: getZBoost(const LorentzMomentum & p0, const LorentzMomentum & p) { LorentzRotation R; if ( p.z() > ZERO ) R.setBoostZ((sqr(p.plus()) - sqr(p0.plus()))/ (sqr(p.plus()) + sqr(p0.plus()))); else R.setBoostZ((sqr(p0.minus()) - sqr(p.minus()))/ (sqr(p0.minus()) + sqr(p.minus()))); return R; } tPVector RemnantDecayer:: decayRemnants(const tPVector & particles, Step & step) { tPVector final; tPVector remnants; for ( int i = 0, N= particles.size(); i < N; ++i ) if ( dynamic_ptr_cast(particles[i]) ) remnants.push_back(particles[i]); else final.push_back(particles[i]); while ( !remnants.empty() ) { int i = UseRandom::irnd(remnants.size()); ParticleVector children = Decayer::DecayParticle(remnants[i], step); final.insert(final.end(), children.begin(), children.end()); remnants.erase(remnants.begin() + i); } // The final particles may have received a pt-kick and would then be // copied. Go through and find the final particles. for ( int i = 0, N = final.size(); i < N; ++ i) final[i] = final[i]->final(); return final; } bool RemnantDecayer::preInitialize() const { return Decayer::preInitialize() || !pTGenerator(); } void RemnantDecayer::doinit() { Decayer::doinit(); if ( pTGenerator() ) return; thePTGenerator = dynamic_ptr_cast (generator()->preinitCreate("ThePEG::GaussianPtGenerator", fullName() + "/PtGen", "GaussianPtGenerator.so")); } void RemnantDecayer::persistentOutput(PersistentOStream & os) const { os << oenum(theRecoilOption) << respectDIS << thePTGenerator; } void RemnantDecayer::persistentInput(PersistentIStream & is, int) { is >> ienum(theRecoilOption) >> respectDIS >> thePTGenerator; } AbstractClassDescription RemnantDecayer::initRemnantDecayer; // Definition of the static class description member. void RemnantDecayer::Init() { static ClassDocumentation documentation ("The RemnantDecayer class is the base class to be used for all " "decayers capable of decaying a RemnantParticle object produced by a " "SoftRemnantHandler object."); static Switch interfaceRecoilOption ("RecoilOption", "Different options for how to distribute recoils in the hard subsystem " "when taking energy to produce remnants.", &RemnantDecayer::theRecoilOption, copyFinal, true, false); static SwitchOption interfaceRecoilOptionCopyFinal (interfaceRecoilOption, "CopyFinal", "Boost copies of final state particles in hard subsystem.", copyFinal); static SwitchOption interfaceRecoilOptionBoostFinal (interfaceRecoilOption, "BoostFinal", "Boost only final state particles in hard subsystem.", boostFinal); static SwitchOption interfaceRecoilOptionBoostAll (interfaceRecoilOption, "BoostAll", "Boost all particles in the hard subsystem.", boostAll); static Switch interfaceRespectDISKinematics ("RespectDISKinematics", "If true, do not boost a scattered lepton (and possible radiated " "photons) in a DIS event, to ensure that \f$x\f$ and \f$Q^2\f$ is " "unmodified.", &RemnantDecayer::respectDIS, 2, true, false); static SwitchOption interfaceRespectDISKinematicsYes (interfaceRespectDISKinematics, "Yes", "Do not boost scattered lepton. If that doesn't work, include " "the scattered lepton and emit a warning message.", 1); static SwitchOption interfaceRespectDISKinematicsNo (interfaceRespectDISKinematics, "No", "Boost scattered lepton together with the rest of the hard subsystem.", 0); static SwitchOption interfaceRespectDISKinematicsTry (interfaceRespectDISKinematics, "Try", "Do not boost scattered lepton. If that doesn't work, silently " "include the scattered lepton.", 2); static Reference interfacePTGenerator ("PTGenerator", "An object capable of generating an intrinsic transverse momentum of " "the created remnants. If not set and the controlling EventGenerator " "has a default PtGenerator object, this will be used. Otherwise a " "GaussianPtGenerator object created with default settings in the " "initialization will be used instead.", &RemnantDecayer::thePTGenerator, true, false, true, true, true); } thepeg-1.8.0.orig/PDT/MatcherBase.cc0000644000175000017500000001536111747772425015271 0ustar sunsun// -*- C++ -*- // // MatcherBase.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the MatcherBase class. // #include "MatcherBase.h" #include "DecayMode.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Repository/Repository.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" #include "ThePEG/Utilities/EnumIO.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; MatcherBase::MatcherBase() : theMaxMass(ZERO), theMinMass(ZERO), commonMass(-1.0*GeV), commonWidth(-1.0*GeV), commonCTau(-1.0*mm), commonCharge(PDT::ChargeUndefined), commonSpin(PDT::SpinUndefined), commonColour(PDT::ColourUndefined), commonStable(-1) {} MatcherBase::MatcherBase(const MatcherBase & m) : Interfaced(m), theMaxMass(m.theMaxMass), theMinMass(m.theMinMass), commonMass(m.commonMass), commonWidth(m.commonWidth), commonCTau(m.commonCTau), commonCharge(m.commonCharge), commonSpin(m.commonSpin), commonColour(m.commonColour), commonStable(m.commonStable), theAntiPartner(m.theAntiPartner) {} MatcherBase::~MatcherBase() {} void MatcherBase::doupdate() { Interfaced::doupdate(); tPDSet oldParticles; tPMSet oldMatchers; Energy oldMass = commonMass; Energy oldWidth = commonWidth; Length oldCTau = commonCTau; PDT::Spin oldSpin = commonSpin; PDT::Charge oldCharge = commonCharge; PDT::Colour oldColour = commonColour; int oldStable = commonStable; matchingParticles.swap(oldParticles); matchingMatchers.swap(oldMatchers); if ( generator() ) { for ( ParticleMap::const_iterator it = generator()->particles().begin(); it != generator()->particles().end(); ++it ) addPIfMatch(it->second); addMIfMatchFrom(generator()->matchers()); } else { addPIfMatchFrom(Repository::allParticles()); addMIfMatchFrom(Repository::allMatchers()); } if ( matchingParticles != oldParticles || matchingMatchers != oldMatchers || oldMass != commonMass || oldWidth != commonWidth || oldCTau != commonCTau || oldSpin != commonSpin || oldCharge != commonCharge || oldColour != commonColour || oldStable != commonStable ) touch(); } void MatcherBase::clear() { matchingParticles.clear(); matchingMatchers.clear(); theMaxMass = ZERO; theMinMass = ZERO; commonMass = -1.0*GeV; commonWidth = -1.0*GeV; commonCTau = -1.0*mm; commonSpin = PDT::SpinUndefined; commonCharge = PDT::ChargeUndefined; commonColour = PDT::ColourUndefined; commonStable = -1; } void MatcherBase::addMIfMatch(tPMPtr pm) { if ( member(matchingMatchers, pm) ) return; pm->update(); tPDSet::const_iterator i = pm->matchingParticles.begin(); while ( i != pm->matchingParticles.end() ) if ( !member(matchingParticles, *i++) ) return; matchingMatchers.insert(pm); } void MatcherBase::addPIfMatch(tPDPtr pd) { if ( !pd || !check(*pd) || member(matchingParticles, pd) ) return; if ( matchingParticles.empty() ) { commonMass = pd->mass(); theMinMass = pd->mass(); theMaxMass = pd->mass(); commonWidth = pd->width(); commonCTau = pd->cTau(); commonCharge = pd->iCharge(); commonSpin = pd->iSpin(); commonColour = pd->iColour(); commonStable = pd->stable(); } else { if ( commonMass != pd->mass() ) commonMass = -1.0*GeV; theMinMass = min(theMinMass, pd->mass()); theMaxMass = min(theMaxMass, pd->mass()); if ( commonWidth != pd->width() ) commonWidth = -1.0*GeV; if ( commonCTau != pd->cTau() ) commonCTau = -1.0*mm; if ( commonCharge != pd->iCharge() ) { switch ( commonCharge ) { case PDT::ChargeUndefined: break; case PDT::Positive: if ( PDT::negative(pd->iCharge()) ) commonCharge = PDT::Charged; else if ( !PDT::positive(pd->iCharge()) ) commonCharge = PDT::ChargeUndefined; break; case PDT::Negative: if ( PDT::positive(pd->iCharge()) ) commonCharge = PDT::Charged; else if ( !PDT::negative(pd->iCharge()) ) commonCharge = PDT::ChargeUndefined; break; case PDT::Charged: if ( !PDT::charged(pd->iCharge()) ) commonCharge = PDT::ChargeUndefined; break; default: if ( PDT::positive(commonCharge) ) { if ( PDT::positive(pd->iCharge()) ) commonCharge = PDT::Positive; else if ( PDT::negative(pd->iCharge()) ) commonCharge = PDT::Charged; else commonCharge = PDT::ChargeUndefined; } else if ( PDT::negative(commonCharge) ) { if ( PDT::negative(pd->iCharge()) ) commonCharge = PDT::Negative; else if ( PDT::positive(pd->iCharge()) ) commonCharge = PDT::Charged; else commonCharge = PDT::ChargeUndefined; } else commonCharge = PDT::ChargeUndefined; } } if ( commonSpin != pd->iSpin() ) commonSpin = PDT::SpinUndefined; if ( commonColour != pd->iColour() ) { if ( PDT::coloured(commonColour) && PDT::coloured(pd->iColour()) ) commonColour = PDT::Coloured; else commonColour = PDT::ColourUndefined; if ( commonStable != pd->stable() ) commonStable = -1; } } matchingParticles.insert(pd); } struct ParticleOrdering { bool operator()(tcPDPtr p1, tcPDPtr p2) { return abs(p1->id()) > abs(p2->id()) || ( abs(p1->id()) == abs(p2->id()) && p1->id() > p2->id() ) || ( p1->id() == p2->id() && p1->fullName() > p2->fullName() ); } }; struct MatcherOrdering { bool operator()(tcPMPtr m1, tcPMPtr m2) { return m1->name() < m2->name() || ( m1->name() == m2->name() && m1->fullName() < m2->fullName() ); } }; void MatcherBase::persistentOutput(PersistentOStream & os ) const { multiset parts(particles().begin(), particles().end()); multiset match(matchers().begin(), matchers().end()); os << parts << match << ounit(theMaxMass, GeV) << ounit(theMinMass, GeV) << ounit(commonMass, GeV) << ounit(commonWidth, GeV) << ounit(commonCTau, mm) << oenum(commonCharge) << oenum(commonSpin) << oenum(commonColour) << commonStable << theAntiPartner; } void MatcherBase::persistentInput(PersistentIStream & is, int) { is >> matchingParticles >> matchingMatchers >> iunit(theMaxMass, GeV) >> iunit(theMinMass, GeV) >> iunit(commonMass, GeV) >> iunit(commonWidth, GeV) >> iunit(commonCTau, mm) >> ienum(commonCharge) >> ienum(commonSpin) >> ienum(commonColour) >> commonStable >> theAntiPartner; } AbstractClassDescription MatcherBase::initMatcherBase; void MatcherBase::Init() { static ClassDocumentation documentation ("This is the base class for objects representing groups of particle " "types."); } thepeg-1.8.0.orig/PDT/EnumParticles.h0000644000175000017500000013317011747772425015527 0ustar sunsun// -*- C++ -*- // // EnumParticles.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_EnumParticles_H #define ThePEG_EnumParticles_H namespace ThePEG { /** * The ParticleID namespace defines the ParticleCodes enumeration. */ namespace ParticleID { /** * Enumeration to give identifiers to PDG id numbers. */ enum ParticleCodes { d = 1, /**< \f$\mbox{d}\f$ (d) */ dbar = -1, /**< \f$\overline{\mbox{d}}\f$ (dbar) */ u = 2, /**< \f$\mbox{u}\f$ (u) */ ubar = -2, /**< \f$\overline{\mbox{u}}\f$ (ubar) */ s = 3, /**< \f$\mbox{s}\f$ (s) */ sbar = -3, /**< \f$\overline{\mbox{s}}\f$ (sbar) */ c = 4, /**< \f$\mbox{c}\f$ (c) */ cbar = -4, /**< \f$\overline{\mbox{c}}\f$ (cbar) */ b = 5, /**< \f$\mbox{b}\f$ (b) */ bbar = -5, /**< \f$\overline{\mbox{b}}\f$ (bbar) */ t = 6, /**< \f$\mbox{t}\f$ (t) */ tbar = -6, /**< \f$\overline{\mbox{t}}\f$ (tbar) */ bprime = 7, /**< \f$\mbox{b}^{\prime }\f$ (b') */ bprimebar = -7, /**< \f$\overline{\mbox{b}}^{\prime }\f$ (b'bar) */ tprime = 8, /**< \f$\mbox{t}^{\prime }\f$ (t') */ tprimebar = -8, /**< \f$\overline{\mbox{t}}^{\prime }\f$ (t'bar) */ eminus = 11, /**< \f$\mbox{e}^{-}\f$ (e-) */ eplus = -11, /**< \f$\mbox{e}^{+}\f$ (e+) */ nu_e = 12, /**< \f$\nu _{e}\f$ (nu_e) */ nu_ebar = -12, /**< \f$\overline{\nu }_{e}\f$ (nu_ebar) */ muminus = 13, /**< \f$\mu ^{-}\f$ (mu-) */ muplus = -13, /**< \f$\mu ^{+}\f$ (mu+) */ nu_mu = 14, /**< \f$\nu _{\mu }\f$ (nu_mu) */ nu_mubar = -14, /**< \f$\overline{\nu }_{\mu }\f$ (nu_mubar) */ tauminus = 15, /**< \f$\tau ^{-}\f$ (tau-) */ tauplus = -15, /**< \f$\tau ^{+}\f$ (tau+) */ nu_tau = 16, /**< \f$\nu _{\tau }\f$ (nu_tau) */ nu_taubar = -16, /**< \f$\overline{\nu }_{\tau }\f$ (nu_taubar) */ tauprimeminus = 17, /**< \f$\tau ^{\prime -}\f$ (tau'-) */ tauprimeplus = -17, /**< \f$\tau ^{\prime +}\f$ (tau'+) */ nuprime_tau = 18, /**< \f$\nu ^{\prime }_{\tau }\f$ (nu'_tau) */ nuprime_taubar = -18, /**< \f$\overline{\nu }^{\prime }_{\tau }\f$ (nu'_taubar) */ g = 21, /**< \f$\mbox{g}\f$ (g) */ gamma = 22, /**< \f$\gamma \f$ (gamma) */ Z0 = 23, /**< \f$\mbox{Z}^{0 }\f$ (Z0) */ Wplus = 24, /**< \f$\mbox{W}^{+}\f$ (W+) */ Wminus = -24, /**< \f$\mbox{W}^{-}\f$ (W-) */ h0 = 25, /**< \f$\mbox{h}^{0 }\f$ (h0) */ Zprime0 = 32, /**< \f$\mbox{Z}^{\prime 0 }\f$ (Z'0) */ Zbis0 = 33, /**< \f$\mbox{Z}^{\prime\prime 0 }\f$ (Z"0) */ Wprimeplus = 34, /**< \f$\mbox{W}^{\prime +}\f$ (W'+) */ Wprimeminus = -34, /**< \f$\mbox{W}^{\prime -}\f$ (W'-) */ H0 = 35, /**< \f$\mbox{H}^{0 }\f$ (H0) */ A0 = 36, /**< \f$\mbox{A}^{0 }\f$ (A0) */ Hplus = 37, /**< \f$\mbox{H}^{+}\f$ (H+) */ Hminus = -37, /**< \f$\mbox{H}^{-}\f$ (H-) */ Graviton = 39, /**< \f${\cal G}\f$ (Graviton) */ R0 = 41, /**< \f$\mbox{R}^{0 }\f$ (R0) */ Rbar0 = -41, /**< \f$\overline{\mbox{R}}^{0 }\f$ (Rbar0) */ LQ_ue = 42, /**< \f$\mbox{L}_{Que}\f$ (LQ_ue) */ LQ_uebar = -42, /**< \f$\overline{\mbox{L}}_{Que}\f$ (LQ_uebar) */ reggeon = 110, /**< \f$I\!\!R\f$ (reggeon) */ pi0 = 111, /**< \f$\pi ^{0 }\f$ (pi0) */ rho0 = 113, /**< \f$\rho ^{0 }\f$ (rho0) */ a_20 = 115, /**< \f$\mbox{a}^{0 }_{2}\f$ (a_20) */ K_L0 = 130, /**< \f$\mbox{K}^{0 }_{L}\f$ (K_L0) */ piplus = 211, /**< \f$\pi ^{+}\f$ (pi+) */ piminus = -211, /**< \f$\pi ^{-}\f$ (pi-) */ rhoplus = 213, /**< \f$\rho ^{+}\f$ (rho+) */ rhominus = -213, /**< \f$\rho ^{-}\f$ (rho-) */ a_2plus = 215, /**< \f$\mbox{a}^{+}_{2}\f$ (a_2+) */ a_2minus = -215, /**< \f$\mbox{a}^{-}_{2}\f$ (a_2-) */ eta = 221, /**< \f$\eta \f$ (eta) */ omega = 223, /**< \f$\omega \f$ (omega) */ f_2 = 225, /**< \f$\mbox{f}_{2}\f$ (f_2) */ K_S0 = 310, /**< \f$\mbox{K}^{0 }_{S}\f$ (K_S0) */ K0 = 311, /**< \f$\mbox{K}^{0 }\f$ (K0) */ Kbar0 = -311, /**< \f$\overline{\mbox{K}}^{0 }\f$ (Kbar0) */ Kstar0 = 313, /**< \f$\mbox{K}^{*0 }\f$ (K*0) */ Kstarbar0 = -313, /**< \f$\overline{\mbox{K}}^{*0 }\f$ (K*bar0) */ Kstar_20 = 315, /**< \f$\mbox{K}^{*0 }_{2}\f$ (K*_20) */ Kstar_2bar0 = -315, /**< \f$\overline{\mbox{K}}^{*0 }_{2}\f$ (K*_2bar0) */ Kplus = 321, /**< \f$\mbox{K}^{+}\f$ (K+) */ Kminus = -321, /**< \f$\mbox{K}^{-}\f$ (K-) */ Kstarplus = 323, /**< \f$\mbox{K}^{*+}\f$ (K*+) */ Kstarminus = -323, /**< \f$\mbox{K}^{*-}\f$ (K*-) */ Kstar_2plus = 325, /**< \f$\mbox{K}^{*+}_{2}\f$ (K*_2+) */ Kstar_2minus = -325, /**< \f$\mbox{K}^{*-}_{2}\f$ (K*_2-) */ etaprime = 331, /**< \f$\eta ^{\prime }\f$ (eta') */ phi = 333, /**< \f$\phi \f$ (phi) */ fprime_2 = 335, /**< \f$\mbox{f}^{\prime }_{2}\f$ (f'_2) */ Dplus = 411, /**< \f$\mbox{D}^{+}\f$ (D+) */ Dminus = -411, /**< \f$\mbox{D}^{-}\f$ (D-) */ Dstarplus = 413, /**< \f$\mbox{D}^{*+}\f$ (D*+) */ Dstarminus = -413, /**< \f$\mbox{D}^{*-}\f$ (D*-) */ Dstar_2plus = 415, /**< \f$\mbox{D}^{*+}_{2}\f$ (D*_2+) */ Dstar_2minus = -415, /**< \f$\mbox{D}^{*-}_{2}\f$ (D*_2-) */ D0 = 421, /**< \f$\mbox{D}^{0 }\f$ (D0) */ Dbar0 = -421, /**< \f$\overline{\mbox{D}}^{0 }\f$ (Dbar0) */ Dstar0 = 423, /**< \f$\mbox{D}^{*0 }\f$ (D*0) */ Dstarbar0 = -423, /**< \f$\overline{\mbox{D}}^{*0 }\f$ (D*bar0) */ Dstar_20 = 425, /**< \f$\mbox{D}^{*0 }_{2}\f$ (D*_20) */ Dstar_2bar0 = -425, /**< \f$\overline{\mbox{D}}^{*0 }_{2}\f$ (D*_2bar0) */ D_splus = 431, /**< \f$\mbox{D}^{+}_{s}\f$ (D_s+) */ D_sminus = -431, /**< \f$\mbox{D}^{-}_{s}\f$ (D_s-) */ Dstar_splus = 433, /**< \f$\mbox{D}^{*+}_{s}\f$ (D*_s+) */ Dstar_sminus = -433, /**< \f$\mbox{D}^{*-}_{s}\f$ (D*_s-) */ Dstar_2splus = 435, /**< \f$\mbox{D}^{*+}_{2s}\f$ (D*_2s+) */ Dstar_2sminus = -435, /**< \f$\mbox{D}^{*-}_{2s}\f$ (D*_2s-) */ eta_c = 441, /**< \f$\eta _{c}\f$ (eta_c) */ Jpsi = 443, /**< \f$J/\psi \f$ (J/psi) */ chi_2c = 445, /**< \f$\chi _{2c}\f$ (chi_2c) */ B0 = 511, /**< \f$\mbox{B}^{0 }\f$ (B0) */ Bbar0 = -511, /**< \f$\overline{\mbox{B}}^{0 }\f$ (Bbar0) */ Bstar0 = 513, /**< \f$\mbox{B}^{*0 }\f$ (B*0) */ Bstarbar0 = -513, /**< \f$\overline{\mbox{B}}^{*0 }\f$ (B*bar0) */ Bstar_20 = 515, /**< \f$\mbox{B}^{*0 }_{2}\f$ (B*_20) */ Bstar_2bar0 = -515, /**< \f$\overline{\mbox{B}}^{*0 }_{2}\f$ (B*_2bar0) */ Bplus = 521, /**< \f$\mbox{B}^{+}\f$ (B+) */ Bminus = -521, /**< \f$\mbox{B}^{-}\f$ (B-) */ Bstarplus = 523, /**< \f$\mbox{B}^{*+}\f$ (B*+) */ Bstarminus = -523, /**< \f$\mbox{B}^{*-}\f$ (B*-) */ Bstar_2plus = 525, /**< \f$\mbox{B}^{*+}_{2}\f$ (B*_2+) */ Bstar_2minus = -525, /**< \f$\mbox{B}^{*-}_{2}\f$ (B*_2-) */ B_s0 = 531, /**< \f$\mbox{B}^{0 }_{s}\f$ (B_s0) */ B_sbar0 = -531, /**< \f$\overline{\mbox{B}}^{0 }_{s}\f$ (B_sbar0) */ Bstar_s0 = 533, /**< \f$\mbox{B}^{*0 }_{s}\f$ (B*_s0) */ Bstar_sbar0 = -533, /**< \f$\overline{\mbox{B}}^{*0 }_{s}\f$ (B*_sbar0) */ Bstar_2s0 = 535, /**< \f$\mbox{B}^{*0 }_{2s}\f$ (B*_2s0) */ Bstar_2sbar0 = -535, /**< \f$\overline{\mbox{B}}^{*0 }_{2s}\f$ (B*_2sbar0) */ B_cplus = 541, /**< \f$\mbox{B}^{+}_{c}\f$ (B_c+) */ B_cminus = -541, /**< \f$\mbox{B}^{-}_{c}\f$ (B_c-) */ Bstar_cplus = 543, /**< \f$\mbox{B}^{*+}_{c}\f$ (B*_c+) */ Bstar_cminus = -543, /**< \f$\mbox{B}^{*-}_{c}\f$ (B*_c-) */ Bstar_2cplus = 545, /**< \f$\mbox{B}^{*+}_{2c}\f$ (B*_2c+) */ Bstar_2cminus = -545, /**< \f$\mbox{B}^{*-}_{2c}\f$ (B*_2c-) */ eta_b = 551, /**< \f$\eta _{b}\f$ (eta_b) */ Upsilon = 553, /**< \f$\Upsilon \f$ (Upsilon) */ chi_2b = 555, /**< \f$\chi _{2b}\f$ (chi_2b) */ pomeron = 990, /**< \f$I\!\!P\f$ (pomeron) */ dd_1 = 1103, /**< \f$\mbox{dd}_{1}\f$ (dd_1) */ dd_1bar = -1103, /**< \f$\overline{\mbox{dd}}_{1}\f$ (dd_1bar) */ Deltaminus = 1114, /**< \f$\Delta ^{-}\f$ (Delta-) */ Deltabarplus = -1114, /**< \f$\overline{\Delta }^{+}\f$ (Deltabar+) */ ud_0 = 2101, /**< \f$\mbox{ud}^{0 }\f$ (ud_0) */ ud_0bar = -2101, /**< \f$\overline{\mbox{ud}}^{0 }\f$ (ud_0bar) */ ud_1 = 2103, /**< \f$\mbox{ud}_{1}\f$ (ud_1) */ ud_1bar = -2103, /**< \f$\overline{\mbox{ud}}_{1}\f$ (ud_1bar) */ n0 = 2112, /**< \f$\mbox{n}^{0 }\f$ (n0) */ nbar0 = -2112, /**< \f$\overline{\mbox{n}}^{0 }\f$ (nbar0) */ Delta0 = 2114, /**< \f$\Delta ^{0 }\f$ (Delta0) */ Deltabar0 = -2114, /**< \f$\overline{\Delta }^{0 }\f$ (Deltabar0) */ uu_1 = 2203, /**< \f$\mbox{uu}_{1}\f$ (uu_1) */ uu_1bar = -2203, /**< \f$\overline{\mbox{uu}}_{1}\f$ (uu_1bar) */ pplus = 2212, /**< \f$\mbox{p}^{+}\f$ (p+) */ pbarminus = -2212, /**< \f$\overline{\mbox{p}}^{-}\f$ (pbar-) */ Deltaplus = 2214, /**< \f$\Delta ^{+}\f$ (Delta+) */ Deltabarminus = -2214, /**< \f$\overline{\Delta }^{-}\f$ (Deltabar-) */ Deltaplus2 = 2224, /**< \f$\Delta ^{++}\f$ (Delta++) */ Deltabarminus2 = -2224, /**< \f$\overline{\Delta }^{--}\f$ (Deltabar--) */ sd_0 = 3101, /**< \f$\mbox{sd}^{0 }\f$ (sd_0) */ sd_0bar = -3101, /**< \f$\overline{\mbox{sd}}^{0 }\f$ (sd_0bar) */ sd_1 = 3103, /**< \f$\mbox{sd}_{1}\f$ (sd_1) */ sd_1bar = -3103, /**< \f$\overline{\mbox{sd}}_{1}\f$ (sd_1bar) */ Sigmaminus = 3112, /**< \f$\Sigma ^{-}\f$ (Sigma-) */ Sigmabarplus = -3112, /**< \f$\overline{\Sigma }^{+}\f$ (Sigmabar+) */ Sigmastarminus = 3114, /**< \f$\Sigma ^{*-}\f$ (Sigma*-) */ Sigmastarbarplus = -3114, /**< \f$\overline{\Sigma }^{*+}\f$ (Sigma*bar+) */ Lambda0 = 3122, /**< \f$\Lambda ^{0 }\f$ (Lambda0) */ Lambdabar0 = -3122, /**< \f$\overline{\Lambda }^{0 }\f$ (Lambdabar0) */ su_0 = 3201, /**< \f$\mbox{su}^{0 }\f$ (su_0) */ su_0bar = -3201, /**< \f$\overline{\mbox{su}}^{0 }\f$ (su_0bar) */ su_1 = 3203, /**< \f$\mbox{su}_{1}\f$ (su_1) */ su_1bar = -3203, /**< \f$\overline{\mbox{su}}_{1}\f$ (su_1bar) */ Sigma0 = 3212, /**< \f$\Sigma ^{0 }\f$ (Sigma0) */ Sigmabar0 = -3212, /**< \f$\overline{\Sigma }^{0 }\f$ (Sigmabar0) */ Sigmastar0 = 3214, /**< \f$\Sigma ^{*0 }\f$ (Sigma*0) */ Sigmastarbar0 = -3214, /**< \f$\overline{\Sigma }^{*0 }\f$ (Sigma*bar0) */ Sigmaplus = 3222, /**< \f$\Sigma ^{+}\f$ (Sigma+) */ Sigmabarminus = -3222, /**< \f$\overline{\Sigma }^{-}\f$ (Sigmabar-) */ Sigmastarplus = 3224, /**< \f$\Sigma ^{*+}\f$ (Sigma*+) */ Sigmastarbarminus = -3224, /**< \f$\overline{\Sigma }^{*-}\f$ (Sigma*bar-) */ ss_1 = 3303, /**< \f$\mbox{ss}_{1}\f$ (ss_1) */ ss_1bar = -3303, /**< \f$\overline{\mbox{ss}}_{1}\f$ (ss_1bar) */ Ximinus = 3312, /**< \f$\Xi ^{-}\f$ (Xi-) */ Xibarplus = -3312, /**< \f$\overline{\Xi }^{+}\f$ (Xibar+) */ Xistarminus = 3314, /**< \f$\Xi ^{*-}\f$ (Xi*-) */ Xistarbarplus = -3314, /**< \f$\overline{\Xi }^{*+}\f$ (Xi*bar+) */ Xi0 = 3322, /**< \f$\Xi ^{0 }\f$ (Xi0) */ Xibar0 = -3322, /**< \f$\overline{\Xi }^{0 }\f$ (Xibar0) */ Xistar0 = 3324, /**< \f$\Xi ^{*0 }\f$ (Xi*0) */ Xistarbar0 = -3324, /**< \f$\overline{\Xi }^{*0 }\f$ (Xi*bar0) */ Omegaminus = 3334, /**< \f$\Omega ^{-}\f$ (Omega-) */ Omegabarplus = -3334, /**< \f$\overline{\Omega }^{+}\f$ (Omegabar+) */ cd_0 = 4101, /**< \f$\mbox{cd}^{0 }\f$ (cd_0) */ cd_0bar = -4101, /**< \f$\overline{\mbox{cd}}^{0 }\f$ (cd_0bar) */ cd_1 = 4103, /**< \f$\mbox{cd}_{1}\f$ (cd_1) */ cd_1bar = -4103, /**< \f$\overline{\mbox{cd}}_{1}\f$ (cd_1bar) */ Sigma_c0 = 4112, /**< \f$\Sigma ^{0 }_{c}\f$ (Sigma_c0) */ Sigma_cbar0 = -4112, /**< \f$\overline{\Sigma }^{0 }_{c}\f$ (Sigma_cbar0) */ Sigmastar_c0 = 4114, /**< \f$\Sigma ^{*0 }_{c}\f$ (Sigma*_c0) */ Sigmastar_cbar0 = -4114, /**< \f$\overline{\Sigma }^{*0 }_{c}\f$ (Sigma*_cbar0) */ Lambda_cplus = 4122, /**< \f$\Lambda ^{+}_{c}\f$ (Lambda_c+) */ Lambda_cbarminus = -4122, /**< \f$\overline{\Lambda }^{-}_{c}\f$ (Lambda_cbar-) */ Xi_c0 = 4132, /**< \f$\Xi ^{0 }_{c}\f$ (Xi_c0) */ Xi_cbar0 = -4132, /**< \f$\overline{\Xi }^{0 }_{c}\f$ (Xi_cbar0) */ cu_0 = 4201, /**< \f$\mbox{cu}^{0 }\f$ (cu_0) */ cu_0bar = -4201, /**< \f$\overline{\mbox{cu}}^{0 }\f$ (cu_0bar) */ cu_1 = 4203, /**< \f$\mbox{cu}_{1}\f$ (cu_1) */ cu_1bar = -4203, /**< \f$\overline{\mbox{cu}}_{1}\f$ (cu_1bar) */ Sigma_cplus = 4212, /**< \f$\Sigma ^{+}_{c}\f$ (Sigma_c+) */ Sigma_cbarminus = -4212, /**< \f$\overline{\Sigma }^{-}_{c}\f$ (Sigma_cbar-) */ Sigmastar_cplus = 4214, /**< \f$\Sigma ^{*+}_{c}\f$ (Sigma*_c+) */ Sigmastar_cbarminus = -4214, /**< \f$\overline{\Sigma }^{*-}_{c}\f$ (Sigma*_cbar-) */ Sigma_cplus2 = 4222, /**< \f$\Sigma ^{++}_{c}\f$ (Sigma_c++) */ Sigma_cbarminus2 = -4222, /**< \f$\overline{\Sigma }^{--}_{c}\f$ (Sigma_cbar--) */ Sigmastar_cplus2 = 4224, /**< \f$\Sigma ^{*++}_{c}\f$ (Sigma*_c++) */ Sigmastar_cbarminus2 = -4224, /**< \f$\overline{\Sigma }^{*--}_{c}\f$ (Sigma*_cbar--) */ Xi_cplus = 4232, /**< \f$\Xi ^{+}_{c}\f$ (Xi_c+) */ Xi_cbarminus = -4232, /**< \f$\overline{\Xi }^{-}_{c}\f$ (Xi_cbar-) */ cs_0 = 4301, /**< \f$\mbox{cs}^{0 }\f$ (cs_0) */ cs_0bar = -4301, /**< \f$\overline{\mbox{cs}}^{0 }\f$ (cs_0bar) */ cs_1 = 4303, /**< \f$\mbox{cs}_{1}\f$ (cs_1) */ cs_1bar = -4303, /**< \f$\overline{\mbox{cs}}_{1}\f$ (cs_1bar) */ Xiprime_c0 = 4312, /**< \f$\Xi ^{\prime 0 }_{c}\f$ (Xi'_c0) */ Xiprime_cbar0 = -4312, /**< \f$\overline{\Xi }^{\prime 0 }_{c}\f$ (Xi'_cbar0) */ Xistar_c0 = 4314, /**< \f$\Xi ^{*0 }_{c}\f$ (Xi*_c0) */ Xistar_cbar0 = -4314, /**< \f$\overline{\Xi }^{*0 }_{c}\f$ (Xi*_cbar0) */ Xiprime_cplus = 4322, /**< \f$\Xi ^{\prime +}_{c}\f$ (Xi'_c+) */ Xiprime_cbarminus = -4322, /**< \f$\overline{\Xi }^{\prime -}_{c}\f$ (Xi'_cbar-) */ Xistar_cplus = 4324, /**< \f$\Xi ^{*+}_{c}\f$ (Xi*_c+) */ Xistar_cbarminus = -4324, /**< \f$\overline{\Xi }^{*-}_{c}\f$ (Xi*_cbar-) */ Omega_c0 = 4332, /**< \f$\Omega ^{0 }_{c}\f$ (Omega_c0) */ Omega_cbar0 = -4332, /**< \f$\overline{\Omega }^{0 }_{c}\f$ (Omega_cbar0) */ Omegastar_c0 = 4334, /**< \f$\Omega ^{*0 }_{c}\f$ (Omega*_c0) */ Omegastar_cbar0 = -4334, /**< \f$\overline{\Omega }^{*0 }_{c}\f$ (Omega*_cbar0) */ cc_1 = 4403, /**< \f$\mbox{cc}_{1}\f$ (cc_1) */ cc_1bar = -4403, /**< \f$\overline{\mbox{cc}}_{1}\f$ (cc_1bar) */ Xi_ccplus = 4412, /**< \f$\Xi ^{+}_{cc}\f$ (Xi_cc+) */ Xi_ccbarminus = -4412, /**< \f$\overline{\Xi }^{-}_{cc}\f$ (Xi_ccbar-) */ Xistar_ccplus = 4414, /**< \f$\Xi ^{*+}_{cc}\f$ (Xi*_cc+) */ Xistar_ccbarminus = -4414, /**< \f$\overline{\Xi }^{*-}_{cc}\f$ (Xi*_ccbar-) */ Xi_ccplus2 = 4422, /**< \f$\Xi ^{++}_{cc}\f$ (Xi_cc++) */ Xi_ccbarminus2 = -4422, /**< \f$\overline{\Xi }^{--}_{cc}\f$ (Xi_ccbar--) */ Xistar_ccplus2 = 4424, /**< \f$\Xi ^{*++}_{cc}\f$ (Xi*_cc++) */ Xistar_ccbarminus2 = -4424, /**< \f$\overline{\Xi }^{*--}_{cc}\f$ (Xi*_ccbar--) */ Omega_ccplus = 4432, /**< \f$\Omega ^{+}_{cc}\f$ (Omega_cc+) */ Omega_ccbarminus = -4432, /**< \f$\overline{\Omega }^{-}_{cc}\f$ (Omega_ccbar-) */ Omegastar_ccplus = 4434, /**< \f$\Omega ^{*+}_{cc}\f$ (Omega*_cc+) */ Omegastar_ccbarminus = -4434, /**< \f$\overline{\Omega }^{*-}_{cc}\f$ (Omega*_ccbar-) */ Omegastar_cccplus2 = 4444, /**< \f$\Omega ^{*++}_{ccc}\f$ (Omega*_ccc++) */ Omegastar_cccbarminus = -4444, /**< \f$\overline{\Omega }^{*-}_{ccc}\f$ (Omega*_cccbar-) */ bd_0 = 5101, /**< \f$\mbox{bd}^{0 }\f$ (bd_0) */ bd_0bar = -5101, /**< \f$\overline{\mbox{bd}}^{0 }\f$ (bd_0bar) */ bd_1 = 5103, /**< \f$\mbox{bd}_{1}\f$ (bd_1) */ bd_1bar = -5103, /**< \f$\overline{\mbox{bd}}_{1}\f$ (bd_1bar) */ Sigma_bminus = 5112, /**< \f$\Sigma ^{-}_{b}\f$ (Sigma_b-) */ Sigma_bbarplus = -5112, /**< \f$\overline{\Sigma }^{+}_{b}\f$ (Sigma_bbar+) */ Sigmastar_bminus = 5114, /**< \f$\Sigma ^{*-}_{b}\f$ (Sigma*_b-) */ Sigmastar_bbarplus = -5114, /**< \f$\overline{\Sigma }^{*+}_{b}\f$ (Sigma*_bbar+) */ Lambda_b0 = 5122, /**< \f$\Lambda ^{0 }_{b}\f$ (Lambda_b0) */ Lambda_bbar0 = -5122, /**< \f$\overline{\Lambda }^{0 }_{b}\f$ (Lambda_bbar0) */ Xi_bminus = 5132, /**< \f$\Xi ^{-}_{b}\f$ (Xi_b-) */ Xi_bbarplus = -5132, /**< \f$\overline{\Xi }^{+}_{b}\f$ (Xi_bbar+) */ Xi_bc0 = 5142, /**< \f$\Xi ^{0 }_{bc}\f$ (Xi_bc0) */ Xi_bcbar0 = -5142, /**< \f$\overline{\Xi }^{0 }_{bc}\f$ (Xi_bcbar0) */ bu_0 = 5201, /**< \f$\mbox{bu}^{0 }\f$ (bu_0) */ bu_0bar = -5201, /**< \f$\overline{\mbox{bu}}^{0 }\f$ (bu_0bar) */ bu_1 = 5203, /**< \f$\mbox{bu}_{1}\f$ (bu_1) */ bu_1bar = -5203, /**< \f$\overline{\mbox{bu}}_{1}\f$ (bu_1bar) */ Sigma_b0 = 5212, /**< \f$\Sigma ^{0 }_{b}\f$ (Sigma_b0) */ Sigma_bbar0 = -5212, /**< \f$\overline{\Sigma }^{0 }_{b}\f$ (Sigma_bbar0) */ Sigmastar_b0 = 5214, /**< \f$\Sigma ^{*0 }_{b}\f$ (Sigma*_b0) */ Sigmastar_bbar0 = -5214, /**< \f$\overline{\Sigma }^{*0 }_{b}\f$ (Sigma*_bbar0) */ Sigma_bplus = 5222, /**< \f$\Sigma ^{+}_{b}\f$ (Sigma_b+) */ Sigma_bbarminus = -5222, /**< \f$\overline{\Sigma }^{-}_{b}\f$ (Sigma_bbar-) */ Sigmastar_bplus = 5224, /**< \f$\Sigma ^{*+}_{b}\f$ (Sigma*_b+) */ Sigmastar_bbarminus = -5224, /**< \f$\overline{\Sigma }^{*-}_{b}\f$ (Sigma*_bbar-) */ Xi_b0 = 5232, /**< \f$\Xi ^{0 }_{b}\f$ (Xi_b0) */ Xi_bbar0 = -5232, /**< \f$\overline{\Xi }^{0 }_{b}\f$ (Xi_bbar0) */ Xi_bcplus = 5242, /**< \f$\Xi ^{+}_{bc}\f$ (Xi_bc+) */ Xi_bcbarminus = -5242, /**< \f$\overline{\Xi }^{-}_{bc}\f$ (Xi_bcbar-) */ bs_0 = 5301, /**< \f$\mbox{bs}^{0 }\f$ (bs_0) */ bs_0bar = -5301, /**< \f$\overline{\mbox{bs}}^{0 }\f$ (bs_0bar) */ bs_1 = 5303, /**< \f$\mbox{bs}_{1}\f$ (bs_1) */ bs_1bar = -5303, /**< \f$\overline{\mbox{bs}}_{1}\f$ (bs_1bar) */ Xiprime_bminus = 5312, /**< \f$\Xi ^{\prime -}_{b}\f$ (Xi'_b-) */ Xiprime_bbarplus = -5312, /**< \f$\overline{\Xi }^{\prime +}_{b}\f$ (Xi'_bbar+) */ Xistar_bminus = 5314, /**< \f$\Xi ^{*-}_{b}\f$ (Xi*_b-) */ Xistar_bbarplus = -5314, /**< \f$\overline{\Xi }^{*+}_{b}\f$ (Xi*_bbar+) */ Xiprime_b0 = 5322, /**< \f$\Xi ^{\prime 0 }_{b}\f$ (Xi'_b0) */ Xiprime_bbar0 = -5322, /**< \f$\overline{\Xi }^{\prime 0 }_{b}\f$ (Xi'_bbar0) */ Xistar_b0 = 5324, /**< \f$\Xi ^{*0 }_{b}\f$ (Xi*_b0) */ Xistar_bbar0 = -5324, /**< \f$\overline{\Xi }^{*0 }_{b}\f$ (Xi*_bbar0) */ Omega_bminus = 5332, /**< \f$\Omega ^{-}_{b}\f$ (Omega_b-) */ Omega_bbarplus = -5332, /**< \f$\overline{\Omega }^{+}_{b}\f$ (Omega_bbar+) */ Omegastar_bminus = 5334, /**< \f$\Omega ^{*-}_{b}\f$ (Omega*_b-) */ Omegastar_bbarplus = -5334, /**< \f$\overline{\Omega }^{*+}_{b}\f$ (Omega*_bbar+) */ Omega_bc0 = 5342, /**< \f$\Omega ^{0 }_{bc}\f$ (Omega_bc0) */ Omega_bcbar0 = -5342, /**< \f$\overline{\Omega }^{0 }_{bc}\f$ (Omega_bcbar0) */ bc_0 = 5401, /**< \f$\mbox{bc}^{0 }\f$ (bc_0) */ bc_0bar = -5401, /**< \f$\overline{\mbox{bc}}^{0 }\f$ (bc_0bar) */ bc_1 = 5403, /**< \f$\mbox{bc}_{1}\f$ (bc_1) */ bc_1bar = -5403, /**< \f$\overline{\mbox{bc}}_{1}\f$ (bc_1bar) */ Xiprime_bc0 = 5412, /**< \f$\Xi ^{\prime 0 }_{bc}\f$ (Xi'_bc0) */ Xiprime_bcbar0 = -5412, /**< \f$\overline{\Xi }^{\prime 0 }_{bc}\f$ (Xi'_bcbar0) */ Xistar_bc0 = 5414, /**< \f$\Xi ^{*0 }_{bc}\f$ (Xi*_bc0) */ Xistar_bcbar0 = -5414, /**< \f$\overline{\Xi }^{*0 }_{bc}\f$ (Xi*_bcbar0) */ Xiprime_bcplus = 5422, /**< \f$\Xi ^{\prime +}_{bc}\f$ (Xi'_bc+) */ Xiprime_bcbarminus = -5422, /**< \f$\overline{\Xi }^{\prime -}_{bc}\f$ (Xi'_bcbar-) */ Xistar_bcplus = 5424, /**< \f$\Xi ^{*+}_{bc}\f$ (Xi*_bc+) */ Xistar_bcbarminus = -5424, /**< \f$\overline{\Xi }^{*-}_{bc}\f$ (Xi*_bcbar-) */ Omegaprime_bc0 = 5432, /**< \f$\Omega ^{\prime 0 }_{bc}\f$ (Omega'_bc0) */ Omegaprime_bcba = -5432, /**< \f$\overline{\Omega }^{\prime }_{bc}\f$ (Omega'_bcba) */ Omegastar_bc0 = 5434, /**< \f$\Omega ^{*0 }_{bc}\f$ (Omega*_bc0) */ Omegastar_bcbar0 = -5434, /**< \f$\overline{\Omega }^{*0 }_{bc}\f$ (Omega*_bcbar0) */ Omega_bccplus = 5442, /**< \f$\Omega ^{+}_{bcc}\f$ (Omega_bcc+) */ Omega_bccbarminus = -5442, /**< \f$\overline{\Omega }^{-}_{bcc}\f$ (Omega_bccbar-) */ Omegastar_bccplus = 5444, /**< \f$\Omega ^{*+}_{bcc}\f$ (Omega*_bcc+) */ Omegastar_bccbarminus = -5444, /**< \f$\overline{\Omega }^{*-}_{bcc}\f$ (Omega*_bccbar-) */ bb_1 = 5503, /**< \f$\mbox{bb}_{1}\f$ (bb_1) */ bb_1bar = -5503, /**< \f$\overline{\mbox{bb}}_{1}\f$ (bb_1bar) */ Xi_bbminus = 5512, /**< \f$\Xi ^{-}_{bb}\f$ (Xi_bb-) */ Xi_bbbarplus = -5512, /**< \f$\overline{\Xi }^{+}_{bb}\f$ (Xi_bbbar+) */ Xistar_bbminus = 5514, /**< \f$\Xi ^{*-}_{bb}\f$ (Xi*_bb-) */ Xistar_bbbarplus = -5514, /**< \f$\overline{\Xi }^{*+}_{bb}\f$ (Xi*_bbbar+) */ Xi_bb0 = 5522, /**< \f$\Xi ^{0 }_{bb}\f$ (Xi_bb0) */ Xi_bbbar0 = -5522, /**< \f$\overline{\Xi }^{0 }_{bb}\f$ (Xi_bbbar0) */ Xistar_bb0 = 5524, /**< \f$\Xi ^{*0 }_{bb}\f$ (Xi*_bb0) */ Xistar_bbbar0 = -5524, /**< \f$\overline{\Xi }^{*0 }_{bb}\f$ (Xi*_bbbar0) */ Omega_bbminus = 5532, /**< \f$\Omega ^{-}_{bb}\f$ (Omega_bb-) */ Omega_bbbarplus = -5532, /**< \f$\overline{\Omega }^{+}_{bb}\f$ (Omega_bbbar+) */ Omegastar_bbminus = 5534, /**< \f$\Omega ^{*-}_{bb}\f$ (Omega*_bb-) */ Omegastar_bbbarplus = -5534, /**< \f$\overline{\Omega }^{*+}_{bb}\f$ (Omega*_bbbar+) */ Omega_bbc0 = 5542, /**< \f$\Omega ^{0 }_{bbc}\f$ (Omega_bbc0) */ Omega_bbcbar0 = -5542, /**< \f$\overline{\Omega }^{0 }_{bbc}\f$ (Omega_bbcbar0) */ Omegastar_bbc0 = 5544, /**< \f$\Omega ^{*0 }_{bbc}\f$ (Omega*_bbc0) */ Omegastar_bbcbar0 = -5544, /**< \f$\overline{\Omega }^{*0 }_{bbc}\f$ (Omega*_bbcbar0) */ Omegastar_bbbminus = 5554, /**< \f$\Omega ^{*-}_{bbb}\f$ (Omega*_bbb-) */ Omegastar_bbbbarplus = -5554, /**< \f$\overline{\Omega }^{*+}_{bbb}\f$ (Omega*_bbbbar+) */ a_00 = 9000111, /**< \f$\mbox{a}^{0 }\f$ (a_00) */ b_10 = 10113, /**< \f$\mbox{b}^{0 }_{1}\f$ (b_10) */ a_0plus = 9000211, /**< \f$\mbox{a}^{0 +}\f$ (a_0+) */ a_0minus = -9000211, /**< \f$\mbox{a}^{0 -}\f$ (a_0-) */ b_1plus = 10213, /**< \f$\mbox{b}^{+}_{1}\f$ (b_1+) */ b_1minus = -10213, /**< \f$\mbox{b}^{-}_{1}\f$ (b_1-) */ f_0 = 9010221, /**< \f$\mbox{f}^{0 }\f$ (f_0) */ h_1 = 10223, /**< \f$\mbox{h}_{1}\f$ (h_1) */ Kstar_00 = 10311, /**< \f$\mbox{K}^{*0 }\f$ (K*_00) */ Kstar_0bar0 = -10311, /**< \f$\overline{\mbox{K}}^{*0 }\f$ (K*_0bar0) */ K_10 = 10313, /**< \f$\mbox{K}^{0 }_{1}\f$ (K_10) */ K_1bar0 = -10313, /**< \f$\overline{\mbox{K}}^{0 }_{1}\f$ (K_1bar0) */ Kstar_0plus = 10321, /**< \f$\mbox{K}^{*0 +}\f$ (K*_0+) */ Kstar_0minus = -10321, /**< \f$\mbox{K}^{*0 -}\f$ (K*_0-) */ K_1plus = 10323, /**< \f$\mbox{K}^{+}_{1}\f$ (K_1+) */ K_1minus = -10323, /**< \f$\mbox{K}^{-}_{1}\f$ (K_1-) */ eta1440 = 100331, /**< \f$\eta ^{0 }_{144}\f$ (eta1440) */ hprime_1 = 10333, /**< \f$\mbox{h}^{\prime }_{1}\f$ (h'_1) */ Dstar_0plus = 10411, /**< \f$\mbox{D}^{*0 +}\f$ (D*_0+) */ Dstar_0minus = -10411, /**< \f$\mbox{D}^{*0 -}\f$ (D*_0-) */ D_1plus = 10413, /**< \f$\mbox{D}^{+}_{1}\f$ (D_1+) */ D_1minus = -10413, /**< \f$\mbox{D}^{-}_{1}\f$ (D_1-) */ Dstar_00 = 10421, /**< \f$\mbox{D}^{*0 }\f$ (D*_00) */ Dstar_0bar0 = -10421, /**< \f$\overline{\mbox{D}}^{*0 }\f$ (D*_0bar0) */ D_10 = 10423, /**< \f$\mbox{D}^{0 }_{1}\f$ (D_10) */ D_1bar0 = -10423, /**< \f$\overline{\mbox{D}}^{0 }_{1}\f$ (D_1bar0) */ Dstar_0splus = 10431, /**< \f$\mbox{D}^{*+}_{0s}\f$ (D*_0s+) */ Dstar_0sminus = -10431, /**< \f$\mbox{D}^{*-}_{0s}\f$ (D*_0s-) */ D_1splus = 10433, /**< \f$\mbox{D}^{+}_{1s}\f$ (D_1s+) */ D_1sminus = -10433, /**< \f$\mbox{D}^{-}_{1s}\f$ (D_1s-) */ chi_0c = 10441, /**< \f$\chi _{0c}\f$ (chi_0c) */ h_1c = 10443, /**< \f$\mbox{h}_{1c}\f$ (h_1c) */ Bstar_00 = 10511, /**< \f$\mbox{B}^{*0 }\f$ (B*_00) */ Bstar_0bar0 = -10511, /**< \f$\overline{\mbox{B}}^{*0 }\f$ (B*_0bar0) */ B_10 = 10513, /**< \f$\mbox{B}^{0 }_{1}\f$ (B_10) */ B_1bar0 = -10513, /**< \f$\overline{\mbox{B}}^{0 }_{1}\f$ (B_1bar0) */ Bstar_0plus = 10521, /**< \f$\mbox{B}^{*0 +}\f$ (B*_0+) */ Bstar_0minus = -10521, /**< \f$\mbox{B}^{*0 -}\f$ (B*_0-) */ B_1plus = 10523, /**< \f$\mbox{B}^{+}_{1}\f$ (B_1+) */ B_1minus = -10523, /**< \f$\mbox{B}^{-}_{1}\f$ (B_1-) */ Bstar_0s0 = 10531, /**< \f$\mbox{B}^{*0 }_{0s}\f$ (B*_0s0) */ Bstar_0sbar0 = -10531, /**< \f$\overline{\mbox{B}}^{*0 }_{0s}\f$ (B*_0sbar0) */ B_1s0 = 10533, /**< \f$\mbox{B}^{0 }_{1s}\f$ (B_1s0) */ B_1sbar0 = -10533, /**< \f$\overline{\mbox{B}}^{0 }_{1s}\f$ (B_1sbar0) */ Bstar_0cplus = 10541, /**< \f$\mbox{B}^{*+}_{0c}\f$ (B*_0c+) */ Bstar_0cminus = -10541, /**< \f$\mbox{B}^{*-}_{0c}\f$ (B*_0c-) */ B_1cplus = 10543, /**< \f$\mbox{B}^{+}_{1c}\f$ (B_1c+) */ B_1cminus = -10543, /**< \f$\mbox{B}^{-}_{1c}\f$ (B_1c-) */ chi_0b = 10551, /**< \f$\chi _{0b}\f$ (chi_0b) */ h_1b = 10553, /**< \f$\mbox{h}_{1b}\f$ (h_1b) */ a_10 = 20113, /**< \f$\mbox{a}^{0 }_{1}\f$ (a_10) */ a_1plus = 20213, /**< \f$\mbox{a}^{+}_{1}\f$ (a_1+) */ a_1minus = -20213, /**< \f$\mbox{a}^{-}_{1}\f$ (a_1-) */ f_1 = 20223, /**< \f$\mbox{f}_{1}\f$ (f_1) */ Kstar_10 = 20313, /**< \f$\mbox{K}^{*0 }_{1}\f$ (K*_10) */ Kstar_1bar0 = -20313, /**< \f$\overline{\mbox{K}}^{*0 }_{1}\f$ (K*_1bar0) */ Kstar_1plus = 20323, /**< \f$\mbox{K}^{*+}_{1}\f$ (K*_1+) */ Kstar_1minus = -20323, /**< \f$\mbox{K}^{*-}_{1}\f$ (K*_1-) */ fprime_1 = 20333, /**< \f$\mbox{f}^{\prime }_{1}\f$ (f'_1) */ Dstar_1plus = 20413, /**< \f$\mbox{D}^{*+}_{1}\f$ (D*_1+) */ Dstar_1minus = -20413, /**< \f$\mbox{D}^{*-}_{1}\f$ (D*_1-) */ Dstar_10 = 20423, /**< \f$\mbox{D}^{*0 }_{1}\f$ (D*_10) */ Dstar_1bar0 = -20423, /**< \f$\overline{\mbox{D}}^{*0 }_{1}\f$ (D*_1bar0) */ Dstar_1splus = 20433, /**< \f$\mbox{D}^{*+}_{1s}\f$ (D*_1s+) */ Dstar_1sminus = -20433, /**< \f$\mbox{D}^{*-}_{1s}\f$ (D*_1s-) */ chi_1c = 20443, /**< \f$\chi _{1c}\f$ (chi_1c) */ Bstar_10 = 20513, /**< \f$\mbox{B}^{*0 }_{1}\f$ (B*_10) */ Bstar_1bar0 = -20513, /**< \f$\overline{\mbox{B}}^{*0 }_{1}\f$ (B*_1bar0) */ Bstar_1plus = 20523, /**< \f$\mbox{B}^{*+}_{1}\f$ (B*_1+) */ Bstar_1minus = -20523, /**< \f$\mbox{B}^{*-}_{1}\f$ (B*_1-) */ Bstar_1s0 = 20533, /**< \f$\mbox{B}^{*0 }_{1s}\f$ (B*_1s0) */ Bstar_1sbar0 = -20533, /**< \f$\overline{\mbox{B}}^{*0 }_{1s}\f$ (B*_1sbar0) */ Bstar_1cplus = 20543, /**< \f$\mbox{B}^{*+}_{1c}\f$ (B*_1c+) */ Bstar_1cminus = -20543, /**< \f$\mbox{B}^{*-}_{1c}\f$ (B*_1c-) */ chi_1b = 20553, /**< \f$\chi _{1b}\f$ (chi_1b) */ psiprime = 100443, /**< \f$\psi ^{\prime }\f$ (psi') */ Upsilonprime = 100553, /**< \f$\Upsilon ^{\prime }\f$ (Upsilon') */ SUSY_d_L = 1000001, /**< \f$\tilde{\mbox{d}}_{L}\f$ (~d_L) */ SUSY_d_Lbar = -1000001, /**< \f$\tilde{\overline{\mbox{d}}}_{L}\f$ (~d_Lbar) */ SUSY_u_L = 1000002, /**< \f$\tilde{\mbox{u}}_{L}\f$ (~u_L) */ SUSY_u_Lbar = -1000002, /**< \f$\tilde{\overline{\mbox{u}}}_{L}\f$ (~u_Lbar) */ SUSY_s_L = 1000003, /**< \f$\tilde{\mbox{s}}_{L}\f$ (~s_L) */ SUSY_s_Lbar = -1000003, /**< \f$\tilde{\overline{\mbox{s}}}_{L}\f$ (~s_Lbar) */ SUSY_c_L = 1000004, /**< \f$\tilde{\mbox{c}}_{L}\f$ (~c_L) */ SUSY_c_Lbar = -1000004, /**< \f$\tilde{\overline{\mbox{c}}}_{L}\f$ (~c_Lbar) */ SUSY_b_1 = 1000005, /**< \f$\tilde{\mbox{b}}_{1}\f$ (~b_1) */ SUSY_b_1bar = -1000005, /**< \f$\tilde{\overline{\mbox{b}}}_{1}\f$ (~b_1bar) */ SUSY_t_1 = 1000006, /**< \f$\tilde{\mbox{t}}_{1}\f$ (~t_1) */ SUSY_t_1bar = -1000006, /**< \f$\tilde{\overline{\mbox{t}}}_{1}\f$ (~t_1bar) */ SUSY_e_Lminus = 1000011, /**< \f$\tilde{\mbox{e}}^{-}_{L}\f$ (~e_L-) */ SUSY_e_Lplus = -1000011, /**< \f$\tilde{\mbox{e}}^{+}_{L}\f$ (~e_L+) */ SUSY_nu_eL = 1000012, /**< \f$\tilde{\nu }_{eL}\f$ (~nu_eL) */ SUSY_nu_eLbar = -1000012, /**< \f$\tilde{\overline{\nu }}_{eL}\f$ (~nu_eLbar) */ SUSY_mu_Lminus = 1000013, /**< \f$\tilde{\mu }^{-}_{L}\f$ (~mu_L-) */ SUSY_mu_Lplus = -1000013, /**< \f$\tilde{\mu }^{+}_{L}\f$ (~mu_L+) */ SUSY_nu_muL = 1000014, /**< \f$\tilde{\nu }_{\mu L}\f$ (~nu_muL) */ SUSY_nu_muLbar = -1000014, /**< \f$\tilde{\overline{\nu }}_{\mu L}\f$ (~nu_muLbar) */ SUSY_tau_1minus = 1000015, /**< \f$\tilde{\tau }^{-}_{1}\f$ (~tau_1-) */ SUSY_tau_1plus = -1000015, /**< \f$\tilde{\tau }^{+}_{1}\f$ (~tau_1+) */ SUSY_nu_tauL = 1000016, /**< \f$\tilde{\nu }_{\tau L}\f$ (~nu_tauL) */ SUSY_nu_tauLbar = -1000016, /**< \f$\tilde{\overline{\nu }}_{\tau L}\f$ (~nu_tauLbar) */ SUSY_g = 1000021, /**< \f$\tilde{\mbox{g}}\f$ (~g) */ SUSY_chi_10 = 1000022, /**< \f$\tilde{\chi }^{0 }_{1}\f$ (~chi_10) */ SUSY_chi_20 = 1000023, /**< \f$\tilde{\chi }^{0 }_{2}\f$ (~chi_20) */ SUSY_chi_1plus = 1000024, /**< \f$\tilde{\chi }^{+}_{1}\f$ (~chi_1+) */ SUSY_chi_1minus = -1000024, /**< \f$\tilde{\chi }^{-}_{1}\f$ (~chi_1-) */ SUSY_chi_30 = 1000025, /**< \f$\tilde{\chi }^{0 }_{3}\f$ (~chi_30) */ SUSY_chi_40 = 1000035, /**< \f$\tilde{\chi }^{0 }_{4}\f$ (~chi_40) */ SUSY_chi_2plus = 1000037, /**< \f$\tilde{\chi }^{+}_{2}\f$ (~chi_2+) */ SUSY_chi_2minus = -1000037, /**< \f$\tilde{\chi }^{-}_{2}\f$ (~chi_2-) */ SUSY_Gravitino = 1000039, /**< \f$\tilde{{\cal G}}\f$ (~Gravitino) */ SUSY_d_R = 2000001, /**< \f$\tilde{\mbox{d}}_{R}\f$ (~d_R) */ SUSY_d_Rbar = -2000001, /**< \f$\tilde{\overline{\mbox{d}}}_{R}\f$ (~d_Rbar) */ SUSY_u_R = 2000002, /**< \f$\tilde{\mbox{u}}_{R}\f$ (~u_R) */ SUSY_u_Rbar = -2000002, /**< \f$\tilde{\overline{\mbox{u}}}_{R}\f$ (~u_Rbar) */ SUSY_s_R = 2000003, /**< \f$\tilde{\mbox{s}}_{R}\f$ (~s_R) */ SUSY_s_Rbar = -2000003, /**< \f$\tilde{\overline{\mbox{s}}}_{R}\f$ (~s_Rbar) */ SUSY_c_R = 2000004, /**< \f$\tilde{\mbox{c}}_{R}\f$ (~c_R) */ SUSY_c_Rbar = -2000004, /**< \f$\tilde{\overline{\mbox{c}}}_{R}\f$ (~c_Rbar) */ SUSY_b_2 = 2000005, /**< \f$\tilde{\mbox{b}}_{2}\f$ (~b_2) */ SUSY_b_2bar = -2000005, /**< \f$\tilde{\overline{\mbox{b}}}_{2}\f$ (~b_2bar) */ SUSY_t_2 = 2000006, /**< \f$\tilde{\mbox{t}}_{2}\f$ (~t_2) */ SUSY_t_2bar = -2000006, /**< \f$\tilde{\overline{\mbox{t}}}_{2}\f$ (~t_2bar) */ SUSY_e_Rminus = 2000011, /**< \f$\tilde{\mbox{e}}^{-}_{R}\f$ (~e_R-) */ SUSY_e_Rplus = -2000011, /**< \f$\tilde{\mbox{e}}^{+}_{R}\f$ (~e_R+) */ SUSY_nu_eR = 2000012, /**< \f$\tilde{\nu }_{eR}\f$ (~nu_eR) */ SUSY_nu_eRbar = -2000012, /**< \f$\tilde{\overline{\nu }}_{eR}\f$ (~nu_eRbar) */ SUSY_mu_Rminus = 2000013, /**< \f$\tilde{\mu }^{-}_{R}\f$ (~mu_R-) */ SUSY_mu_Rplus = -2000013, /**< \f$\tilde{\mu }^{+}_{R}\f$ (~mu_R+) */ SUSY_nu_muR = 2000014, /**< \f$\tilde{\nu }_{\mu R}\f$ (~nu_muR) */ SUSY_nu_muRbar = -2000014, /**< \f$\tilde{\overline{\nu }}_{\mu R}\f$ (~nu_muRbar) */ SUSY_tau_2minus = 2000015, /**< \f$\tilde{\tau }^{-}_{2}\f$ (~tau_2-) */ SUSY_tau_2plus = -2000015, /**< \f$\tilde{\tau }^{+}_{2}\f$ (~tau_2+) */ SUSY_nu_tauR = 2000016, /**< \f$\tilde{\nu }_{\tau R}\f$ (~nu_tauR) */ SUSY_nu_tauRbar = -2000016, /**< \f$\tilde{\overline{\nu }}_{\tau R}\f$ (~nu_tauRbar) */ pi_tc0 = 3000111, /**< \f$\pi ^{0 }_{tc}\f$ (pi_tc0) */ pi_tcplus = 3000211, /**< \f$\pi ^{+}_{tc}\f$ (pi_tc+) */ pi_tcminus = -3000211, /**< \f$\pi ^{-}_{tc}\f$ (pi_tc-) */ piprime_tc0 = 3000221, /**< \f$\pi ^{\prime 0 }_{tc}\f$ (pi'_tc0) */ eta_tc0 = 3000331, /**< \f$\eta ^{0 }_{tc}\f$ (eta_tc0) */ rho_tc0 = 3000113, /**< \f$\rho ^{0 }_{tc}\f$ (rho_tc0) */ rho_tcplus = 3000213, /**< \f$\rho ^{+}_{tc}\f$ (rho_tc+) */ rho_tcminus = -3000213, /**< \f$\rho ^{-}_{tc}\f$ (rho_tc-) */ omega_tc = 3000223, /**< \f$\omega _{tc}\f$ (omega_tc) */ V8_tc = 3100021, /**< \f$\mbox{V}_{8tc}\f$ (V8_tc) */ pi_22_1_tc = 3100111, /**< \f$\pi _{22}\f$ (pi_22_1_tc) */ pi_22_8_tc = 3200111, /**< \f$\pi _{22}\f$ (pi_22_8_tc) */ rho_11_tc = 3100113, /**< \f$\rho _{11}\f$ (rho_11_tc) */ rho_12_tc = 3200113, /**< \f$\rho _{12}\f$ (rho_12_tc) */ rho_21_tc = 3300113, /**< \f$\rho _{21}\f$ (rho_21_tc) */ rho_22_tc = 3400113, /**< \f$\rho _{22}\f$ (rho_22_tc) */ dstar = 4000001, /**< \f$\mbox{d}^{*}\f$ (d*) */ dstarbar = -4000001, /**< \f$\overline{\mbox{d}}^{*}\f$ (d*bar) */ ustar = 4000002, /**< \f$\mbox{u}^{*}\f$ (u*) */ ustarbar = -4000002, /**< \f$\overline{\mbox{u}}^{*}\f$ (u*bar) */ estarminus = 4000011, /**< \f$\mbox{e}^{*-}\f$ (e*-) */ estarbarplus = -4000011, /**< \f$\overline{\mbox{e}}^{*+}\f$ (e*bar+) */ nustar_e0 = 4000012, /**< \f$\nu ^{*0 }_{e}\f$ (nu*_e0) */ nustar_ebar0 = -4000012, /**< \f$\overline{\nu }^{*0 }_{e}\f$ (nu*_ebar0) */ Gravitonstar = 5000039, /**< \f${\cal G}^{*}\f$ (Graviton*) */ nu_Re = 9900012, /**< \f$\nu _{Re}\f$ (nu_Re) */ nu_Rmu = 9900014, /**< \f$\nu _{R\mu }\f$ (nu_Rmu) */ nu_Rtau = 9900016, /**< \f$\nu _{R\tau }\f$ (nu_Rtau) */ Z_R0 = 9900023, /**< \f$\mbox{Z}^{0 }_{R}\f$ (Z_R0) */ W_Rplus = 9900024, /**< \f$\mbox{W}^{+}_{R}\f$ (W_R+) */ W_Rminus = -9900024, /**< \f$\mbox{W}^{-}_{R}\f$ (W_R-) */ H_Lplus2 = 9900041, /**< \f$\mbox{H}^{++}_{L}\f$ (H_L++) */ H_Lminus2 = -9900041, /**< \f$\mbox{H}^{--}_{L}\f$ (H_L--) */ H_Rplus2 = 9900042, /**< \f$\mbox{H}^{++}_{R}\f$ (H_R++) */ H_Rminus2 = -9900042, /**< \f$\mbox{H}^{--}_{R}\f$ (H_R--) */ rho_diff0 = 9900110, /**< \f$\rho ^{0 }_{\mbox{\scriptsize diffr}}\f$ (rho_diff0) */ pi_diffrplus = 9900210, /**< \f$\pi ^{+}_{\mbox{\scriptsize diffr}}\f$ (pi_diffr+) */ pi_diffrminus = -9900210, /**< \f$\pi ^{-}_{\mbox{\scriptsize diffr}}\f$ (pi_diffr-) */ omega_di = 9900220, /**< \f$\omega _{\mbox{\scriptsize diffr}}\f$ (omega_di) */ phi_diff = 9900330, /**< \f$\phi _{\mbox{\scriptsize diffr}}\f$ (phi_diff) */ Jpsi_di = 9900440, /**< \f$J/\psi _{\mbox{\scriptsize diffr}}\f$ (J/psi_di) */ n_diffr0 = 9902110, /**< \f$\mbox{n}^{0 }_{\mbox{\scriptsize diffr}}\f$ (n_diffr0) */ n_diffrbar0 = -9902110, /**< \f$\overline{\mbox{n}}^{0 }_{\mbox{\scriptsize diffr}}\f$ (n_diffrbar0) */ p_diffrplus = 9902210, /**< \f$\mbox{p}^{+}_{\mbox{\scriptsize diffr}}\f$ (p_diffr+) */ p_diffrbarminus = -9902210, /**< \f$\overline{\mbox{p}}^{-}_{\mbox{\scriptsize diffr}}\f$ (p_diffrbar-) */ undefined = 0 /**< Undefined particle. */ }; } } #endif thepeg-1.8.0.orig/PDT/MatcherBase.h0000644000175000017500000002452611747772425015136 0ustar sunsun// -*- C++ -*- // // MatcherBase.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MatcherBase_H #define ThePEG_MatcherBase_H // This is the declaration of the MatcherBase class. #include "ParticleData.h" #include "ThePEG/EventRecord/Particle.h" namespace ThePEG { /** * MatcherBase is an abstract base class to be used for objects * representing groups of ParticleData objects. Concrete * implementations will typically use the templated Matcher class for * easy building of a full sub-class. * * @see ParticleData * @see Matcher * */ class MatcherBase: public Interfaced { public: /** Repository needs to be a friend. */ friend class Repository; /** * Convenient typedef. */ typedef set tPDSet; /** * Convenient typedef. */ typedef set tPMSet; public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ MatcherBase(); /** * Copy-constructor. */ MatcherBase(const MatcherBase &); /** * Destructor. */ virtual ~MatcherBase(); //@} public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Check if a particle type meets the criteria. */ virtual bool check(const ParticleData &) const = 0; /** * Specialized clone method for MatcherBase used by the * Repository. A sub class must make sure that also the MatcherBase * object corresponding to the complex conjugate of this is cloned. */ virtual PMPtr pmclone() const = 0; //@} /** @name Check if something is matched. */ //@{ /** * Check if a Particle meets the criteria. */ bool checkp(const Particle & p) const { return check(p.data()); } /** * Check if a given particle type belongs to the set of * matches. This function looks for the same ParticleData object in * the set of all particles matched by this matcher. May be quicker * than to go through the check proceedure. */ bool matches(const ParticleData & pd) const { return member(matchingParticles, PDPtr(const_cast(&pd))); } /** * Check if a given particle belongs to the set of matches. This * function looks for the corresponding ParticleData object in the * set of all particles matched by this matcher. May be quicker than * to go through the check proceedure. */ bool matches(const Particle & p) const { return matches(p.data()); } /** * Check if a given particle matcher belongs to the set of * matches. This function looks for the same MatcherBase object in * the set of all matchers matched by this matcher. */ bool matches(const MatcherBase & pm) const { return member(matchingMatchers, PMPtr(const_cast(&pm))); } //@} /** @name Access the sets of matching particles and matchers. */ //@{ /** * Access to the set of matching particles. */ const tPDSet & particles() const { return matchingParticles; } /** * Access to the set of matching matchers. */ const tPMSet & matchers() const { return matchingMatchers; } //@} /** @name Access common properties of all matched particles. */ //@{ /** * Returns the minimum mass of the matching particles. */ Energy minMass() const { return theMinMass; } /** * Returns the maximum mass of the matching particles. */ Energy maxMass() const { return theMaxMass; } /** * Returns the common mass of the matching particles. If all matching * particles do not have exactly the same mass, -1.0 GeV is returned. */ Energy mass() const { return commonMass; } /** * Returns the common width of the matching particles. If all matching * particles do not have exactly the same width, -1.0 GeV is returned. */ Energy width() const { return commonWidth; } /** * Returns the common decay length of the matching particles. If all * matching particles do not have exactly the same decay length -1.0 * mm is returned. */ Length cTau() const { return commonCTau; } /** * Return common charge. If all matching particles have the same * charge the common charge is returned. Otherwise if all are * positive (negative), PDT::Positive (PDT::Negative) is * returned. Otherwise if all are charged, PDT::Charged is * returned. Otherwise PDT::ChargeUndefined is returned. */ PDT::Charge iCharge() const { return commonCharge; } /** * Are the particles charged? If all matching particles are charged, return * true, otherwise false. */ bool charged() const { return PDT::charged(commonCharge); } /** * Are the particles positively charged? If all matching particles * are positively charged, return true, otherwise false. */ bool positive() const { return PDT::positive(commonCharge); } /** * Are the particles negatively charged? If all matching particles * are negatively charged, return true, otherwise false. */ bool negative() const { return PDT::negative(commonCharge); } /** * Return common spin. If all matching particles have the same spin, * the common spin is returned. Otherwise PDT::SpinUndefined is * returned. */ PDT::Spin iSpin() const { return commonSpin; } /** * If all matching particles have the same colour, the common colour * is returned. Otherwise if all are coloured, PDT::Coloured is * returned. Otherwise PDT::ColourUndefined is returned. */ PDT::Colour iColour() const { return commonColour; } /** * Are the particles coloured? If all matching particles are * coloured, return true, otherwise false. */ bool coloured() const { return PDT::coloured(commonColour); } /** * Are the particles stable? Returns (0)1 if all matching particles * are (un)stable. Otherwise -1 is returned. */ int stable() const { return commonStable; } //@} /** * Get the matcher object matching the antiparticles of this. If * no-one exists null is returned. */ tPMPtr CC() const { return theAntiPartner; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Check sanity of the object during the setup phase. */ virtual void doupdate(); //@} protected: /** * Add a particle to the set of matching particles if it meets the * criteria. */ void addPIfMatch(tPDPtr); /** * Add a particle matcher to the set of matching matchers if it * meets the criteria. */ void addMIfMatch(tPMPtr); /** * Add a number of particles to the set of matching particles if * they meets the criteria. */ template void addPIfMatch(Iterator first, Iterator last) { for ( ; first != last; ++first ) addPIfMatch(*first); } /** * Add a number of particles to the set of matching particles if * they meets the criteria. */ template void addPIfMatchFrom(const Cont & c) { addPIfMatch(c.begin(), c.end()); } /** * Add a number of particle matchers to the set of matching * matchers if they meets the criteria. */ template void addMIfMatch(Iterator first, Iterator last) { for ( ; first != last; ++first ) addMIfMatch(*first); } /** * Add a number of particle matchers to the set of matching * matchers if they meets the criteria. */ template void addMIfMatchFrom(const Cont & c) { addMIfMatch(c.begin(), c.end()); } /** * Clear information about matching particles and matchers. */ void clear(); /** * Set antipartner. */ static void setCC(tPMPtr pm, tPMPtr apm) { pm->theAntiPartner = apm; apm->theAntiPartner = pm; } private: /** * The set of particle data objects matched by this matcher. */ tPDSet matchingParticles; /** * A set of matchers which matches a subset of this matcher. */ tPMSet matchingMatchers; /** * The maximum mass of all matching particles. */ Energy theMaxMass; /** * The minimum mass of all matching particles. */ Energy theMinMass; /** * The common mass of all matching particles. */ Energy commonMass; /** * The common width of all matching particles. */ Energy commonWidth; /** * The common decay length of all matching particles. */ Length commonCTau; /** * The common charge of all matching particles. */ PDT::Charge commonCharge; /** * The common spin of all matching particles. */ PDT::Spin commonSpin; /** * The common colour of all matching particles. */ PDT::Colour commonColour; /** * The common stability of all matching particles. */ int commonStable; /** * Pointer to a matcher object which matches all anti particles * which are matched by this matcher. */ tPMPtr theAntiPartner; private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class with persistent data. */ static AbstractClassDescription initMatcherBase; /** * Private and non-existent assignment operator. */ MatcherBase & operator=(const MatcherBase &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of MatcherBase. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MatcherBase. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * MatcherBase class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MatcherBase"; } }; /** @endcond */ } #endif /* ThePEG_MatcherBase_H */ thepeg-1.8.0.orig/PDT/DummyDecayer.cc0000644000175000017500000000267211747772425015504 0ustar sunsun// -*- C++ -*- // // DummyDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DummyDecayer class. // #include "DummyDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" using namespace ThePEG; IBPtr DummyDecayer::clone() const { return new_ptr(*this); } IBPtr DummyDecayer::fullclone() const { return new_ptr(*this); } bool DummyDecayer::accept(const DecayMode &) const { return true; } ParticleVector DummyDecayer::decay(const DecayMode &, const Particle &) const { throw std::logic_error("Tried to decay with the DummyDecayer class."); } double DummyDecayer:: brat(const DecayMode &, const ParticleData &, double) const { return 0.0; } double DummyDecayer::brat(const DecayMode &, const Particle &, double) const { return 0.0; } NoPIOClassDescription DummyDecayer::initDummyDecayer; // Definition of the static class description member. void DummyDecayer::Init() { static ClassDocumentation documentation ("This is a dummy decayer class to be used for symbolic decay " "channels. If it for some reason is called to perform a decay, it " "will throw a std::logic_error."); } thepeg-1.8.0.orig/PDT/Tau2HadronsDecayer.h0000644000175000017500000001026311747772425016400 0ustar sunsun// -*- C++ -*- // // Tau2HadronsDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_Tau2HadronsDecayer_H #define THEPEG_Tau2HadronsDecayer_H // This is the declaration of the Tau2HadronsDecayer class. #include "ThePEG/PDT/FlatDecayer.h" namespace ThePEG { /** * The Tau2HadronsDecayer class inherits FlatDecayer and can perform * the decays of tau to neutrino + hadrons according to phase space, * with an extra weight \f$x_\nu(3-x_\nu)\f$. * * @see \ref Tau2HadronsDecayerInterfaces "The interfaces" * defined for Tau2HadronsDecayer. */ class Tau2HadronsDecayer: public FlatDecayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Destructor. */ virtual ~Tau2HadronsDecayer(); //@} public: /** @name Virtual functions required by the Decayer class. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Give a weight to a phase space point. To be overridden by * subclasses. For a given decay mode, \a dm, decaying \a parent * particle and decayproducts, \a children, distributed according to * a flat distribution in phase space, return a weight (less or * equal to unity) modifying the flat distribution to the desired * one. Note that the chosen phase space point may be rejected, but * the chosen decay channel will not. This means that the weight * returned by this function does not influence the branching * ratios. */ virtual double reweight(const DecayMode & dm, const Particle & parent, const ParticleVector & children) const; //@} public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * Describe a concrete class with persistent data. */ static ClassDescription initTau2HadronsDecayer; /** * Private and non-existent assignment operator. */ Tau2HadronsDecayer & operator=(const Tau2HadronsDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of Tau2HadronsDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Tau2HadronsDecayer. */ typedef FlatDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * Tau2HadronsDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Tau2HadronsDecayer"; } /** Return the name of the shared library be loaded to get access to * the Tau2HadronsDecayer class and every other class it uses * (except the base class). */ static string library() { return "Tau2HadronsDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_Tau2HadronsDecayer_H */ thepeg-1.8.0.orig/PDT/MassGenerator.h0000644000175000017500000000440411747772425015523 0ustar sunsun// -*- C++ -*- // // MassGenerator.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_MassGenerator_H #define ThePEG_MassGenerator_H // This is the declaration of the MassGenerator class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Interface/Interfaced.h" #include "MassGenerator.fh" namespace ThePEG { /** * MassGenerator is an abstract base class used by the ParticleData * class to generate a mass for a Particle instance. * * @see \ref MassGeneratorInterfaces "The interfaces" * defined for MassGenerator. * @see ParticleData */ class MassGenerator: public Interfaced { public: /** @name Virtual functions to be overridden by sub-classes. */ //@{ /** * Return true if this mass generator can handle the given particle * type. */ virtual bool accept(const ParticleData &) const = 0; /** * Generate a mass for an instance of a given particle type. */ virtual Energy mass(const ParticleData &) const = 0; //@} public: /** * Standard Init function used to initialize the interface. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initMassGenerator; /** * Private and non-existent assignment operator. */ MassGenerator & operator=(const MassGenerator &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of MassGenerator. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of MassGenerator. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * MassGenerator class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::MassGenerator"; } }; /** @endcond */ } #endif /* ThePEG_MassGenerator_H */ thepeg-1.8.0.orig/PDT/Makefile.am0000644000175000017500000000652511747772425014642 0ustar sunsunmySOURCES = ParticleData.cc DecayMode.cc MatcherBase.cc Matcher.cc Decayer.cc \ MassGenerator.cc WidthGenerator.cc DummyDecayer.cc \ ConstituentParticleData.cc FlatDecayer.cc PDT.cc RemnantData.cc \ RemnantDecayer.cc SimpleBaryonRemnantDecayer.cc MixedParticleData.cc DOCFILES = CombinedMatcher.h DecayMode.h WidthGenerator.h Decayer.h \ EnumParticles.h MassGenerator.h Matcher.h MatcherBase.h PDT.h \ PID.h ParticleData.h StandardMatchers.h DummyDecayer.h \ ConstituentParticleData.h FlatDecayer.h RemnantData.h \ RemnantDecayer.h SimpleBaryonRemnantDecayer.h MixedParticleData.h INCLUDEFILES = $(DOCFILES) DecayMode.fh \ DecayMode.xh WidthGenerator.fh Decayer.fh \ MassGenerator.fh \ Matcher.tcc ParticleData.xh \ RemnantData.fh RemnantDecayer.fh MixedParticleData.fh noinst_LTLIBRARIES = libThePEGPDT.la pkglib_LTLIBRARIES = BreitWignerMass.la OmegaPhi3PiDecayer.la \ V2PPDecayer.la DalitzDecayer.la Tau2HadronsDecayer.la \ Onium3GDecayer.la QuarksToHadronsDecayer.la ColourPairDecayer.la \ WeakToHadronsDecayer.la libThePEGPDT_la_SOURCES = $(mySOURCES) $(INCLUDEFILES) # Version info should be updated if any interface or persistent I/O # function is changed BreitWignerMass_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) BreitWignerMass_la_SOURCES = BreitWignerMass.cc BreitWignerMass.h # Version info should be updated if any interface or persistent I/O # function is changed OmegaPhi3PiDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) OmegaPhi3PiDecayer_la_SOURCES = OmegaPhi3PiDecayer.cc OmegaPhi3PiDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed V2PPDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) V2PPDecayer_la_SOURCES = V2PPDecayer.cc V2PPDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed DalitzDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) DalitzDecayer_la_SOURCES = DalitzDecayer.cc DalitzDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed Tau2HadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) Tau2HadronsDecayer_la_SOURCES = Tau2HadronsDecayer.cc Tau2HadronsDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed Onium3GDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) Onium3GDecayer_la_SOURCES = Onium3GDecayer.cc Onium3GDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed QuarksToHadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) QuarksToHadronsDecayer_la_SOURCES = QuarksToHadronsDecayer.cc QuarksToHadronsDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed ColourPairDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) ColourPairDecayer_la_SOURCES = ColourPairDecayer.cc ColourPairDecayer.h # Version info should be updated if any interface or persistent I/O # function is changed WeakToHadronsDecayer_la_LDFLAGS = $(AM_LDFLAGS) -module $(LIBTOOLVERSIONINFO) WeakToHadronsDecayer_la_SOURCES = WeakToHadronsDecayer.cc WeakToHadronsDecayer.h include $(top_srcdir)/Config/Makefile.aminclude thepeg-1.8.0.orig/PDT/CombinedMatcher.h0000644000175000017500000000471111747772425015776 0ustar sunsun// -*- C++ -*- // // CombinedMatcher.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_CombinedMatcher_H #define ThePEG_CombinedMatcher_H // This is the declaration of the AndMatcher, OrMatcher and NotMatcher. #include "Matcher.h" namespace ThePEG { /** * The AndMatcher class represents the boolean and operation between * its two template argument classes of base type MatcherBase. * * @see MatcherBase */ template struct AndMatcher: public MatcherType { /** * Typedef for the class representing the matcher for the * charge-gonjugate of particles matched by this class. */ typedef AndMatcher CC; /** * Check match. Return true if the particle type \a pd is matched by * this class (ie. by both of the template argument classes). */ static bool Check(const ParticleData & pd) { return T1::Check(pd) && T2::Check(pd); } }; /** * The OrMatcher class represents the boolean or operation * between its two template argument classes of base type MatcherBase. * * @see MatcherBase */ template struct OrMatcher: public MatcherType { /** * Typedef for the class representing the matcher for the * charge-gonjugate of particles matched by this class. */ typedef OrMatcher CC; /** * Check match. Return true if the particle type \a pd is matched by * this class (ie. by either of the template argument classes). */ static bool Check(const ParticleData & pd) { return T1::Check(pd) || T2::Check(pd); } }; /** * The NotMatcher class represents the boolean not operation * for its template argument class of base type MatcherBase. * * @see MatcherBase */ template struct NotMatcher: public MatcherType { /** * Typedef for the class representing the matcher for the * charge-gonjugate of particles matched by this class. */ typedef NotMatcher CC; /** * Check match. Return true if the particle type \a pd is matched by * this class (ie. if it is not matched by the template argument * class). */ static bool Check(const ParticleData & pd) { return !T::Check(pd); } }; } #endif /* ThePEG_CombinedMatcher_H */ thepeg-1.8.0.orig/PDT/RemnantDecayer.fh0000644000175000017500000000050511747772425016016 0ustar sunsun// -*- C++ -*- // // This is the forward declaration of the RemnantDecayer class. // #ifndef THEPEG_RemnantDecayer_FH #define THEPEG_RemnantDecayer_FH #include "ThePEG/Config/Pointers.h" namespace ThePEG { class RemnantDecayer; } namespace ThePEG { ThePEG_DECLARE_POINTERS(ThePEG::RemnantDecayer,RemDecPtr); } #endif thepeg-1.8.0.orig/PDT/ColourPairDecayer.h0000644000175000017500000001020711747772425016323 0ustar sunsun// -*- C++ -*- // // ColourPairDecayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef THEPEG_ColourPairDecayer_H #define THEPEG_ColourPairDecayer_H // This is the declaration of the ColourPairDecayer class. #include "ThePEG/PDT/FlatDecayer.h" namespace ThePEG { /** * ColourPairDecayer inherits from the FlatDecayer class and performs * decays according to phase space into two or more particles, some of * which may be coloured. The coloured particles must come in pairs * and will be colour connected pair-wise. * * @see \ref ColourPairDecayerInterfaces "The interfaces" * defined for ColourPairDecayer. */ class ColourPairDecayer: public FlatDecayer { public: /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ ColourPairDecayer() : doShower(true) {} //@} public: /** @name Virtual functions required by the Decayer and FlatDecayer classes. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const; /** * Produce children. Used by the FlatDecayer::decay() to produce * instances of the children given a DecayMode \a dm and the * decaying particle \a parent.. */ virtual ParticleVector getChildren(const DecayMode & dm, const Particle & parent) const; //@} /** * Return true if the produced gluons and quarks should be * showered. The corresponding flag is set though the interface. */ bool shower() const { return doShower; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); protected: /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} private: /** * If true the produced gluons and quarks should be showered. */ bool doShower; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initColourPairDecayer; /** * Private and non-existent assignment operator. */ ColourPairDecayer & operator=(const ColourPairDecayer &); }; } namespace ThePEG { /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of ColourPairDecayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of ColourPairDecayer. */ typedef FlatDecayer NthBase; }; /** This template specialization informs ThePEG about the name of the * ColourPairDecayer class and the shared object where it is * defined. */ template <> struct ClassTraits : public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::ColourPairDecayer"; } /** Return the name of the shared library be loaded to get access to * the ColourPairDecayer class and every other class it uses * (except the base class). */ static string library() { return "ColourPairDecayer.so"; } }; /** @endcond */ } #endif /* THEPEG_ColourPairDecayer_H */ thepeg-1.8.0.orig/PDT/Decayer.fh0000644000175000017500000000043111747772425014467 0ustar sunsun// -*- C++ -*- #ifndef ThePEG_Decayer_FH #define ThePEG_Decayer_FH // // This is the forward declaration of the Decayer class. // #include "ThePEG/Config/ThePEG.h" namespace ThePEG { class Decayer; ThePEG_DECLARE_POINTERS(Decayer,DecayerPtr); } #endif /* ThePEG_Decayer_FH */ thepeg-1.8.0.orig/PDT/Decayer.h0000644000175000017500000001500411747772425014323 0ustar sunsun// -*- C++ -*- // // Decayer.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_Decayer_H #define ThePEG_Decayer_H // This is the declaration of the Decayer class. #include "ThePEG/Config/ThePEG.h" #include "Decayer.fh" #include "ThePEG/Handlers/HandlerBase.h" #include "ThePEG/MatrixElement/Amplitude.h" namespace ThePEG { /** * Decayer is an abstract base class to specify objects modelling the * decay of a particle. * * @see \ref DecayerInterfaces "The interfaces" * defined for Decayer. * @see ParticleData * @see DecayMode */ class Decayer: public HandlerBase { public: /** @name Virtual functions to be overridden in sub-classes. */ //@{ /** * Check if this decayer can perfom the decay specified by the * given decay mode. * @param dm the DecayMode describing the decay. * @return true if this decayer can handle the given mode, otherwise false. */ virtual bool accept(const DecayMode & dm) const = 0; /** * Return true if this Decayer need to access the full current step * when a particle is decayed. If true is returned the standard * Decay Handler will call the decay(const DecayMode&,const * Particle&,Step&) function rather than the decay(const * DecayMode&,const Particle&) function. */ virtual bool needsFullStep() const; /** * Perform a decay for a given DecayMode and a given Particle instance. * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p) const = 0; /** * Perform a decay for a given DecayMode and a given Particle * instance. This version allows the decaying particle to borrow * energy/momentum from its sublings in the current step. This will * be called by the standard DecayHandler if the needsFullStep() * function returns true. * * @param dm the DecayMode describing the decay. * @param p the Particle instance to be decayed. * @param step the current step in which to find possible siblings to * shuffle energy with. * @return a ParticleVector containing the decay products. */ virtual ParticleVector decay(const DecayMode & dm, const Particle & p, Step & step) const; /** * Calculate branching ratio. If this model has any oppinions on the * decay rate for a given decay mode \a dm, for a given particle * type \a pd, this method may be overriden to return this * oppinion. \a oldbrat is the branching ratio specified in the * DecayMode or by asking the WidthGenerator of \a pd. */ virtual double brat(const DecayMode & dm, const ParticleData & pd, double oldbrat) const; /** * Calculate branching ratio. If this model has any oppinions on the * decay rate for a given decay mode \a dm, for a given particle \a * p, this method may be overriden to return this oppinion. \a * oldbrat is the branching ratio specified in the DecayMode or by * asking the WidthGenerator of \a p. */ virtual double brat(const DecayMode & dm, const Particle & p, double oldbrat) const; /** * Produce the children. Can be used by sub-class decay() functions * to produce instances of the children. This default implementation * just calls the produceProducts() of the specified decay products * in DecayMode object, \a dm. */ virtual ParticleVector getChildren(const DecayMode & dm, const Particle & parent) const; /** * Boost the decay products. Can be used by sub-classes to perform * the final boost back from the parents cms. This default version * does just that. */ virtual void finalBoost(const Particle & parent, const ParticleVector & children) const; /** * Set the scales. Can be used by sub classes to set the production * scale of the children. This default version sets the scale to the * parents mass. */ virtual void setScales(const Particle & parent, const ParticleVector & children) const; //@} /** * Return an amplitude associated with this decay matrix * element. May return null. */ Ptr::pointer amplitude() const { return theAmplitude; } /** * Static function to administer the decay of a \a particle. The * children are properly added to the particle and to the given \a * step. Maximum \a maxtry attempts to decay the particle is * performed. * @return the produced children. */ static ParticleVector DecayParticle(tPPtr parent, Step & step, long maxtry = 1000); /** * Exception class used if something goes wrong in DecayParticle(). */ struct DecayFailure: public Exception {}; public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interfaces. */ static void Init(); private: /** * The static object used to initialize the description of this class. * Indicates that this is an abstract class without persistent data. */ static AbstractNoPIOClassDescription initDecayer; /** * Private and non-existent assignment operator. */ Decayer & operator=(const Decayer &); /** * A possible null pointer to an amplitude associated with this * matrix element. */ Ptr::pointer theAmplitude; }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the base classes * of Decayer. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of Decayer. */ typedef HandlerBase NthBase; }; /** This template specialization informs ThePEG about the name of the * Decayer class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::Decayer"; } }; /** @endcond */ } #endif /* ThePEG_Decayer_H */ thepeg-1.8.0.orig/PDT/ParticleData.xh0000644000175000017500000000147411747772425015502 0ustar sunsun// -*- C++ -*- // // ParticleData.xh is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_ParticleData_XH #define ThePEG_ParticleData_XH // // This is the declarations of the exception classes used by the // ParticleData class. // #include "ThePEG/Interface/InterfaceBase.xh" namespace ThePEG { /** @cond EXCEPTIONCLASSES */ /** Exception class used by ParticleData if the setting of the charge fails. */ struct ParticleChargeCommand: public InterfaceException { /** Standard constructor. */ ParticleChargeCommand(const ParticleData &, string); }; /** @endcond */ } #endif /* ThePEG_ParticleData_XH */ thepeg-1.8.0.orig/PDT/DecayMode.h0000644000175000017500000003554411747772425014614 0ustar sunsun// -*- C++ -*- // // DecayMode.h is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // #ifndef ThePEG_DecayMode_H #define ThePEG_DecayMode_H // This is the declaration of the DecayMode class. #include "ThePEG/Config/ThePEG.h" #include "ThePEG/Interface/Interfaced.h" #include "DecayMode.fh" #include "MatcherBase.h" #include "Decayer.h" namespace ThePEG { ThePEG_DECLARE_MULTISET(tPDPtr,ParticleMSet); ThePEG_DECLARE_MULTISET(tPMPtr,MatcherMSet); ThePEG_DECLARE_MULTISET(tDMPtr,ModeMSet); /** * The DecayMode class describes a decay channel of a particle. In its * simplest form it contains simply a parent ParticleData object and a * list of decay products, but it can also specify a set of * MatcherBase objects each representing one of a set of possible * decay products. A matcher can also be specified to represents an * unlimited set of decay products. Decay chains can be represented by * specifying other decay channels where the parents are taken to be * intermediate resonances. It is also possible to specify the absence * of intermediate resonances. * * Each decay mode can be uniquely described by a character string on * the form * {decaying-particle-name}->{decay-product-specifier}[,{decay-product-specifier},...]; * where no spaces are allowed anywhere. The decaying-particle-name * should be a path to a particle in the Repository or a * PDG-standardized particle name (see ParticleData::PDGName()) and * the decay-product-specifier can be one of the following: * *

    * *
  • a path to a particle in the Repository or a PDG-standardized * particle name if it is a specific decay product, * *
  • a question mark followed by the name of a particle matcher * object in the Repository if representing one of several different * alternative decay products, * *
  • a star followed by the name of a particle matcher object in * the Repository if representing any number of several different * alternative decay products (note that only one of these * wild-card matchers may be specified, if several are given * only the last one will be taken into account), * *
  • a whole decay mode string enclosed in square brackets if * representing a resonance decay product with a specified decay mode, * *
  • an exclamation mark followed by a path to a particle in the * Repository or a PDG-standardized particle name representing the * exclusion of an intermediate resonance decaying into the other * specified decay products. * *
  • two paths to particles in the Repository or PDG-standardized * particle names with an equal sign between, indicating two coloured * particles which are in a colour-singlet state. * *
* * Note that the order of the specified decay products will be * preserved when the corresponding particles are produced in a decay. * * The possibility of specifying matchers as decay products means that * one decay mode may overlap with another one. When an EventGenerator * is initialized all decay modes are checked so that a given decay * mode afterwards will report if there are other modes which are * matched by its matchers through the overlap() function. * * @see \ref DecayModeInterfaces "The interfaces" * defined for DecayMode. * @see ParticleData * @see MatcherBase */ class DecayMode: public Interfaced { public: /** ParticleData is a friend. */ friend class ParticleData; /** RemnantData is a friend. */ friend class RemnantData; /** The EventGenerator is a friend. */ friend class EventGenerator; public: /** A vector of DecayMode pointers. */ typedef vector ModeVector; /** A vector of pairs of ParticleData pointers. */ typedef vector LinkVector; public: /** * Create a decay mode from a given tag. This function is used * directly by the Repository. If name of the decaying particle is a * valid path to a particle object, the decaymode will be added to * that particle, otherwise it will be added to the default particle * of that name. */ static DMPtr constructDecayMode(string & tag, vector * save = 0); /** @name Standard constructors and destructors. */ //@{ /** * Default constructor. */ DecayMode(); /** * Copy-constructor. */ DecayMode(const DecayMode &); /** * Destructor. */ ~DecayMode(); //@} /** * Return a clone of this decay mode with \a pd as the decaying * particle. */ virtual DMPtr clone(tPDPtr pd) const; public: /** * Return the tag for this decay mode. This string is a unique * identifier for this decay mode. */ const string & tag() const { return theTag.size() ? theTag : ( theTag = makeTag() ); } /** * Get a pointer to the particle data object corresponding to * the decaying particle. */ tcPDPtr parent() const { return theParent; } /** * The set of identified decay products. */ const ParticleMSet & products() const { return theProducts; } /** * The set of identified decay products in the order they were specified. */ const tPDVector & orderedProducts() const { return theOrderedProducts; } /** * Produce particles corresponding to the identified decay * products. They will be orderd in the same order they were * sspecified. */ PVector produceProducts() const; /** * The set of identified resonance products with specified decay * modes */ const ModeMSet & cascadeProducts() const { return theCascadeProducts; } /** * The set of matchers each corresponding to one decay product. */ const MatcherMSet & productMatchers() const { return theMatchers; } /** * The pointer to a matcher corresponding to any number of decay * products */ tPMPtr wildProductMatcher() const { return theWildMatcher; } /** * The set particles corresponding to excluded intermediate * resonances. */ const ParticleMSet & excluded() const { return theExcluded; } /** * Return the branching ratio to be used. */ double brat() const; /** * Calculate the branching ratio for a particular particle instance. */ double brat(const Particle &) const; /** * Get the decayer assigned to this mode. */ tDecayerPtr decayer() const { return theDecayer; } /** * Check if another decay mode is included in this one. */ bool includes(const DecayMode &) const; /** * Return a pointer to the corresponding decaymode for the * antiparticle decay. */ tDMPtr CC() const { return theAntiPartner; } /** * Check if another decay mode has the same final state as this * one. */ bool operator == (const DecayMode & d) const { return tag() == d.tag() ; } /** * Return a vector of pairs of decay products which are linked * together (e.g. colourless q-qbar pairs). */ const LinkVector & links() const { return theLinks; } /** * Return the list of overlapping decay modes. */ const ModeVector & overlap() const { return theOverlap; } /** * Modify this mode to have properties corresponding to its anti-partner. */ void synchronize(); /** * Check whether this decay mode is switched on */ bool on() const { return isOn; } public: /** @name Functions used by the persistent I/O system. */ //@{ /** * Function used to write out object persistently. * @param os the persistent output stream written to. */ void persistentOutput(PersistentOStream & os) const; /** * Function used to read in object persistently. * @param is the persistent input stream read from. * @param version the version number of the object when written. */ void persistentInput(PersistentIStream & is, int version); //@} /** * Standard Init function used to initialize the interface. */ static void Init(); protected: /** @name Standard Interfaced functions. */ //@{ /** * Check sanity of the object during the setup phase. */ virtual void doupdate(); /** * Rebind pointer to other Interfaced objects. Called in the setup phase * after all objects used in an EventGenerator has been cloned so that * the pointers will refer to the cloned objects afterwards. * @param trans a TranslationMap relating the original objects to * their respective clones. * @throws RebindException if no cloned object was found for a given * pointer. */ virtual void rebind(const TranslationMap & trans) ; /** * Return a vector of all pointers to Interfaced objects used in this * object. * @return a vector of pointers. */ virtual IVector getReferences(); //@} protected: /** * Set a pointer to the particle data object corresponding to * the decaying particle. */ void parent(tPDPtr pd) { theParent = pd; } /** * Set the branching ratio to be used. */ void brat(double); /** * Switch on this decay mode. */ void switchOn(); /** * Switch off this decay mode. */ void switchOff(); /** * Set the decayer. The set method returns false if the decayer * does not claim to be able to handle the decay. */ void decayer(tDecayerPtr); /** * Add identified decay products. */ void addProduct(tPDPtr); /** * Add a pair of decay products which are linked together * (e.g. colourless q-qbar pairs). */ void addLink(tPDPtr a, tPDPtr b); /** * Add identified resonant product with specified decay mode. */ void addCascadeProduct(tDMPtr); /** * Add a mathcer corresponding to one decay product. */ void addProductMatcher(tPMPtr); /** * Add a matcher corresponding to any number of decay products. */ void setWildMatcher(tPMPtr); /** * Add a particle corresponding to an excluded intermediate * resonance. */ void addExcluded(tPDPtr); /** * Protected creation and clone methods. */ static DMPtr Create(tPDPtr newParent, double newBrat = 0.0, bool newOn = false); /** * Protected constructor. */ DecayMode(tPDPtr newParticle, double newBrat, bool newOn); /** @name Clone Methods. */ //@{ /** * Make a simple clone of this object. * @return a pointer to the new object. */ virtual IBPtr clone() const; /** Make a clone of this object, possibly modifying the cloned object * to make it sane. * @return a pointer to the new object. */ virtual IBPtr fullclone() const; //@} /** * Protected special clone function. */ DMPtr dmclone() const; /** * Read setup info from a standard stream used by the * Repository. The following information must be supplied in a * white-space separated list: the branching ratio, on or off (true * or false), and the name of a Decayer. */ virtual void readSetup(istream & is); /** * The set of identified decay products. */ ParticleMSet & products() { return theProducts; } /** * The set of identified resonant products with specified decay * modes */ ModeMSet & cascadeProducts() { return theCascadeProducts; } /** * The set of matchers each corresponding to one decay product. */ MatcherMSet & productMatchers() { return theMatchers; } /** * The pointer to a matcher corresponding to any number of decay * products */ tPMPtr & wildProductMatcher() { return theWildMatcher; } /** * The set particles corresponding to excluded intermediate * resonances. */ ParticleMSet & excluded() { return theExcluded; } /** * Set the pointer to the corresponding decaymode for the * antiparticle decay. */ void CC(tDMPtr cc) {theAntiPartner = cc;} private: /** * Add a decay mode to the list of overlapping modes if included. */ bool addOverlap(tcDMPtr); /** * Remove all decay modes from the list of overlapping modes. */ void resetOverlap(); /** * Check if two sets of particles have equivalent types. */ bool compareId(const ParticleMSet &, const ParticleMSet &) const; /** * Check if a particle set contains a given particle ID. */ ParticleMSet::const_iterator findId(const ParticleMSet &, const ParticleData &) const; /** * Use the members in this decay channel and generate the * corresponding tag. */ string makeTag() const; /** * Delete the tag (it will be regenerated later if asked for). */ void resetTag() { theTag = ""; if ( CC() ) CC()->theTag = ""; } private: /** * Utility function for the interface. */ void setOn(long); /** * Utility function for the interface. */ long getOn() const; /** * Utility function for the interface. */ void setDecayer(DecayerPtr); private: /** * The tag. */ mutable string theTag; /** * The branching ratio. */ double theBrat; /** * True if this mode is switched on. */ bool isOn; /** * Pointer to a particle data object corresponding to the decaying * particle. */ tPDPtr theParent; /** * The set of specified decay particles. */ ParticleMSet theProducts; /** * The set of specified decay particles in the order they was specified. */ tPDVector theOrderedProducts; /** * The set of matching decay channels corresponding to a specified * with a specified subsequent decay mode. */ ModeMSet theCascadeProducts; /** * The set of matching decay products. Each of the matchers * correspond to one particle. */ MatcherMSet theMatchers; /** * A particle matcher which corresponds to zero or more particles. */ tPMPtr theWildMatcher; /** * A set of particles which are not allowed as intermediate * resonances. */ ParticleMSet theExcluded; /** * A list of decay modes which are included in this one. */ ModeVector theOverlap; /** * The decayer object responsible for performing the decay. */ DecayerPtr theDecayer; /** * The corresponding decay mode of the anti particle. */ tDMPtr theAntiPartner; /** * The vector of pairs of decay products which are linked together * (e.g. colourless q-qbar pairs). */ LinkVector theLinks; private: /** * Describe a concrete class with persistent data. */ static ClassDescription initDecayMode; /** * Private and non-existent assignment operator. */ DecayMode & operator=(const DecayMode &); }; /** @cond TRAITSPECIALIZATIONS */ /** This template specialization informs ThePEG about the * base classes of DecayMode. */ template <> struct BaseClassTrait: public ClassTraitsType { /** Typedef of the first base class of DecayMode. */ typedef Interfaced NthBase; }; /** This template specialization informs ThePEG about the name of the * DecayMode class. */ template <> struct ClassTraits: public ClassTraitsBase { /** Return a platform-independent class name */ static string className() { return "ThePEG::DecayMode"; } }; /** @endcond */ } #endif /* ThePEG_DecayMode_H */ thepeg-1.8.0.orig/PDT/DalitzDecayer.cc0000644000175000017500000000757211747772425015644 0ustar sunsun// -*- C++ -*- // // DalitzDecayer.cc is a part of ThePEG - Toolkit for HEP Event Generation // Copyright (C) 1999-2011 Leif Lonnblad // // ThePEG is licenced under version 2 of the GPL, see COPYING for details. // Please respect the MCnet academic guidelines, see GUIDELINES for details. // // // This is the implementation of the non-inlined, non-templated member // functions of the DalitzDecayer class. // #include "DalitzDecayer.h" #include "ThePEG/Interface/ClassDocumentation.h" #include "ThePEG/PDT/DecayMode.h" #include "ThePEG/PDT/EnumParticles.h" #include "ThePEG/PDT/StandardMatchers.h" #include "ThePEG/EventRecord/Particle.h" #include "ThePEG/Utilities/SimplePhaseSpace.h" #include "ThePEG/Repository/EventGenerator.h" #include "ThePEG/Utilities/Rebinder.h" #include "ThePEG/Persistency/PersistentOStream.h" #include "ThePEG/Persistency/PersistentIStream.h" using namespace ThePEG; DalitzDecayer::~DalitzDecayer() {} IBPtr DalitzDecayer::clone() const { return new_ptr(*this); } IBPtr DalitzDecayer::fullclone() const { return new_ptr(*this); } void DalitzDecayer::doinit() { Decayer::doinit(); rho = getParticleData(ParticleID::rho0); } bool DalitzDecayer::accept(const DecayMode & dm) const { if ( dm.products().size() != 3 || !dm.cascadeProducts().empty() || !dm.productMatchers().empty() || dm.wildProductMatcher() ) return false; bool ep = false, em = false, gam = false; for ( ParticleMSet::const_iterator pit = dm.products().begin(); pit != dm.products().end(); ++pit ) { if ( (**pit).id() == ParticleID::eplus ) ep = true; else if ( (**pit).id() == ParticleID::eminus ) em = true; else if ( (**pit).id() == ParticleID::gamma ) gam = true; } return ep && em && gam; } ParticleVector DalitzDecayer::decay(const DecayMode & dm, const Particle & parent) const { ParticleVector children = getChildren(dm, parent); tPPtr ep; tPPtr em; tPPtr gam; for ( int i = 0, N = children.size(); i < N; ++i ) { if ( children[i]->id() == ParticleID::eplus ) ep = children[i]; else if ( children[i]->id() == ParticleID::eminus ) em = children[i]; else if ( children[i]->id() == ParticleID::gamma ) gam = children[i]; } Energy2 mee2 = ZERO; Energy2 me2 = ep->mass()*em->mass(); Energy2 mm2 = sqr(parent.mass()); Energy2 mr2 = sqr(rho->mass()); Energy2 gr2 = sqr(rho->width()); Energy2 mee2min = 4.0*me2; do { mee2 = mee2min*pow(mm2/mee2min, rnd()); } while ( rnd() > (1.0 - 2.0*me2/mee2)*sqrt(max(0.0, 1.0 - mee2min/mee2))* pow(1.0 - mee2/mm2, 3.0)* (1.0 + gr2/mr2)/(sqr(1.0 - mee2/mr2) + gr2/mr2) ); LorentzMomentum pee, p0, pp, pm; do { SimplePhaseSpace::CMS(mee2, ep, em); pee = ep->momentum() + em->momentum(); p0 = gam->momentum(); SimplePhaseSpace::CMS(mm2, p0, pee); LorentzRotation r (0.0, 0.0, pee.rho()/pee.e()); r.rotateY(pee.theta()); r.rotateZ(pee.phi()); ep->transform(r); em->transform(r); gam->setMomentum(p0); pp = ep->momentum(); pm = em->momentum(); } while ( rnd() > ((mee2 - 2.0*me2)*(sqr(p0*pp) + sqr(p0*pm)) + mee2min*((p0*pp)*(p0*pm) + sqr(p0*pp) + sqr(p0*pm)))*4.0/ (mee2*sqr(mm2 - mee2)) ); finalBoost(parent, children); setScales(parent, children); return children; } void DalitzDecayer::persistentOutput(PersistentOStream & os) const { os << rho; } void DalitzDecayer::persistentInput(PersistentIStream & is, int) { is >> rho; } void DalitzDecayer::rebind(const TranslationMap & trans) { rho = trans.translate(rho); Decayer::rebind(trans); } IVector DalitzDecayer::getReferences() { IVector ret = Decayer::getReferences(); ret.push_back(rho); return ret; } ClassDescription DalitzDecayer::initDalitzDecayer; // Definition of the static class description member. void DalitzDecayer::Init() { static ClassDocumentation documentation ("This class performs Dalitz decays into gamma e+ e-."); }